Re: How does GDB load source line information during dlopen calls

shravan <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAEmVGBqEwT9gboJONrax-jn3yhuHXL+3jOzGbUg2sdmVQEH4HQ@mail.gmail.com>
Thanks for the response! I did try add-symbol-file and have definitely
enabled "-g" flags on the target library, but source line info is still
missing (debug directories are set correctly too). Your prototype is
interesting - it definitely suggests that add-symbol-file should be enough.
I will retry this, and see if I can get a small example which I can easily
share here.

Fwiw, to help rule out some possibilities, I am able to get this working on
lldb using create-module and then mapping the section by address

On Jan 8, 2018 8:04 AM, "Simon Marchi" <[email protected]> wrote:

On 2018-01-05 01:48 AM, shravan wrote:
> Hi all,
> First time poster to this list - so please bear with me :)
> I am currently working on a project that has a custom dynamic loader for
> shared libraries in the ELF format - it does NOT use dlopen. When
debugging
> this dynamically loaded library, I am hoping to be able to single step
> through the C source code of functions in the library in tui mode.
>
> If I had use dlopen this would work fine, but this does not work using the
> custom dynamic loader. I am able to get the libraries symbols loaded with
> "add-symbol-file". However the src line information is still not working.
> For example "list someFunctionInLibrary" prints nothing and "layout src"
> shows a blank screen
>
> I am hoping for any information or suggestions. Is there some way to hint
> to gdb to load the source line information from a particular file at a
> particular address?
>
> (Also please let me know if there is a better venue for the question).
>
> Thanks!
> Shravan
>

Hi Shravan,

For all I know, add-symbol-file should make GDB read the DWARF info
of the library, like it does for a automatically loaded libraries.
Are your libraries built with DWARF debug information?

I just tried making a small library with:

int
bob (void)
{
        return 42;
}

I am able to pretend that this library was loaded at an arbitrary offset
and list lines from its source files:

(gdb) add-symbol-file lib/libbob.so  0x1000000
add symbol table from file "lib/libbob.so" at
        .text_addr = 0x1000000
(y or n) y
Reading symbols from lib/libbob.so...done.
(gdb) list bob
1       int
2       bob (void)
3       {
4               return 42;
5       }
(gdb) p &bob
$1 = (int (*)(void)) 0x1000100 <bob>
(gdb) list *0x1000100
0x1000100 is in bob (bob.c:3).
1       int
2       bob (void)
3       {
4               return 42;
5       }
(gdb) b bob.c:4
Breakpoint 2 at 0x1000104: file bob.c, line 4.


So I think add-symbol-file should work for you, there is probably a missing
link somewhere.  I don't think I can't help you without more information,
or an actual program to debug.

Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.