/* Native-dependent code for AMD64.
- Copyright (C) 2003-2013 Free Software Foundation, Inc.
+ Copyright (C) 2003-2017 Free Software Foundation, Inc.
This file is part of GDB.
#include "gdbarch.h"
#include "regcache.h"
-#include "gdb_assert.h"
-#include "gdb_string.h"
-
#include "i386-tdep.h"
#include "amd64-tdep.h"
#include "amd64-nat.h"
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;
+
+ /* 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 -1;
+ 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;
+ const char *regs = (const char *) gregs;
struct gdbarch *gdbarch = get_regcache_arch (regcache);
int num_regs = amd64_native_gregset64_num_regs;
int i;
amd64_collect_native_gregset (const struct regcache *regcache,
void *gregs, int regnum)
{
- char *regs = gregs;
+ char *regs = (char *) gregs;
struct gdbarch *gdbarch = get_regcache_arch (regcache);
int num_regs = amd64_native_gregset64_num_regs;
int i;