|
|
Message-ID: <53557463.2050202@midipix.org>
Date: Mon, 21 Apr 2014 15:41:23 -0400
From: "writeonce@...ipix.org" <writeonce@...ipix.org>
To: musl@...ts.openwall.com
Subject: _start(ldso) & _start(crt)
Greetings,
When running a dynamically linked program, the general control flow is
_start(ldso/{arch}/start.s) --> __dynlink --> _start(crt) -->
__libc_start_main --> main()
When asking gdb to set up a breakpoint at _start (b _start), gdb's
confirmation message shows the address of _start(crt), but it then
breaks at _start(ldso), which is actually what I want. It then later
also breaks at _start(crt).
If gdb decided to only break at the executable's _start, then I believe
there would be no way to request a break at the interpreter's (ldso)
_start routine, since the address of ldso's _start is not known prior to
execution.
I am not sure whether this is a good-enough motivation to rename ldso's
start to _ldso_start (and set libc.so's entry point accordingly), or
whether we could simply count on gdb and other debuggers to continue to
do the "right thing" by breaking at the earlier _start of the two. For
one thing, setting a breakpoint at __dynlink provides pretty much the
same debugging ability as with _start(ldso), and does not require any
changes. Any thoughts?
Kind regards,
zg
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.