From: Jason Thorpe Date: Fri, 18 Jan 2002 17:47:13 +0000 (+0000) Subject: * alphabsd-nat.c: Update copyright years. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e771a8713483f7e8ce3fb5057dfe0ad7656dbb6a;p=binutils-gdb.git * alphabsd-nat.c: Update copyright years. (fill_gregset): Use regcache_collect. (fill_fpregset): Likewise. (fetch_inferior_registers): Only fetch integer registers if requested to do so. (store_inferior_registers): Only store integer registers if requested to do so. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c77455a80fe..6bf80c4700e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2002-01-18 Jason Thorpe + + * alphabsd-nat.c: Update copyright years. + (fill_gregset): Use regcache_collect. + (fill_fpregset): Likewise. + (fetch_inferior_registers): Only fetch integer registers + if requested to do so. + (store_inferior_registers): Only store integer registers + if requested to do so. + 2002-01-17 Andrew Cagney * config/alpha/alpha-osf3.mh (XDEPFILES): Delete. diff --git a/gdb/alphabsd-nat.c b/gdb/alphabsd-nat.c index 5e7a3618f80..d7ad3a73f37 100644 --- a/gdb/alphabsd-nat.c +++ b/gdb/alphabsd-nat.c @@ -1,5 +1,5 @@ /* Native-dependent code for Alpha BSD's. - Copyright 2000, 2001 Free Software Foundation, Inc. + Copyright 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GDB. @@ -80,13 +80,11 @@ fill_gregset (gregset_t *gregsetp, int regno) for (i = 0; i < NUM_GREGS; i++) if ((regno == -1 || regno == i) && ! CANNOT_STORE_REGISTER (i)) - memcpy (&gregsetp->r_regs[i], ®isters[REGISTER_BYTE (i)], - REGISTER_RAW_SIZE (i)); + regcache_collect (i, (char *) &gregsetp->r_regs[i]); /* The PC travels in the R_ZERO slot. */ if (regno == -1 || regno == PC_REGNUM) - memcpy (&gregsetp->r_regs[R_ZERO], ®isters[REGISTER_BYTE (PC_REGNUM)], - REGISTER_RAW_SIZE (PC_REGNUM)); + regcache_collect (PC_REGNUM, (char *) &gregsetp->r_regs[R_ZERO]); } /* Fill GDB's register array with the floating-point register values @@ -119,27 +117,43 @@ fill_fpregset (fpregset_t *fpregsetp, int regno) for (i = FP0_REGNUM; i < FP0_REGNUM + NUM_FPREGS; i++) if ((regno == -1 || regno == i) && ! CANNOT_STORE_REGISTER (i)) - memcpy (&fpregsetp->fpr_regs[i - FP0_REGNUM], - ®isters[REGISTER_BYTE (i)], REGISTER_RAW_SIZE (i)); + regcache_collect (i, (char *) &fpregsetp->fpr_regs[i - FP0_REGNUM]); if (regno == -1 || regno == FPCR_REGNUM) - memcpy (&fpregsetp->fpr_cr, ®isters[REGISTER_BYTE (FPCR_REGNUM)], - REGISTER_RAW_SIZE (FPCR_REGNUM)); + regcache_collect (FPCR_REGNUM, (char *) &fpregsetp->fpr_cr); } + +/* Determine if PT_GETREGS fetches this register. */ + +static int +getregs_supplies (int regno) +{ + + return ((regno >= V0_REGNUM && regno <= ZERO_REGNUM) + || regno >= PC_REGNUM); +} + + /* Fetch register REGNO from the inferior. If REGNO is -1, do this for all registers (including the floating point registers). */ void fetch_inferior_registers (int regno) { - gregset_t gregs; - if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), - (PTRACE_ARG3_TYPE) &gregs, 0) == -1) - perror_with_name ("Couldn't get registers"); + if (regno == -1 || getregs_supplies (regno)) + { + gregset_t gregs; + + if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), + (PTRACE_ARG3_TYPE) &gregs, 0) == -1) + perror_with_name ("Couldn't get registers"); - supply_gregset (&gregs); + supply_gregset (&gregs); + if (regno != -1) + return; + } if (regno == -1 || regno >= FP0_REGNUM) { @@ -162,17 +176,23 @@ fetch_inferior_registers (int regno) void store_inferior_registers (int regno) { - gregset_t gregs; - if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), - (PTRACE_ARG3_TYPE) &gregs, 0) == -1) - perror_with_name ("Couldn't get registers"); + if (regno == -1 || getregs_supplies (regno)) + { + gregset_t gregs; + if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), + (PTRACE_ARG3_TYPE) &gregs, 0) == -1) + perror_with_name ("Couldn't get registers"); + + fill_gregset (&gregs, regno); - fill_gregset (&gregs, regno); + if (ptrace (PT_SETREGS, PIDGET (inferior_ptid), + (PTRACE_ARG3_TYPE) &gregs, 0) == -1) + perror_with_name ("Couldn't write registers"); - if (ptrace (PT_SETREGS, PIDGET (inferior_ptid), - (PTRACE_ARG3_TYPE) &gregs, 0) == -1) - perror_with_name ("Couldn't write registers"); + if (regno != -1) + return; + } if (regno == -1 || regno >= FP0_REGNUM) {