Core file build-id support
authorKeith Seitz <keiths@redhat.com>
Sat, 7 Dec 2019 17:35:03 +0000 (09:35 -0800)
committerKeith Seitz <keiths@redhat.com>
Sat, 7 Dec 2019 20:05:41 +0000 (12:05 -0800)
commitaa2d5a4229eb541406d3b91a384ad6a62caf7760
treecb77da7a06472447d1d9174c9fdc31f30311c305
parent5fa370e437f39bf73a133cc84c4e6329943522bf
Core file build-id support

This patch uses new BFD support for detecting build-ids in core
files.

After this patch, it is possible to run gdb with only the
core file, and gdb will automatically load the executable and
debug info [example from tests]:

$ gdb -nx -q
(gdb) core-file corefile-buildid.core
[New LWP 29471]
Reading symbols from gdb.base/corefile-buildid/debugdir-exec/.build-id/36/fe5722c5a7ca3ac746a84e223c6a2a69193a24...
Core was generated by `outputs/gdb.base/coref'.
Program terminated with signal SIGABRT, Aborted.
(gdb)

This work is based on functionality available in Fedora originally
written by Jan Kratochvil.

Regression tested on buildbot.

gdb/ChangeLog:
2019-12-07  Keith Seitz  <keiths@redhat.com>

* build-id.c (build_id_bfd_get): Permit bfd_core, too.
(build_id_to_debug_bfd): Make static, rewriting to use
build_id_to_bfd_suffix.
(build_id_to_bfd_suffix): Copy of build_id_to_debug_bfd,
adding `suffix' parameter. Append SUFFIX to file names
when searching for matching files.
(build_id_to_debug_bfd): Use build_id_to_bfd_suffix.
(build_id_to_exec_bfd): Likewise.
* build-id.h (build_id_to_debug_bfd): Clarify that function
searches for BFD of debug info file.
(build_id_to_exec_bfd): Declare.
* corelow.c: Include build-id.h.
(locate_exec_from_corefile_build_id): New function.
(core_target_open): If no executable BFD is found,
search for a core file BFD using build-id.

gdb/testsuite/ChangeLog:
2019-12-07  Keith Seitz  <keiths@redhat.com>

* gdb.base/corefile-buildid-shlib-shr.c: New file.
* gdb.base/corefile-buildid-shlib.c: New file.
* gdb.base/corefile-buildid.c: New file.
* gdb.base/corefile-buildid.exp: New file.

Change-Id: I15e9e8e58f10c68b5cae55e2eba58df1e8aef529
gdb/ChangeLog
gdb/build-id.c
gdb/build-id.h
gdb/corelow.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/corefile-buildid-shlib-shr.c [new file with mode: 0644]
gdb/testsuite/gdb.base/corefile-buildid-shlib.c [new file with mode: 0644]
gdb/testsuite/gdb.base/corefile-buildid.c [new file with mode: 0644]
gdb/testsuite/gdb.base/corefile-buildid.exp [new file with mode: 0644]