how to make gdb happy with my linkmap

Mathieu Lacage
2008-12-18T21:42:00Z

hi,

I am currently trying to write a small ELF loader and make gdb be
happy with it. One of the things I have been doing until now is manage
the following link map:

(gdb) info linkmap
084661e0 ldso
08430518
084661e0 /lib/libc.so.6
(gdb)

The most notable thing to note here is that the first item in the
linkmap is not the main binary: it is the loader itself. This,
however, seems to be problematic for gdb since I get the following
message:
warning: Temporarily disabling breakpoints for unloaded shared library "ldso"
when I invoke the _r_debug_state function where gdb has put a
breakpoint (I should point out that, of course, I did not remove _any_
entry from the link map at this point)

Although it seems clear to me that I won't be able to keep managing my
link map as I do now and that I will have to move the main binary as
the first entry in the map (I have already done this and it makes gdb
much happier), I was trying to figure out why this so problematic for
gdb, mainly because I fear that there are some other subtle
requirements from gdb on the structure of the link map.

Hence, my question: what are the requirements on the structure of a
linkmap which is compatible with gdb's usage (beyond the mere ABI
offset requirements). I am also curious to know if there is anywhere a
document which describes the overall interface between gdb and the
inferior's loader: so far, reading the code has been enough for me to
figure out how this all works but, well, I wonder if I could have
saved myself all this code-reading work.

Anyhow, that piece of code is fairly readable and really nicely
structured so, thanks a lot for this cool software I have been using
for so long.