diff options
Diffstat (limited to 'gdb/mips-xdep.c')
-rw-r--r-- | gdb/mips-xdep.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/gdb/mips-xdep.c b/gdb/mips-xdep.c index 51984e7..a5b0b03 100644 --- a/gdb/mips-xdep.c +++ b/gdb/mips-xdep.c @@ -73,6 +73,19 @@ store_inferior_registers (regno) #else +/* Map gdb internal register number to ptrace address. */ + +#define REGISTER_PTRACE_ADDR(regno) \ + (regno < 32 ? regno \ + : regno == PC_REGNUM ? 96 \ + : regno == CAUSE_REGNUM ? 97 \ + : regno == HI_REGNUM ? 98 \ + : regno == LO_REGNUM ? 99 \ + : regno == FCRCS_REGNUM ? 100 \ + : regno == FCRIR_REGNUM ? 101 \ + : regno >= FP0_REGNUM ? regno - (FP0_REGNUM-32)\ + : 0) + /* Get all registers from the inferior */ void @@ -87,7 +100,7 @@ fetch_inferior_registers () for (regno = 1; regno < NUM_REGS; regno++) { - regaddr = register_addr (regno, 1); + regaddr = REGISTER_PTRACE_ADDR (regno); for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (int)) { *(int *) &buf[i] = ptrace (3, inferior_pid, regaddr, 0); @@ -113,7 +126,7 @@ store_inferior_registers (regno) if (regno > 0) { - regaddr = register_addr (regno, 1); + regaddr = REGISTER_PTRACE_ADDR (regno); errno = 0; ptrace (6, inferior_pid, regaddr, read_register (regno)); if (errno != 0) @@ -124,10 +137,11 @@ store_inferior_registers (regno) } else { - for (regno = 1; regno < NUM_REGS; regno++) + for (regno = 0; regno < NUM_REGS; regno++) { - if (regno == 32 || regno == 35 || regno == 36 - || regno == 71 || regno == FP_REGNUM) + if (regno == ZERO_REGNUM || regno == PS_REGNUM + || regno == BADVADDR_REGNUM || regno == CAUSE_REGNUM + || regno == FCRIR_REGNUM || regno == FP_REGNUM) continue; regaddr = register_addr (regno, 1); errno = 0; |