Index: gdb/sol2-tdep.c |
diff --git a/gdb/sol2-tdep.c b/gdb/sol2-tdep.c |
index e93758d93e431940ea201331bb85e8e5e4492c49..b9dcd267abd469ae567eefcd6080217f3be8bf25 100644 |
--- a/gdb/sol2-tdep.c |
+++ b/gdb/sol2-tdep.c |
@@ -1,6 +1,6 @@ |
/* Target-dependent code for Solaris. |
- Copyright (C) 2006-2012 Free Software Foundation, Inc. |
+ Copyright (C) 2006-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -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); |
} |