summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2012-12-11 15:23:15 +0000
committerPedro Alves <palves@redhat.com>2012-12-11 15:23:15 +0000
commit3e3420f6a11ef07df4bd3d2be38481870f2834cf (patch)
treecae91bdfc24fb971fdcf42de25b79d7995f6480e
parent05b4bd799a73514fc9156f87ce4b353f7458cf11 (diff)
2012-12-11 Pedro Alves <pedro@codesourcery.com>
Pedro Alves <palves@redhat.com> * 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.
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/procfs.c7
-rw-r--r--gdb/sol2-tdep.c26
3 files changed, 39 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0d90883d8c..fb92aab7b1 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2012-12-11 Pedro Alves <pedro@codesourcery.com>
+ Pedro Alves <palves@redhat.com>
+
+ * 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 <palves@redhat.com>
* configure.ac (detect type of /proc): Remove Unixware handling.
diff --git a/gdb/procfs.c b/gdb/procfs.c
index fa18b46460..1c5cc13b80 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 e93758d93e..e292b8d35a 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, "<core>");
+ return buf;
+ }
+
+ /* Not fake; print as usual. */
+ return normal_pid_to_str (ptid);
}