/* Native-dependent code for AMD64.
- Copyright (C) 2003-2015 Free Software Foundation, Inc.
+ Copyright (C) 2003-2019 Free Software Foundation, Inc.
This file is part of GDB.
if (num_regs > gdbarch_num_regs (gdbarch))
num_regs = gdbarch_num_regs (gdbarch);
- if (regnum < num_regs && regnum < gdbarch_num_regs (gdbarch))
- return reg_offset[regnum];
+ if (regnum >= num_regs)
+ return -1;
- return -1;
+ /* Kernels that predate Linux 2.6.25 don't provide access to
+ these segment registers in user_regs_struct. */
+#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
+ if (regnum == AMD64_FSBASE_REGNUM || regnum == AMD64_GSBASE_REGNUM)
+ return -1;
+#endif
+
+ return reg_offset[regnum];
}
/* Return whether the native general-purpose register set supplies
amd64_supply_native_gregset (struct regcache *regcache,
const void *gregs, int regnum)
{
- const char *regs = gregs;
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ const char *regs = (const char *) gregs;
+ struct gdbarch *gdbarch = regcache->arch ();
int num_regs = amd64_native_gregset64_num_regs;
int i;
int offset = amd64_native_gregset_reg_offset (gdbarch, i);
if (offset != -1)
- regcache_raw_supply (regcache, i, regs + offset);
+ regcache->raw_supply (i, regs + offset);
}
}
}
amd64_collect_native_gregset (const struct regcache *regcache,
void *gregs, int regnum)
{
- char *regs = gregs;
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ char *regs = (char *) gregs;
+ struct gdbarch *gdbarch = regcache->arch ();
int num_regs = amd64_native_gregset64_num_regs;
int i;
int offset = amd64_native_gregset_reg_offset (gdbarch, i);
if (offset != -1)
- regcache_raw_collect (regcache, i, regs + offset);
+ regcache->raw_collect (i, regs + offset);
}
}
}