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