mirror of
https://github.com/golang/go.git
synced 2026-01-29 07:02:05 +03:00
cmd/link: align sections, not symbols after DWARF compress
After DWARF compression, we recompute the symbol and section addresses. On Windows, we need to align the sections to PEFILEALIGN. But the code actually apply the alignment to every symbol. This works mostly fine as after compression a section usually contains a single symbol (the compressed data). But if the compression is not beneficial, it leaves with the original set of symbols, which could be more than one. Applying alignment to every symbol causing the section size too big, no longer matching the size we computed before compression. Fixes #76022. Change-Id: I2246045955405997c77e54001bbb83f9ccd1ee7c Reviewed-on: https://go-review.googlesource.com/c/go/+/721340 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
@@ -2507,19 +2507,19 @@ func dwarfcompress(ctxt *Link) {
|
||||
var prevSect *sym.Section
|
||||
for _, si := range dwarfp {
|
||||
for _, s := range si.syms {
|
||||
ldr.SetSymValue(s, int64(pos))
|
||||
sect := ldr.SymSect(s)
|
||||
if sect != prevSect {
|
||||
if ctxt.IsWindows() {
|
||||
pos = uint64(Rnd(int64(pos), PEFILEALIGN))
|
||||
}
|
||||
sect.Vaddr = pos
|
||||
prevSect = sect
|
||||
}
|
||||
ldr.SetSymValue(s, int64(pos))
|
||||
if ldr.SubSym(s) != 0 {
|
||||
log.Fatalf("%s: unexpected sub-symbols", ldr.SymName(s))
|
||||
}
|
||||
pos += uint64(ldr.SymSize(s))
|
||||
if ctxt.IsWindows() {
|
||||
pos = uint64(Rnd(int64(pos), PEFILEALIGN))
|
||||
}
|
||||
}
|
||||
}
|
||||
Segdwarf.Length = pos - Segdwarf.Vaddr
|
||||
|
||||
Reference in New Issue
Block a user