aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2020-10-24 13:05:31 -0400
committerCherry Zhang <cherryyz@google.com>2020-10-26 14:34:39 +0000
commit404899f6b56800c1d8e0521fc9ce0c856e459d94 (patch)
treedf83f52120fee0c34531cc5094af27cf70b17653
parentc80022204e8fc36ec487888d471de27a5ea47e17 (diff)
downloadgo-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.go8
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)
}
}