diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0ba175a431..acf9106e84 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2019-12-21 George Barrett + + * 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 * top.c (print_gdb_configuration): Print "--with-xxhash" or diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index de765576d0..f0c7769ac2 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