diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0ba175a43153d7559b0ce6748f745fd5b68c9725..acf9106e844b0f49487d28d9b18ac8325548f5a2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2019-12-21 George Barrett <bob@bob131.so> + + * solib-svr4.c (svr4_handle_solib_event): Add fallback link + namespace test for when the debug struct isn't available. + 2019-12-21 Eli Zaretskii <eliz@gnu.org> * top.c (print_gdb_configuration): Print "--with-xxhash" or diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index de765576d0b7fda28028b4899a79ccffb16f4fae..f0c7769ac2c95259e9eb87990eb4dbc78da8a970 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -1942,7 +1942,27 @@ svr4_handle_solib_event (void) /* Always locate the debug struct, in case it moved. */ info->debug_base = 0; if (locate_base (info) == 0) - return; + { + /* It's possible for the reloc_complete probe to be triggered before + the linker has set the DT_DEBUG pointer (for example, when the + linker has finished relocating an LD_AUDIT library or its + dependencies). Since we can't yet handle libraries from other link + namespaces, we don't lose anything by ignoring them here. */ + struct value *link_map_id_val; + try + { + link_map_id_val = pa->prob->evaluate_argument (0, frame); + } + catch (const gdb_exception_error) + { + link_map_id_val = NULL; + } + /* glibc and illumos' libc both define LM_ID_BASE as zero. */ + if (link_map_id_val != NULL && value_as_long (link_map_id_val) != 0) + action = DO_NOTHING; + else + return; + } /* GDB does not currently support libraries loaded via dlmopen into namespaces other than the initial one. We must ignore