]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: preserve alignment for stackmap symbols
authorCherry Zhang <cherryyz@google.com>
Sat, 24 Oct 2020 17:05:31 +0000 (13:05 -0400)
committerCherry Zhang <cherryyz@google.com>
Mon, 26 Oct 2020 14:34:39 +0000 (14:34 +0000)
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>
src/cmd/link/internal/ld/symtab.go

index dd82963a416f61f195ea021ef29de2ed6fa5aa24..ca688e201156aeb0fbfce572a3f13a9acff9fda9 100644 (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)
                }
        }