On ELF64, it looks like BFD uses 8-byte alignment for compressed `.debug_*` sections while gold/lld/mold use 1-byte alignment. I do not know how the Solaris linker sets the alignment.
The specification's wording makes me confused whether it really requires 8-byte alignment, even if a non-packed `Elf64_Chdr` surely requires 8. > The sh_size and sh_addralign fields of the section header for a compressed > section reflect the requirements of the compressed section. There are many `.debug_*` sections. So avoiding some alignment padding seems a very natural extension (a DWARF v5 -gsplit-dwarf relocatable file has ~10 `.debug_*` sections), even if the specification doesn't allow it with a very strict interpretation... (Off-topic: I wonder whether ELF control structures should use unaligned LEB128 more. REL/RELA can naturally be replaced with a LEB128 one similar to wasm.) On Fri, Mar 8, 2024 at 1:57 PM Ian Lance Taylor <i...@golang.org> wrote: > > Reportedly when lld compresses debug sections, it fails to set the > alignment of the compressed section such that the compressed header > can be read directly. To me this seems like a bug in lld. However, > libbacktrace needs to work around it. This patch, originally by the > GitHub user ubyte, does that. Bootstrapped and tested on > x86_64-pc-linux-gnu. Committed to mainline. > > Ian > > * elf.c (elf_uncompress_chdr): Don't assume compressed section is > aligned. -- 宋方睿