X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=gdb%2Famd64-nat.c;h=ad5df57a3112dd3461026462afaf6d96ddbddf75;hb=0154d99053a95392380cd4629a89b0ac46df3737;hp=31b360377be06cb3211ab3a2aaae3ae01abfb644;hpb=e9ff708b9b63638bd9dfa404bc8ab403c1dc7402;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/amd64-nat.c b/gdb/amd64-nat.c index 31b360377b..ad5df57a31 100644 --- a/gdb/amd64-nat.c +++ b/gdb/amd64-nat.c @@ -1,12 +1,12 @@ /* Native-dependent code for AMD64. - Copyright 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2003-2016 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -15,19 +15,15 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ #include "defs.h" #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" /* The following bits of code help with implementing debugging 32-bit code natively on AMD64. The idea is to define two mappings between @@ -53,23 +49,23 @@ int amd64_native_gregset64_num_regs = AMD64_NUM_GREGS; general-purpose register set. */ static int -amd64_native_gregset_reg_offset (int regnum) +amd64_native_gregset_reg_offset (struct gdbarch *gdbarch, int regnum) { int *reg_offset = amd64_native_gregset64_reg_offset; int num_regs = amd64_native_gregset64_num_regs; gdb_assert (regnum >= 0); - if (gdbarch_ptr_bit (current_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; } - if (num_regs > NUM_REGS) - num_regs = NUM_REGS; + if (num_regs > gdbarch_num_regs (gdbarch)) + num_regs = gdbarch_num_regs (gdbarch); - if (regnum < num_regs && regnum < NUM_REGS) + if (regnum < num_regs && regnum < gdbarch_num_regs (gdbarch)) return reg_offset[regnum]; return -1; @@ -79,35 +75,35 @@ amd64_native_gregset_reg_offset (int regnum) register REGNUM. */ int -amd64_native_gregset_supplies_p (int regnum) +amd64_native_gregset_supplies_p (struct gdbarch *gdbarch, int regnum) { - return (amd64_native_gregset_reg_offset (regnum) != -1); + return (amd64_native_gregset_reg_offset (gdbarch, regnum) != -1); } -/* Supply register REGNUM, whose contents are store in BUF, to +/* Supply register REGNUM, whose contents are stored in GREGS, to REGCACHE. If REGNUM is -1, supply all appropriate registers. */ void 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; - 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 > NUM_REGS) - num_regs = NUM_REGS; + if (num_regs > gdbarch_num_regs (gdbarch)) + num_regs = gdbarch_num_regs (gdbarch); for (i = 0; i < num_regs; i++) { if (regnum == -1 || regnum == i) { - int offset = amd64_native_gregset_reg_offset (i); + int offset = amd64_native_gregset_reg_offset (gdbarch, i); if (offset != -1) regcache_raw_supply (regcache, i, regs + offset); @@ -123,12 +119,12 @@ void 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; - if (gdbarch_ptr_bit (gdbarch) == 32) + if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32) { num_regs = amd64_native_gregset32_num_regs; @@ -137,24 +133,24 @@ amd64_collect_native_gregset (const struct regcache *regcache, for (i = 0; i <= I386_EIP_REGNUM; i++) { if (regnum == -1 || regnum == i) - memset (regs + amd64_native_gregset_reg_offset (i), 0, 8); + memset (regs + amd64_native_gregset_reg_offset (gdbarch, i), 0, 8); } /* Ditto for %cs, %ss, %ds, %es, %fs, and %gs. */ for (i = I386_CS_REGNUM; i <= I386_GS_REGNUM; i++) { if (regnum == -1 || regnum == i) - memset (regs + amd64_native_gregset_reg_offset (i), 0, 8); + memset (regs + amd64_native_gregset_reg_offset (gdbarch, i), 0, 8); } } - if (num_regs > NUM_REGS) - num_regs = NUM_REGS; + if (num_regs > gdbarch_num_regs (gdbarch)) + num_regs = gdbarch_num_regs (gdbarch); for (i = 0; i < num_regs; i++) { if (regnum == -1 || regnum == i) { - int offset = amd64_native_gregset_reg_offset (i); + int offset = amd64_native_gregset_reg_offset (gdbarch, i); if (offset != -1) regcache_raw_collect (regcache, i, regs + offset);