binutils, gdb: support zstd compressed debug sections
authorFangrui Song <maskray@google.com>
Tue, 27 Sep 2022 02:50:13 +0000 (19:50 -0700)
committerFangrui Song <i@maskray.me>
Tue, 27 Sep 2022 02:50:13 +0000 (19:50 -0700)
commit2cac01e3ffff74898c54fa5e6418817f5578adb6
treec0209ba03d922dae339056488493fc16ebefe6d0
parente122316b7ce78b999db944d7b524e11d642e2a49
binutils, gdb: support zstd compressed debug sections

PR29397 PR29563: Add new configure option --with-zstd which defaults to
auto.  If pkgconfig/libzstd.pc is found, define HAVE_ZSTD and support
zstd compressed debug sections for most tools.

* bfd: for addr2line, objdump --dwarf, gdb, etc
* gas: support --compress-debug-sections=zstd
* ld: support ELFCOMPRESS_ZSTD input and --compress-debug-sections=zstd
* objcopy: support ELFCOMPRESS_ZSTD input for
  --decompress-debug-sections and --compress-debug-sections=zstd
* gdb: support ELFCOMPRESS_ZSTD input.  The bfd change references zstd
  symbols, so gdb has to link against -lzstd in this patch.

If zstd is not supported, ELFCOMPRESS_ZSTD input triggers an error.  We
can avoid HAVE_ZSTD if binutils-gdb imports zstd/ like zlib/, but this
is too heavyweight, so don't do it for now.

```
% ld/ld-new a.o
ld/ld-new: a.o: section .debug_abbrev is compressed with zstd, but BFD is not built with zstd support
...

% ld/ld-new a.o --compress-debug-sections=zstd
ld/ld-new: --compress-debug-sections=zstd: ld is not built with zstd support

% binutils/objcopy --compress-debug-sections=zstd a.o b.o
binutils/objcopy: --compress-debug-sections=zstd: binutils is not built with zstd support

% binutils/objcopy b.o --decompress-debug-sections
binutils/objcopy: zstd.o: section .debug_abbrev is compressed with zstd, but BFD is not built with zstd support
...
```
56 files changed:
bfd/Makefile.am
bfd/Makefile.in
bfd/aclocal.m4
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/bfd.c
bfd/compress.c
bfd/config.in
bfd/configure
bfd/configure.ac
bfd/elf.c
bfd/elfxx-target.h
bfd/section.c
binutils/Makefile.in
binutils/NEWS
binutils/aclocal.m4
binutils/config.in
binutils/configure
binutils/configure.ac
binutils/doc/binutils.texi
binutils/objcopy.c
binutils/testsuite/binutils-all/compress.exp
config/zstd.m4 [new file with mode: 0644]
configure
configure.ac
gas/Makefile.am
gas/Makefile.in
gas/NEWS
gas/aclocal.m4
gas/as.c
gas/compress-debug.c
gas/compress-debug.h
gas/config.in
gas/configure
gas/configure.ac
gas/doc/as.texi
gas/write.c
gdb/Makefile.in
gdb/NEWS
gdb/acinclude.m4
gdb/config.in
gdb/configure
gdb/configure.ac
ld/Makefile.am
ld/Makefile.in
ld/NEWS
ld/aclocal.m4
ld/config.in
ld/configure
ld/configure.ac
ld/emultempl/elf.em
ld/ld.texi
ld/ldmain.c
ld/lexsup.c
ld/testsuite/ld-bootstrap/bootstrap.exp
ld/testsuite/ld-elf/compress.exp