diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-07-21 19:57:36 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-07-21 19:57:36 +0000 |
commit | 72943ad06ac8b3c42ee74ec561f49c53adf74723 (patch) | |
tree | 509008a3e26584a4a9219eb8180436be1dcb0f07 /gdb/hppah-nat.c | |
parent | 2c5c299f93769794343d9dc535a3d73a2c3cdb58 (diff) | |
download | gdb-72943ad06ac8b3c42ee74ec561f49c53adf74723.zip gdb-72943ad06ac8b3c42ee74ec561f49c53adf74723.tar.gz gdb-72943ad06ac8b3c42ee74ec561f49c53adf74723.tar.bz2 |
* hppa{b,h}-nat.c: Warning, not error, if can't access registers.
Diffstat (limited to 'gdb/hppah-nat.c')
-rw-r--r-- | gdb/hppah-nat.c | 50 |
1 files changed, 20 insertions, 30 deletions
diff --git a/gdb/hppah-nat.c b/gdb/hppah-nat.c index ce9fde9..aadaf9d 100644 --- a/gdb/hppah-nat.c +++ b/gdb/hppah-nat.c @@ -121,6 +121,8 @@ store_inferior_registers (regno) scratch, 0); if (errno != 0) { + /* Error, even if attached. Failing to write these two + registers is pretty serious. */ sprintf (buf, "writing register number %d", regno); perror_with_name (buf); } @@ -133,8 +135,14 @@ store_inferior_registers (regno) *(int *) ®isters[REGISTER_BYTE (regno) + i], 0); if (errno != 0) { - sprintf (buf, "writing register number %d(%d)", regno, i); - perror_with_name (buf); + /* Warning, not error, in case we are attached; sometimes the + kernel doesn't let us at the registers. */ + char *err = safe_strerror (errno); + char *msg = alloca (strlen (err) + 128); + sprintf (msg, "writing register %s: %s", + reg_names[regno], err); + warning (msg); + goto error_exit; } regaddr += sizeof(int); } @@ -145,34 +153,10 @@ store_inferior_registers (regno) { if (CANNOT_STORE_REGISTER (regno)) continue; - regaddr = register_addr (regno, offset); - errno = 0; - if (regno == PCOQ_HEAD_REGNUM || regno == PCOQ_TAIL_REGNUM) - { - scratch = *(int *) ®isters[REGISTER_BYTE (regno)] | 0x3; - ptrace (PT_WUREGS, inferior_pid, (PTRACE_ARG3_TYPE) regaddr, - scratch, 0); - if (errno != 0) - { - sprintf (buf, "writing register number %d", regno); - perror_with_name (buf); - } - } - else - for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof(int)) - { - errno = 0; - ptrace (PT_WUREGS, inferior_pid, (PTRACE_ARG3_TYPE) regaddr, - *(int *) ®isters[REGISTER_BYTE (regno) + i], 0); - if (errno != 0) - { - sprintf (buf, "writing register number %d(%d)", regno, i); - perror_with_name (buf); - } - regaddr += sizeof(int); - } + store_inferior_registers (regno); } } + error_exit: return; } @@ -201,13 +185,19 @@ fetch_register (regno) regaddr += sizeof (int); if (errno != 0) { - sprintf (mess, "reading register %s (#%d)", reg_names[regno], regno); - perror_with_name (mess); + /* Warning, not error, in case we are attached; sometimes the + kernel doesn't let us at the registers. */ + char *err = safe_strerror (errno); + char *msg = alloca (strlen (err) + 128); + sprintf (msg, "reading register %s: %s", reg_names[regno], err); + warning (msg); + goto error_exit; } } if (regno == PCOQ_HEAD_REGNUM || regno == PCOQ_TAIL_REGNUM) buf[3] &= ~0x3; supply_register (regno, buf); + error_exit:; } /* Resume execution of the inferior process. |