X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=gdb%2Fsol2-tdep.c;h=e292b8d35a99b1d8395442db2cfd7eb997a647a5;hb=3e3420f6a11ef07df4bd3d2be38481870f2834cf;hp=e93758d93e431940ea201331bb85e8e5e4492c49;hpb=05b4bd799a73514fc9156f87ce4b353f7458cf11;p=deliverable%2Fbinutils-gdb.git 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, ""); + return buf; + } + + /* Not fake; print as usual. */ + return normal_pid_to_str (ptid); }