/* Target-dependent code for Solaris.
- Copyright (C) 2006-2012 Free Software Foundation, Inc.
+ Copyright (C) 2006-2019 Free Software Foundation, Inc.
This file is part of GDB.
#include "frame.h"
#include "symtab.h"
#include "inferior.h"
+#include "objfiles.h"
#include "sol2-tdep.h"
CORE_ADDR
sol2_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
{
- struct minimal_symbol *msym;
+ struct bound_minimal_symbol msym;
msym = lookup_minimal_symbol("elf_bndr", NULL, NULL);
- if (msym && SYMBOL_VALUE_ADDRESS (msym) == pc)
+ if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
return frame_unwind_caller_pc (get_current_frame ());
return 0;
/* This is how we want PTIDs from Solaris core files to be
printed. */
-char *
+std::string
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.lwp ();
+ if (pid != 0)
+ {
+ /* A thread. */
+ return string_printf ("LWP %ld", ptid.lwp ());
+ }
+
+ /* 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_ptid (ptid);
+ if (inf == NULL || inf->fake_pid_p)
+ return "<core>";
+
+ /* Not fake; print as usual. */
+ return normal_pid_to_str (ptid);
}