public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Fix disabling of solib probes when LD_AUDITing
@ 2019-12-21 21:03 Simon Marchi
0 siblings, 0 replies; only message in thread
From: Simon Marchi @ 2019-12-21 21:03 UTC (permalink / raw)
To: gdb-cvs
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=cb7364414157c42de5ea618d98e2be9eff1894ba
commit cb7364414157c42de5ea618d98e2be9eff1894ba
Author: George Barrett <bob@bob131.so>
Date: Sun Dec 15 11:12:09 2019 +1100
Fix disabling of solib probes when LD_AUDITing
The SVR4 solib event handler determines whether an event is related to a
non-base link namespace by comparing the event's debug struct address
to the debug struct address of the initial program image. However, this
can fail when using LD_AUDIT as audit libraries are loaded before the
loader has initialised the initial program image's debug struct. When
the event handler fails to find the debug struct, the probe-based
debugger interface is disabled and a warning is flagged to the user.
This commit adds a fallback test to help determine whether an event is
for a foreign link namespace when the debug struct isn't available.
gdb/ChangeLog:
2019-12-15 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.
Diff:
---
gdb/ChangeLog | 5 +++++
gdb/solib-svr4.c | 22 +++++++++++++++++++++-
2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0ba175a..acf9106 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 de76557..f0c7769 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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2019-12-21 21:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-21 21:03 [binutils-gdb] Fix disabling of solib probes when LD_AUDITing Simon Marchi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).