mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
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 ... ```
This commit is contained in:

committed by
Fangrui Song

parent
e122316b7c
commit
2cac01e3ff
@ -576,6 +576,50 @@ if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3gabi.W] } then {
|
||||
pass "$testname"
|
||||
}
|
||||
|
||||
if { [binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}zstd.o --compress-debug-sections=zstd] } then {
|
||||
set testname "objcopy compress debug sections with zstd"
|
||||
set got [binutils_run $OBJCOPY "--compress-debug-sections=zstd ${testfile}.o ${copyfile}zstd.o"]
|
||||
if ![string match "" $got] then {
|
||||
fail "objcopy ($testname)"
|
||||
return
|
||||
}
|
||||
send_log "cmp ${compressedfile}zstd.o ${copyfile}zstd.o\n"
|
||||
verbose "cmp ${compressedfile}zstd.o ${copyfile}zstd.o"
|
||||
set src1 ${compressedfile}zstd.o
|
||||
set src2 ${copyfile}zstd.o
|
||||
set status [remote_exec build cmp "${src1} ${src2}"]
|
||||
set exec_output [lindex $status 1]
|
||||
set exec_output [prune_warnings $exec_output]
|
||||
if ![string match "" $exec_output] then {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output" 1
|
||||
fail "objcopy ($testname)"
|
||||
} else {
|
||||
pass "objcopy ($testname)"
|
||||
}
|
||||
|
||||
set testname "objcopy decompress compressed debug sections with zstd"
|
||||
set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile}zstd.o ${copyfile}zstd.o"]
|
||||
if ![string match "" $got] then {
|
||||
fail "objcopy ($testname)"
|
||||
return
|
||||
}
|
||||
send_log "cmp ${testfile}.o ${copyfile}zstd.o\n"
|
||||
verbose "cmp ${testfile}.o ${copyfile}zstd.o"
|
||||
set src1 ${testfile}.o
|
||||
set src2 ${copyfile}zstd.o
|
||||
set status [remote_exec build cmp "${src1} ${src2}"]
|
||||
set exec_output [lindex $status 1]
|
||||
set exec_output [prune_warnings $exec_output]
|
||||
if ![string match "" $exec_output] then {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output" 1
|
||||
fail "objcopy ($testname)"
|
||||
} else {
|
||||
pass "objcopy ($testname)"
|
||||
}
|
||||
}
|
||||
|
||||
proc convert_test { testname as_flags objcop_flags } {
|
||||
global srcdir
|
||||
global subdir
|
||||
|
Reference in New Issue
Block a user