From: Russ Cox Date: Wed, 23 Aug 2017 02:50:27 +0000 (-0400) Subject: [dev.boringcrypto] cmd/link: work around DWARF symbol bug X-Git-Tag: go1.19beta1~484^2~185 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=991652dcf0;p=gostls13.git [dev.boringcrypto] cmd/link: work around DWARF symbol bug The DWARF code is mishandling the case when the host object files define multiple (distinct) symbols with the same name. They are mapped to the same DWARF debug symbol, which then appears on the dwarfp list multiple times, which then breaks the code that processes the list. Detect duplicates and skip them, because that's trivial, instead of fixing the underlying problem. See #21566. Change-Id: Ib5a34c891d7c15f4c7bb6239d8f31a1ec767b8bc Reviewed-on: https://go-review.googlesource.com/57943 Run-TryBot: Russ Cox TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 452332367c..3c92e26300 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -1868,6 +1868,11 @@ func (ctxt *Link) dodata() { datsize = Rnd(datsize, int64(sect.Align)) sect.Vaddr = uint64(datsize) for _, s := range dwarfp[i:] { + // Syms can (incorrectly) appear twice on the list. Ignore repeats. + // See golang.org/issue/21566. + if s.Type == SRODATA { + continue + } if s.Type != SDWARFINFO { break }