diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-10-02 21:07:50 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-10-02 21:07:50 +0000 |
commit | 422a19551faacf2eb64a3d43dcec131468d9006d (patch) | |
tree | eece5dbe8ae83485d883998c9c80becc38b0f2e8 /gdb/m88k-nat.c | |
parent | e05fe481fa762c2be12cdaa060f43550079ce9e4 (diff) | |
download | binutils-gdb-422a19551faacf2eb64a3d43dcec131468d9006d.tar.gz |
* m88k-nat.c (store_inferior_registers): When writing all registers,
don't try to write EXIP_REGNUM or ENIP_REGNUM (not needed for this
case, and they cause trouble).
Diffstat (limited to 'gdb/m88k-nat.c')
-rw-r--r-- | gdb/m88k-nat.c | 96 |
1 files changed, 49 insertions, 47 deletions
diff --git a/gdb/m88k-nat.c b/gdb/m88k-nat.c index d474aa2a301..18781d63c26 100644 --- a/gdb/m88k-nat.c +++ b/gdb/m88k-nat.c @@ -114,60 +114,62 @@ store_inferior_registers (regno) struct USER u; - unsigned int offset = (char *) &u.pt_r0 - (char *) &u; regaddr = offset; + /* Don't try to deal with EXIP_REGNUM or ENIP_REGNUM, because I think either + svr3 doesn't run on an 88110, or the kernel isolates the different (not + completely sure this is true, but seems to be. */ if (regno >= 0) { -/* regaddr = register_addr (regno, offset); */ - if (regno < PC_REGNUM) - { - regaddr = offset + regno * sizeof (int); - errno = 0; - ptrace (6, inferior_pid, - (PTRACE_ARG3_TYPE) regaddr, read_register (regno)); - if (errno != 0) - { - sprintf (buf, "writing register number %d", regno); - perror_with_name (buf); - } - } - else if (regno == SXIP_REGNUM) - ptrace (6, inferior_pid, - (PTRACE_ARG3_TYPE) SXIP_OFFSET, read_register(regno)); - else if (regno == SNIP_REGNUM) - ptrace (6, inferior_pid, - (PTRACE_ARG3_TYPE) SNIP_OFFSET, read_register(regno)); - else if (regno == SFIP_REGNUM) - ptrace (6, inferior_pid, - (PTRACE_ARG3_TYPE) SFIP_OFFSET, read_register(regno)); - else printf ("Bad register number for store_inferior routine\n"); - } - else { - for (regno = 0; regno < NUM_REGS - 3; regno++) - { /* regaddr = register_addr (regno, offset); */ - errno = 0; - regaddr = offset + regno * sizeof (int); - ptrace (6, inferior_pid, - (PTRACE_ARG3_TYPE) regaddr, read_register (regno)); - if (errno != 0) - { - sprintf (buf, "writing register number %d", regno); - perror_with_name (buf); - } - } - ptrace (6,inferior_pid, - (PTRACE_ARG3_TYPE) SXIP_OFFSET,read_register(SXIP_REGNUM)); - ptrace (6,inferior_pid, - (PTRACE_ARG3_TYPE) SNIP_OFFSET,read_register(SNIP_REGNUM)); - ptrace (6,inferior_pid, - (PTRACE_ARG3_TYPE) SFIP_OFFSET,read_register(SFIP_REGNUM)); - } - - + if (regno < PC_REGNUM) + { + regaddr = offset + regno * sizeof (int); + errno = 0; + ptrace (6, inferior_pid, + (PTRACE_ARG3_TYPE) regaddr, read_register (regno)); + if (errno != 0) + { + sprintf (buf, "writing register number %d", regno); + perror_with_name (buf); + } + } + else if (regno == SXIP_REGNUM) + ptrace (6, inferior_pid, + (PTRACE_ARG3_TYPE) SXIP_OFFSET, read_register(regno)); + else if (regno == SNIP_REGNUM) + ptrace (6, inferior_pid, + (PTRACE_ARG3_TYPE) SNIP_OFFSET, read_register(regno)); + else if (regno == SFIP_REGNUM) + ptrace (6, inferior_pid, + (PTRACE_ARG3_TYPE) SFIP_OFFSET, read_register(regno)); + else + printf ("Bad register number for store_inferior routine\n"); + } + else + { + for (regno = 0; regno < PC_REGNUM; regno++) + { + /* regaddr = register_addr (regno, offset); */ + errno = 0; + regaddr = offset + regno * sizeof (int); + ptrace (6, inferior_pid, + (PTRACE_ARG3_TYPE) regaddr, read_register (regno)); + if (errno != 0) + { + sprintf (buf, "writing register number %d", regno); + perror_with_name (buf); + } + } + ptrace (6,inferior_pid, + (PTRACE_ARG3_TYPE) SXIP_OFFSET,read_register(SXIP_REGNUM)); + ptrace (6,inferior_pid, + (PTRACE_ARG3_TYPE) SNIP_OFFSET,read_register(SNIP_REGNUM)); + ptrace (6,inferior_pid, + (PTRACE_ARG3_TYPE) SFIP_OFFSET,read_register(SFIP_REGNUM)); + } } |