X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fi386v4-nat.c;h=4d1020b8d63e286657648db3a41251bba2b389fb;hb=285963233bc7509edb07c035426ee0096650b0af;hp=c680dac6b52635243ff90813898fea25d4a055e9;hpb=ed504bdf4fa2bb56dc2843d530bb8bb8f46b81cf;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/i386v4-nat.c b/gdb/i386v4-nat.c index c680dac6b5..4d1020b8d6 100644 --- a/gdb/i386v4-nat.c +++ b/gdb/i386v4-nat.c @@ -1,13 +1,12 @@ -/* Native-dependent code for SVR4 Unix running on i386's. - Copyright 1988, 1989, 1991, 1992, 1996, 1997, 1998, 1999, 2000, - 2001, 2002 - Free Software Foundation, Inc. +/* Native-dependent code for Unix SVR4 running on i386's. + + Copyright (C) 1988-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, @@ -16,9 +15,7 @@ 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 "value.h" @@ -36,7 +33,9 @@ #include -/* Prototypes for supply_gregset etc. */ +/* We must not compile this code for 64-bit Solaris x86. */ +#if !defined (PR_MODEL_NATIVE) || (PR_MODEL_NATIVE == PR_MODEL_ILP32) + #include "gregset.h" /* The `/proc' interface divides the target machine's register set up @@ -95,35 +94,36 @@ static int regmap[] = EAX, ECX, EDX, EBX, UESP, EBP, ESI, EDI, EIP, EFL, CS, SS, - DS, ES, FS, GS, + DS, ES, FS, GS }; /* Fill GDB's register array with the general-purpose register values in *GREGSETP. */ void -supply_gregset (gregset_t *gregsetp) +supply_gregset (struct regcache *regcache, const gregset_t *gregsetp) { - greg_t *regp = (greg_t *) gregsetp; - int i; + const greg_t *regp = (const greg_t *) gregsetp; + int regnum; - for (i = 0; i < I386_NUM_GREGS; i++) - supply_register (i, (char *) (regp + regmap[i])); + for (regnum = 0; regnum < I386_NUM_GREGS; regnum++) + regcache_raw_supply (regcache, regnum, regp + regmap[regnum]); } -/* Fill register REGNO (if it is a general-purpose register) in - *GREGSETPS with the value in GDB's register array. If REGNO is -1, +/* Fill register REGNUM (if it is a general-purpose register) in + *GREGSETPS with the value in GDB's register array. If REGNUM is -1, do this for all registers. */ void -fill_gregset (gregset_t *gregsetp, int regno) +fill_gregset (const struct regcache *regcache, + gregset_t *gregsetp, int regnum) { greg_t *regp = (greg_t *) gregsetp; int i; for (i = 0; i < I386_NUM_GREGS; i++) - if (regno == -1 || regno == i) - regcache_collect (i, regp + regmap[i]); + if (regnum == -1 || regnum == i) + regcache_raw_collect (regcache, i, regp + regmap[i]); } #endif /* HAVE_GREGSET_T */ @@ -134,12 +134,12 @@ fill_gregset (gregset_t *gregsetp, int regno) *FPREGSETP. */ void -supply_fpregset (fpregset_t *fpregsetp) +supply_fpregset (struct regcache *regcache, const fpregset_t *fpregsetp) { - if (FP0_REGNUM == 0) + if (gdbarch_fp0_regnum (get_regcache_arch (regcache)) == 0) return; - i387_supply_fsave ((const char *) fpregsetp, -1); + i387_supply_fsave (regcache, -1, fpregsetp); } /* Fill register REGNO (if it is a floating-point register) in @@ -147,14 +147,17 @@ supply_fpregset (fpregset_t *fpregsetp) do this for all registers. */ void -fill_fpregset (fpregset_t *fpregsetp, int regno) +fill_fpregset (const struct regcache *regcache, + fpregset_t *fpregsetp, int regno) { - if (FP0_REGNUM == 0) + if (gdbarch_fp0_regnum (get_regcache_arch (regcache)) == 0) return; - i387_fill_fsave ((char *) fpregsetp, regno); + i387_collect_fsave (regcache, regno, fpregsetp); } #endif /* HAVE_FPREGSET_T */ +#endif /* not 64-bit. */ + #endif /* HAVE_SYS_PROCFS_H */