Re: [PATCH] solib-svr4: Avoid unwanted shlib internal BPs When debugging Linux kernel or u-boot

Pedro Alves
2012-06-01T16:21:52Z

On 06/01/2012 04:01 PM, Joakim Tjernlund wrote:

>
> gdb mistakenly inserts a special shared library BP even though
> there area no such libs in either linux or u-boot.
> Fix by testing for ld.so presence.

Thanks. I've ran it through the testsuite just in case; no regressions.

Anyone know of any reason we shouldn't put this in? I don't know the
history of these particular fallbacks, and don't know which hosts or
conditions might need them. I've found this as further back as
around gdb-4.9 (1993), where we had:

/* On SVR4 systems, for the initial implementation, use some runtime startup
symbol as the "startup mapping complete" breakpoint address. The models
for SunOS and SVR4 dynamic linking debugger support are different in that
SunOS hits one breakpoint when all mapping is complete while using the SVR4
debugger support takes two breakpoint hits for each file mapped, and
there is no way to know when the "last" one is hit. Both these
mechanisms should be tied to a "breakpoint service routine" that
gets automatically executed whenever one of the breakpoints indicating
a change in mapping is hit. This is a future enhancement. (FIXME) */

#define BKPT_AT_SYMBOL 1

#if defined (BKPT_AT_SYMBOL) && defined (SVR4_SHARED_LIBS)
static char *bkpt_names[] = {
#ifdef SOLIB_BKPT_NAME
SOLIB_BKPT_NAME, /* Prefer configured name if it exists. */
#endif
"_start",
"main",
NULL
};
#endif

and at that point solib.c was a mess used by both SVR4 and a.out SunOS.

(Incidentally, the present solib-sunos.c is only really used on a.out BSD
targets, not by Solaris.)

I've written a ChangeLog entry for you. Please see the gdb/CONTRIBUTE
for the next time. Thanks.

2012-06-01 Joakim Tjernlund <Joakim.Tjernlund@transmode.se>

* solib-svr4.c (enable_break): Don't fallback to setting the solib
event breakpoint at _start, __start or main if a program
interpreter is not found.
---

diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index bd0141a..307e483 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -1707,7 +1707,7 @@ enable_break (struct svr4_info *info, int from_tty)
}
}

- if (!current_inferior ()->attach_flag)
+ if (interp_name != NULL && !current_inferior ()->attach_flag)
{
for (bkpt_namep = bkpt_names; *bkpt_namep != NULL; bkpt_namep++)
{