Re: Debugging ld.so in gdb

Florian Weimer via Gdb <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
* Jacob Kroon:

>> What I find really confusing is that this is not the result of a dlopen
>> call.  I definitely would expect that the maps array contains *all*
>> objects that are being loaded.  Clearly this is not the case here.
>> Somehow certain objects are missing, and then they get written into the
>> rpo array.
>> 
>> Please try to find libjvm.so among the l_initfini arrays of the objects.
>
> I do find libjvm.so in a couple of the maps[]->l_initfini[]->l_name
> arrays, yes.

Okay, and of course there is an assumption that those make it to the
maps.  No wonder we run off the array.

>> It must be present somewhere.  I assume it's also on the main list,
>> which starts off at _rtld_global._dl_ns[0]._ns_loaded.
>
> Hmm how do I iterate over that data structure ?
>
> See below:
>> (gdb) print _rtld_global._dl_ns[0]._ns_loaded[0]->l_name
>> $186 = 0x7ffff7ff1d97 ""
>> (gdb) print _rtld_global._dl_ns[0]._ns_loaded[1]->l_name
>> $187 = 0x0
>> (gdb) print _rtld_global._dl_ns[0]._ns_loaded[2]->l_name
>> $188 = 0x0
>> (gdb) print _rtld_global._dl_ns[0]._ns_loaded->l_name
>> $189 = 0x7ffff7ff1d97 ""
>> (gdb) print _rtld_global._dl_ns[1]._ns_loaded->l_name
>> Cannot access memory at address 0x8
>> (gdb) print _rtld_global._dl_ns[2]._ns_loaded->l_name
>> Cannot access memory at address 0x8

It's a list chained by l_prev/l_next.

Thanks,
Florian
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.