Re: Adding a missing NT_FILES note to a core file so gdb can load solibs for it

Bogdan Harjoc <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAF4+tmoJO=YT8Bq_j465SpgF2oA3fFv8inEr=OhXF=q++hN0Tw@mail.gmail.com>
Thanks, a comment in elf_locate_base() confirms NT_FILES wouldn't work:

/* Look for DT_MIPS_RLD_MAP first.  MIPS executables use this instead
of DT_DEBUG [...] */

Solib loading apparently fails here:

#0 read_memory_typed_address (info->debug_base + lmo->r_map_offset)
the map
#1 solib_svr4_r_map

because read_memory...() reads 0x0 from info->debug_base + lmo->r_map_offset.

What I can't figure out is where the rld map should be in the core file.

Thanks.

On Mon, Jan 25, 2016 at 4:22 PM, Jan Kratochvil
<[email protected]> wrote:
> On Mon, 25 Jan 2016 15:06:05 +0100, Bogdan Harjoc wrote:
>> So I'd like to ask whether this has any chance of working.
>
> No.  GDB does not support NT_FILE reading.  GDB follows DT_DEBUG:
>         readelf -d execbinary|grep -w DEBUG
>
> Besides that it would not be completely correct, depending on the point of
> view.  mmap()ped shared library will be present in NT_FILE but GDB will not
> shows it as it was not dlopen()ed (either by a call or via DT_NEEDED).
>
> When GDB cannot read shared libraries it usually means your executable does
> not exactly match the one that was core dumped.  To make them matching one
> should match build-id from the core file with that of the executable:
>         eu-unstrip -n --core=corefile
>         readelf -n execbinary|grep -A1 NT_GNU_BUILD_ID
> IIRC ld-linux.so also needs to match, I cannot remember why now.
>
>
> Jan
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.