aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/procfs.c12
2 files changed, 16 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5cf89e9..3b9aaae 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+Thu Jun 25 15:18:42 1992 Stu Grossman (grossman at cygnus.com)
+
+ * procfs.c (child_resume): Work around Solaris (on Sparc) lossage
+ where there is no place for nPC in prrun struct.
+
Thu Jun 25 12:06:00 1992 Fred Fish (fnf@cygnus.com)
* mipsread.c: Pass NULL name pointer to init_type, not 0.
diff --git a/gdb/procfs.c b/gdb/procfs.c
index 251ddb4..b205c66 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -2039,8 +2039,18 @@ child_resume (step, signo)
int signo;
{
errno = 0;
- pi.prrun.pr_flags = PRSVADDR | PRSTRACE | PRSFAULT | PRCFAULT;
+ pi.prrun.pr_flags = PRSTRACE | PRSFAULT | PRCFAULT;
+
+#if !defined(sun) && !defined(sparc)
+/* Can't do this under Solaris running on a Sparc, as there seems to be no
+ place to put nPC. In fact, if you use this, nPC seems to be set to some
+ random garbage. We have to rely on the fact that PC and nPC have been
+ written previously via PIOCSREG during a register flush. */
+
pi.prrun.pr_vaddr = (caddr_t) *(int *) &registers[REGISTER_BYTE (PC_REGNUM)];
+ pi.prrun.pr_flags != PRSVADDR;
+#endif
+
if (signo && !(signo == SIGSTOP && pi.nopass_next_sigstop))
{
set_proc_siginfo (&pi, signo);