From 3e3420f6a11ef07df4bd3d2be38481870f2834cf Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 11 Dec 2012 15:23:15 +0000 Subject: [PATCH] 2012-12-11 Pedro Alves Pedro Alves * procfs.c (procfs_make_note_section) [NEW_PROC_API]: Output a NT_PSTATUS note. * sol2-tdep.c (sol2_core_pid_to_str): Print process IDs differently from LWP IDs. --- gdb/ChangeLog | 8 ++++++++ gdb/procfs.c | 7 +++++++ gdb/sol2-tdep.c | 26 ++++++++++++++++++++++++-- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0d90883..fb92aab 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2012-12-11 Pedro Alves + Pedro Alves + + * procfs.c (procfs_make_note_section) [NEW_PROC_API]: Output a + NT_PSTATUS note. + * sol2-tdep.c (sol2_core_pid_to_str): Print process IDs + differently from LWP IDs. + 2012-12-11 Pedro Alves * configure.ac (detect type of /proc): Remove Unixware handling. diff --git a/gdb/procfs.c b/gdb/procfs.c index fa18b46..1c5cc13 100644 --- a/gdb/procfs.c +++ b/gdb/procfs.c @@ -5507,6 +5507,13 @@ procfs_make_note_section (bfd *obfd, int *note_size) stop_signal = find_stop_signal (); +#ifdef NEW_PROC_API + fill_gregset (get_current_regcache (), &gregs, -1); + note_data = elfcore_write_pstatus (obfd, note_data, note_size, + PIDGET (inferior_ptid), + stop_signal, &gregs); +#endif + thread_args.obfd = obfd; thread_args.note_data = note_data; thread_args.note_size = note_size; diff --git a/gdb/sol2-tdep.c b/gdb/sol2-tdep.c index e93758d..e292b8d 100644 --- a/gdb/sol2-tdep.c +++ b/gdb/sol2-tdep.c @@ -43,7 +43,29 @@ char * sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) { static char buf[80]; + struct inferior *inf; + int pid; - xsnprintf (buf, sizeof buf, "LWP %ld", ptid_get_lwp (ptid)); - return buf; + /* Check whether we're printing an LWP (gdb thread) or a + process. */ + pid = ptid_get_lwp (ptid); + if (pid != 0) + { + /* A thread. */ + xsnprintf (buf, sizeof buf, "LWP %ld", ptid_get_lwp (ptid)); + return buf; + } + + /* GDB didn't use to put a NT_PSTATUS note in Solaris cores. If + that's missing, then we're dealing with a fake PID corelow.c made + up. */ + inf = find_inferior_pid (ptid_get_pid (ptid)); + if (inf == NULL || inf->fake_pid_p) + { + xsnprintf (buf, sizeof buf, ""); + return buf; + } + + /* Not fake; print as usual. */ + return normal_pid_to_str (ptid); } -- 2.7.4