X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fsol2-tdep.c;h=03b510c9adedbbbad25a6ba95d3190cefaff04ba;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=788a55e06a5875d918933b5f52c569bd1f10b246;hpb=01f0fe5e0450edf168c1f612feb93cf588e4e7ea;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/sol2-tdep.c b/gdb/sol2-tdep.c index 788a55e06a..03b510c9ad 100644 --- a/gdb/sol2-tdep.c +++ b/gdb/sol2-tdep.c @@ -1,12 +1,12 @@ /* Target-dependent code for Solaris. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -15,24 +15,53 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ #include "defs.h" #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) - return frame_pc_unwind (get_current_frame ()); + 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. */ + +std::string +sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) +{ + struct inferior *inf; + int pid; + + /* 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 (current_inferior ()->process_target (), ptid); + if (inf == NULL || inf->fake_pid_p) + return ""; + + /* Not fake; print as usual. */ + return normal_pid_to_str (ptid); +}