X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Famd64-nat.c;h=b0460529545c8785b5e56c491176f9bcc1fd98e1;hb=6e8c24fe27098f407000812e61fa8210095a7970;hp=68654568a48cdc8ac44841da009cd844e39b4c2a;hpb=0b30217134add051e159a192066a1e568ebd837f;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/amd64-nat.c b/gdb/amd64-nat.c index 68654568a4..b046052954 100644 --- a/gdb/amd64-nat.c +++ b/gdb/amd64-nat.c @@ -1,6 +1,6 @@ /* Native-dependent code for AMD64. - Copyright (C) 2003-2004, 2007-2012 Free Software Foundation, Inc. + Copyright (C) 2003-2017 Free Software Foundation, Inc. This file is part of GDB. @@ -21,9 +21,6 @@ #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" @@ -59,7 +56,7 @@ amd64_native_gregset_reg_offset (struct gdbarch *gdbarch, int regnum) gdb_assert (regnum >= 0); - if (gdbarch_ptr_bit (gdbarch) == 32) + if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32) { reg_offset = amd64_native_gregset32_reg_offset; num_regs = amd64_native_gregset32_num_regs; @@ -68,10 +65,17 @@ amd64_native_gregset_reg_offset (struct gdbarch *gdbarch, int regnum) 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 @@ -91,12 +95,12 @@ void 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; - if (gdbarch_ptr_bit (gdbarch) == 32) + if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32) num_regs = amd64_native_gregset32_num_regs; if (num_regs > gdbarch_num_regs (gdbarch)) @@ -122,12 +126,12 @@ void 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; - if (gdbarch_ptr_bit (gdbarch) == 32) + if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32) { num_regs = amd64_native_gregset32_num_regs;