aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog28
-rw-r--r--gdb/mdebugread.c5
-rw-r--r--gdb/procfs.c36
3 files changed, 62 insertions, 7 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 07974d7..9b12e85 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,31 @@
+Sat Oct 26 07:15:14 1996 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * config/alpha/alpha-osf3.mh (XM_CLIBS): Add -lm for OSF/1-4.0.
+
+ * procfs.c (proc_set_exec_trap): Under Alpha OSF/1-4.0, tracing
+ the entry to the exit system call to detect termination of the
+ inferior stopped working. Trace termination of the inferior via
+ PRFS_STOPTERM instead.
+ (procfs_init_inferior): Do not trace entry to exit system call
+ if PIOCSSPCACT is defined.
+ (procfs_wait): Handle PR_DEAD event, which signals the termination
+ of the inferior if PRFS_STOPTERM is set.
+
+ * mdebugread.c (parse_partial_symbols): Ignore stNil section
+ start address symbols.
+
+ * sparc-tdep.c (get_saved_register): Get saved PC from the
+ frame info if not in innermost frame.
+
+Thu Oct 24 10:51:45 1996 Mark Alexander <marka@cygnus.com>
+
+ * dbxread.c (process_one_symbol): Interpret end-of-function
+ markers correctly; this fixes problem on Vr5000 where all
+ functions in a module had the same address.
+ * configure.in, configure.tgt, configure.host, gdbserver/configure.in:
+ Correct for pc-linux-gnu problem in config.guess.
+ * configure: Regenerate.
+
Thu Oct 24 10:06:58 1996 Stu Grossman (grossman@critters.cygnus.com)
* dbxread.c: Don't swap symbols in place, since internal and
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index 3f67503..c86fb6d 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -2448,9 +2448,12 @@ parse_partial_symbols (objfile, section_offsets)
}
break;
case stLocal:
+ case stNil:
/* The alpha has the section start addresses in stLocal symbols
whose name starts with a `.'. Skip those but complain for all
- other stLocal symbols. */
+ other stLocal symbols.
+ Irix6 puts the section start addresses in stNil symbols, skip
+ those too. */
if (name[0] == '.')
continue;
/* Fall through. */
diff --git a/gdb/procfs.c b/gdb/procfs.c
index 8a2eda4..f5e93fc 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -1818,10 +1818,10 @@ procfs_init_inferior (pid)
pip = create_procinfo (pid);
+#ifndef PIOCSSPCACT
procfs_set_syscall_trap (pip, SYS_exit, PROCFS_SYSCALL_ENTRY,
procfs_exit_handler);
-#ifndef PRFS_STOPEXEC
#ifdef SYS_exec
procfs_set_syscall_trap (pip, SYS_exec, PROCFS_SYSCALL_EXIT,
procfs_exec_handler);
@@ -1834,7 +1834,7 @@ procfs_init_inferior (pid)
procfs_set_syscall_trap (pip, SYS_execve, PROCFS_SYSCALL_EXIT,
procfs_exec_handler);
#endif
-#endif /* PRFS_STOPEXEC */
+#endif /* PIOCSSPCACT */
/* Setup traps on exit from sproc() */
@@ -1982,7 +1982,10 @@ proc_set_exec_trap ()
#ifdef PIOCSSPCACT
/* Under Alpha OSF/1 we have to use a PIOCSSPCACT ioctl to trace
- exits from exec system calls because of the user level loader. */
+ exits from exec system calls because of the user level loader.
+ Starting with OSF/1-4.0, tracing the entry to the exit system
+ call no longer works. So we have to use PRFS_STOPTERM to trace
+ termination of the inferior. */
{
int prfs_flags;
@@ -1992,7 +1995,7 @@ proc_set_exec_trap ()
gdb_flush (gdb_stderr);
_exit (127);
}
- prfs_flags |= PRFS_STOPEXEC;
+ prfs_flags |= PRFS_STOPEXEC | PRFS_STOPTERM;
if (ioctl (fd, PIOCSSPCACT, &prfs_flags) < 0)
{
perror (procname);
@@ -2000,7 +2003,7 @@ proc_set_exec_trap ()
_exit (127);
}
}
-#else
+#else /* PIOCSSPCACT */
/* GW: Rationale...
Not all systems with /proc have all the exec* syscalls with the same
names. On the SGI, for example, there is no SYS_exec, but there
@@ -2022,7 +2025,6 @@ proc_set_exec_trap ()
gdb_flush (gdb_stderr);
_exit (127);
}
-#endif
praddset (&entryset, SYS_exit);
@@ -2032,6 +2034,7 @@ proc_set_exec_trap ()
gdb_flush (gdb_stderr);
_exit (126);
}
+#endif /* PIOCSSPCACT */
/* Turn off inherit-on-fork flag so that all grand-children of gdb
start with tracing flags cleared. */
@@ -2644,6 +2647,27 @@ procfs_wait (pid, ourstatus)
error ("PR_SYSEXIT, unhandled system call %d", what);
}
break;
+#ifdef PR_DEAD
+ case (short)PR_DEAD:
+ {
+ int dummy;
+
+ /* The inferior process is about to terminate.
+ pr_what has the process's exit or return value.
+ A PIOCRUN ioctl must be used to restart the process so it
+ can finish exiting. */
+
+ pi->prrun.pr_flags = PRCFAULT;
+
+ if (ioctl (pi->fd, PIOCRUN, &pi->prrun) != 0)
+ perror_with_name (pi->pathname);
+
+ if (wait (&dummy) < 0)
+ rtnval = -1;
+ statval = pi->prstatus.pr_what;
+ }
+ break;
+#endif
case PR_REQUESTED:
statval = (SIGSTOP << 8) | 0177;
break;