diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/s390-nat.c | 38 |
2 files changed, 32 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d649837..214e9fe 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2002-07-15 Andrew Cagney <ac131313@redhat.com> + From Gerhard Tonn <TON@de.ibm.com>: + * s390-nat.c (fill_fpregset, fill_gregset): Use regcache_collect + instead of supply_register. + +2002-07-15 Andrew Cagney <ac131313@redhat.com> + * dwarf2cfi.c: Include "gdb_assert.h". (frame_state_for): Use gdb_assert to check that fde->cie_ptr is non-NULL. diff --git a/gdb/s390-nat.c b/gdb/s390-nat.c index 19e8923..b7f5918 100644 --- a/gdb/s390-nat.c +++ b/gdb/s390-nat.c @@ -273,14 +273,22 @@ supply_fpregset (fpregset_t * fpregsetp) void fill_gregset (gregset_t * gregsetp, int regno) { + int regi; greg_t *gregp = (greg_t *) gregsetp; - if (regno >= S390_FIRST_CR && regno <= S390_LAST_CR) - supply_register (regno, NULL); - else if (regno != -1) - supply_register (regno, (char *) &gregp[regno]); - else - supply_gregset (gregsetp); + if (regno < 0) + { + regcache_collect (S390_PSWM_REGNUM, &gregp[S390_PSWM_REGNUM]); + regcache_collect (S390_PC_REGNUM, &gregp[S390_PC_REGNUM]); + for (regi = 0; regi < S390_NUM_GPRS; regi++) + regcache_collect (S390_GP0_REGNUM + regi, + &gregp[S390_GP0_REGNUM + regi]); + for (regi = 0; regi < S390_NUM_ACRS; regi++) + regcache_collect (S390_FIRST_ACR + regi, + &gregp[S390_FIRST_ACR + regi]); + } + else if (regno >= S390_PSWM_REGNUM && regno <= S390_LAST_ACR) + regcache_collect (regno, &gregp[regno]); } /* Given a pointer to a floating point register set in /proc format @@ -291,12 +299,18 @@ fill_gregset (gregset_t * gregsetp, int regno) void fill_fpregset (fpregset_t * fpregsetp, int regno) { - if (regno == -1) - supply_fpregset (fpregsetp); - else - supply_register (regno, - &((char *) fpregsetp)[REGISTER_BYTE (regno) - - REGISTER_BYTE (S390_FPC_REGNUM)]); + int regi; + + if (regno < 0) + { + regcache_collect (S390_FPC_REGNUM, &fpregsetp->fpc); + for (regi = 0; regi < S390_NUM_FPRS; regi++) + regcache_collect (S390_FP0_REGNUM + regi, &fpregsetp->fprs[regi]); + } + else if (regno == S390_FPC_REGNUM) + regcache_collect (S390_FPC_REGNUM, &fpregsetp->fpc); + else if (regno >= S390_FP0_REGNUM && regno <= S390_FPLAST_REGNUM) + regcache_collect (regno, &fpregsetp->fprs[regno - S390_FP0_REGNUM]); } |