Define NetBSD specific skip_solib_resolver
authorKamil Rytarowski <n54@gmx.com>
Mon, 6 Apr 2020 18:08:46 +0000 (20:08 +0200)
committerKamil Rytarowski <n54@gmx.com>
Tue, 7 Apr 2020 17:12:03 +0000 (19:12 +0200)
gdb/ChangeLog:

* nbsd-tdep.c: Include "objfiles.h".
(nbsd_skip_solib_resolver): New.
(nbsd_init_abi): Call set_gdbarch_skip_solib_resolver().

gdb/ChangeLog
gdb/nbsd-tdep.c

index 019b4d3e1d77eecd9c6a5aafb1b5f60f9ebc06bc..255262a2f27cf442044f2c4d74a082828a8c1996 100644 (file)
@@ -1,3 +1,9 @@
+2020-04-07  Kamil Rytarowski  <n54@gmx.com>
+
+       * nbsd-tdep.c: Include "objfiles.h".
+       (nbsd_skip_solib_resolver): New.
+       (nbsd_init_abi): Call set_gdbarch_skip_solib_resolver().
+
 2020-04-07  Nitika Achra  <Nitika.Achra@amd.com>
 
        * dwarf2/loc.c (loclist_describe_location): Call the function decode_debug_loclists_
index 6680d3c6fdee127c24f1e14e71d4a1ceef0ac8fa..1d7230feef84dd2bfc21f448579bc94d31a907e8 100644 (file)
@@ -23,6 +23,7 @@
 #include "solib-svr4.h"
 #include "nbsd-tdep.h"
 #include "gdbarch.h"
+#include "objfiles.h"
 
 /* FIXME: kettenis/20060115: We should really eliminate the next two
    functions completely.  */
@@ -339,6 +340,20 @@ nbsd_gdb_signal_to_target (struct gdbarch *gdbarch,
   return -1;
 }
 
+/* Shared library resolver handling.  */
+
+static CORE_ADDR
+nbsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  struct bound_minimal_symbol msym;
+
+  msym = lookup_minimal_symbol ("_rtld_bind_start", NULL, NULL);
+  if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
+    return frame_unwind_caller_pc (get_current_frame ());
+  else
+    return find_solib_trampoline_target (get_current_frame (), pc);
+}
+
 /* See nbsd-tdep.h.  */
 
 void
@@ -346,4 +361,5 @@ nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   set_gdbarch_gdb_signal_from_target (gdbarch, nbsd_gdb_signal_from_target);
   set_gdbarch_gdb_signal_to_target (gdbarch, nbsd_gdb_signal_to_target);
+  set_gdbarch_skip_solib_resolver (gdbarch, nbsd_skip_solib_resolver);
 }