cmd/link: preserve alignment for stackmap symbols

Stackmap symbols are content-addressable, so it may be dedup'd
with another symbol with same content. We want stackmap symbols
4-byte aligned. But if it dedup's with another symbol with larger
alignment, preserve that alignment.

Fixes #42071.

Change-Id: I1616dd2b0c175b2aac8f68782a5c7a62053c0b57
Reviewed-on: https://go-review.googlesource.com/c/go/+/264897
Trust: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Joel Sing <joel@sing.id.au>
Reviewed-by: Than McIntosh <thanm@google.com>
This commit is contained in:
Cherry Zhang 2020-10-24 13:05:31 -04:00
parent c80022204e
commit 404899f6b5
1 changed files with 6 additions and 2 deletions

View File

@ -580,8 +580,12 @@ func (ctxt *Link) symtab(pcln *pclntab) []sym.SymKind {
symGroupType[s] = sym.SGOFUNC
ldr.SetAttrNotInSymbolTable(s, true)
ldr.SetCarrierSym(s, symgofunc)
const align = 4
ldr.SetSymAlign(s, align)
align := int32(4)
if a := ldr.SymAlign(s); a < align {
ldr.SetSymAlign(s, align)
} else {
align = a
}
liveness += (ldr.SymSize(s) + int64(align) - 1) &^ (int64(align) - 1)
}
}