/* Target-dependent code for Solaris.
- Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2006-2014 Free Software Foundation, Inc.
This file is part of GDB.
msym = lookup_minimal_symbol("elf_bndr", NULL, NULL);
if (msym && SYMBOL_VALUE_ADDRESS (msym) == pc)
- return frame_pc_unwind (get_current_frame ());
+ return frame_unwind_caller_pc (get_current_frame ());
return 0;
}
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);
}