From: Cherry Mui Date: Thu, 30 Sep 2021 21:42:15 +0000 (-0400) Subject: cmd/link: set alignment for string symbols in symtab pass X-Git-Tag: go1.18beta1~1098 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=8d494b08189cda1b66b9f851d4d7088c77ac7b6b;p=gostls13.git cmd/link: set alignment for string symbols in symtab pass Set alignment for string symbols in symtab pass, so we don't need to look at symbol name in symalign in dodata pass. (Ideally we should not use symbol name like this in symtab pass either, but we already use the names there anyway.) Change-Id: I9fd61e0dd0824c50e3d0d7c07f75b967c8654796 Reviewed-on: https://go-review.googlesource.com/c/go/+/353470 Trust: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Go Bot Reviewed-by: Than McIntosh --- diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 1d65c49381..21169f66ef 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -1165,13 +1165,6 @@ func symalign(ldr *loader.Loader, s loader.Sym) int32 { } else if align != 0 { return min } - // FIXME: figure out a way to avoid checking by name here. - sname := ldr.SymName(s) - if strings.HasPrefix(sname, "go.string.") || strings.HasPrefix(sname, "type..namedata.") { - // String data is just bytes. - // If we align it, we waste a lot of space to padding. - return min - } align = int32(thearch.Maxalign) ssz := ldr.SymSize(s) for int64(align) > ssz && align > min { diff --git a/src/cmd/link/internal/ld/symtab.go b/src/cmd/link/internal/ld/symtab.go index 76cca41d25..4d099b1133 100644 --- a/src/cmd/link/internal/ld/symtab.go +++ b/src/cmd/link/internal/ld/symtab.go @@ -549,6 +549,9 @@ func (ctxt *Link) symtab(pcln *pclntab) []sym.SymKind { symGroupType[s] = sym.SGOSTRING ldr.SetAttrNotInSymbolTable(s, true) ldr.SetCarrierSym(s, symgostring) + if ldr.SymAlign(s) == 0 { + ldr.SetSymAlign(s, 1) // String data is just bytes, no padding. + } case strings.HasPrefix(name, "runtime.gcbits."): symGroupType[s] = sym.SGCBITS @@ -608,6 +611,9 @@ func (ctxt *Link) symtab(pcln *pclntab) []sym.SymKind { ldr.SetCarrierSym(s, symtype) } } + if strings.HasPrefix(name, "type..namedata.") && ldr.SymAlign(s) == 0 { + ldr.SetSymAlign(s, 1) // String data is just bytes, no padding. + } } }