aboutsummaryrefslogtreecommitdiff
path: root/gdb/mips-xdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/mips-xdep.c')
-rw-r--r--gdb/mips-xdep.c24
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;