Re: Automatically fetching Build ID from remote libraries and resole them locally?

Norbert Lange via Gdb <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CADYdroM7B-SSLKRYXJkTcQLbqmwDPkemAs0JPugi2LuYhfV-Sw@mail.gmail.com>
Am Mo., 30. März 2020 um 10:45 Uhr schrieb Jan Kratochvil
<[email protected]>:
>
> On Mon, 30 Mar 2020 10:35:30 +0200, Norbert Lange via Gdb wrote:
> > Currently its not possible to detect the Build ID without transferring the
> > whole library from Remote target to the local gdb. I suppose with coredumps
> > its a similar problem. What I would like is using build IDs wherever
> > possible. That means retrieve them from the remote, and maybe define some
> > fileformat to augment coredumps with the information.
>
> Coredumps already contain build-ids of executables + shared libraries as long
> as it is enabled (it is by default):
>         https://www.kernel.org/doc/Documentation/filesystems/proc.txt
>   - (bit 4) ELF header pages in file-backed private memory areas (it is
>             effective only if the bit 2 is cleared)
>
> build-id loading from remote files should be also somehow supported by recent
> GDBs (done by Gary Benson).

Thats great then.

>
> Fedora+RHEL GDB has patchset
>         https://src.fedoraproject.org/rpms/gdb/blob/master/f/gdb-6.6-buildid-locate.patch
>         https://src.fedoraproject.org/rpms/gdb/blob/master/f/gdb-6.6-buildid-locate-solib-missing-ids.patch
>         https://src.fedoraproject.org/rpms/gdb/blob/master/f/gdb-6.6-buildid-locate-core-as-arg.patch
> to locate appropriate executable + shared libraries from such core file by
> build-id - it locates then through symlinks in:
>         /usr/lib/debug/.build-id/6b/6cd649300ec28b47638e766e9cbb58648cbdac{,.debug}
>
> IIUC that patchset should be now being replaced by the elfutils debuginfod.

Still thinking you are misunderstanding me, debuginfod aint helping here.

I am running gdbserver on 'remote' and gdb on 'localpc',
then attaching to the remote target.

I have a version of the libraries on 'localpc' (almost mirrored for
compiling), but they might
not be the exact ones used on the 'remote' (rebuilds, additional libs, etc..)
I would want to use 'set sysroot /path/to/staging/dir', but the downside is that
mismatches will not be detected and can badly mess up debugging.
GDB 9.0 certainly does not use *Build-Ids from the 'remote'*,
neither for files existing on the 'localpc' or not (used strace to
monitor the file lookups).

I could only set 'set sysroot target:/',
at which point all DSOs will be transmitted from 'remote' to
'localpc'. Not exactly what I had in mind.

So, instead I would want GDB to just inspect the Build-ID's from 'remote',
and look them up from 'localpc' (whether its using debuginfod or not,
this is irrelevant here).

Norbert
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.