Allow gdb to find debug symbols file by build-id for PE file format also
authorJon Turney <jon.turney@dronecode.org.uk>
Tue, 7 Apr 2015 19:49:08 +0000 (20:49 +0100)
committerJon Turney <jon.turney@dronecode.org.uk>
Mon, 15 Jun 2015 11:10:55 +0000 (12:10 +0100)
commitc74f7d1c6c5a968330208757f476c67a4bb66643
tree8561cb57dcfd9668fa5300196a891a8b5d9bc81d
parentf20c58f51f5735d1ba49efadc86b3ec67631410e
Allow gdb to find debug symbols file by build-id for PE file format also

This promotes BFD's struct elf_build_id to the generic struct bfd_build_id,
populated when an ELF or PE BFD is read.

gdb is updated to use that, and to use the build-id to find symbols for PE files
also.

There is currently no generic way to extract the build-id from an object file,
perhaps an option to objdump to do this might make sense?

On x86_64-pc-cygwin, gdb's sepdebug.exp changes:

-# of unsupported tests          1
+# of expected passes            90

I don't seem to get consistent testsuite runs on i686-linux-gnu, but there
don't appear to be any regressions.

bfd/ChangeLog:

2015-06-10  Jon Turney  <jon.turney@dronecode.org.uk>

* elf-bfd.h : Remove struct elf_build_id.
* bfd.c : Add struct bfd_build_id.
* bfd-in2.h: Regenerate.
* elf.c (elfobj_grok_gnu_build_id): Update to use bfd_build_id.
* libpei.h: Add protoype and macros for
bfd_XXi_slurp_codeview_record.
* peXXigen.c (_bfd_XXi_slurp_codeview_record): Make public
* peicode.h (pe_bfd_read_buildid): Add.
(pe_bfd_object_p): Use pe_bfd_read_buildid().

gdb/ChangeLog:

2015-06-10  Jon Turney  <jon.turney@dronecode.org.uk>

* build-id.c: Don't include elf-bfd.h.
(build_id_bfd_get): Use bfd_build_id.
(build_id_verify): Ditto.
* build-id.h: Ditto.
(find_separate_debug_file_by_buildid): Ditto.
* python/py-objfile.c: Don't include elf-bfd.h.
(objfpy_get_build_id) Use bfd_build_id.
(objfpy_build_id_matches, objfpy_lookup_objfile_by_build_id): Ditto.
* coffread.c: Include build-id.h.
(coff_symfile_read): Try find_separate_debug_file_by_buildid.

gdb/doc/ChangeLog:

2015-06-10  Jon Turney  <jon.turney@dronecode.org.uk>

* gdb.texinfo (Separate Debug Files): Document that PE is also
supported.

gdb/testsuite/ChangeLog:

2015-06-10  Jon Turney  <jon.turney@dronecode.org.uk>

* gdb.base/sepdebug.exp: Add EXEEXT where needed.
* lib/gdb.exp (get_build_id): Teach how to extract build-id from a
PE file.
* lib/future.exp (gdb_find_objdump): Add gdb_find_objdump.

Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
19 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/bfd.c
bfd/elf-bfd.h
bfd/elf.c
bfd/libpei.h
bfd/peXXigen.c
bfd/peicode.h
gdb/ChangeLog
gdb/build-id.c
gdb/build-id.h
gdb/coffread.c
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/python/py-objfile.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/sepdebug.exp
gdb/testsuite/lib/future.exp
gdb/testsuite/lib/gdb.exp