diff options
author | Cherry Zhang <cherryyz@google.com> | 2020-10-24 13:05:31 -0400 |
---|---|---|
committer | Cherry Zhang <cherryyz@google.com> | 2020-10-26 14:34:39 +0000 |
commit | 404899f6b56800c1d8e0521fc9ce0c856e459d94 (patch) | |
tree | df83f52120fee0c34531cc5094af27cf70b17653 | |
parent | c80022204e8fc36ec487888d471de27a5ea47e17 (diff) | |
download | go-404899f6b56800c1d8e0521fc9ce0c856e459d94.tar.gz go-404899f6b56800c1d8e0521fc9ce0c856e459d94.zip |
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>
-rw-r--r-- | src/cmd/link/internal/ld/symtab.go | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/cmd/link/internal/ld/symtab.go b/src/cmd/link/internal/ld/symtab.go index dd82963a41..ca688e2011 100644 --- a/src/cmd/link/internal/ld/symtab.go +++ b/src/cmd/link/internal/ld/symtab.go @@ -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) } } |