1
0
mirror of https://github.com/golang/go synced 2024-11-17 18:44:44 -07:00

cmd/link: set alignment of compressed section based on arch

The ELF compression header(Chdr) has Addralign field that is set to the
alignment of the uncompressed section which makes section able to have
a different alignment than the decompressed section. However `file` and
other tools require both Chdr.Addralign and Addralign to be equal.

Ref https://sourceware.org/bugzilla/show_bug.cgi?id=23919
Related #42136

Fixes #51769

Change-Id: I3cf99dbd2359932576420a3c0d342c7e91b99227
Reviewed-on: https://go-review.googlesource.com/c/go/+/393916
Trust: mzh <mzh@golangcn.org>
Reviewed-by: Alessandro Arzilli <alessandro.arzilli@gmail.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Fangrui Song <maskray@google.com>
This commit is contained in:
Meng Zhuo 2022-03-18 17:36:52 +08:00 committed by Cherry Mui
parent b810a74da3
commit b9d6cea501

View File

@ -2234,7 +2234,7 @@ func dwarfcompress(ctxt *Link) {
compressedSegName = ".zdebug_" + ldr.SymSect(s).Name[len(".debug_"):] compressedSegName = ".zdebug_" + ldr.SymSect(s).Name[len(".debug_"):]
} }
sect := addsection(ctxt.loader, ctxt.Arch, &Segdwarf, compressedSegName, 04) sect := addsection(ctxt.loader, ctxt.Arch, &Segdwarf, compressedSegName, 04)
sect.Align = 1 sect.Align = int32(ctxt.Arch.Alignment)
sect.Length = uint64(len(z.compressed)) sect.Length = uint64(len(z.compressed))
sect.Compressed = true sect.Compressed = true
newSym := ldr.MakeSymbolBuilder(compressedSegName) newSym := ldr.MakeSymbolBuilder(compressedSegName)