aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link/internal/loader/loader.go
diff options
context:
space:
mode:
authorFilippo Valsorda <filippo@golang.org>2021-07-14 05:35:26 -0400
committerFilippo Valsorda <filippo@golang.org>2021-07-14 05:35:26 -0400
commitddf078e08dc61f38e26f9969dd2a2151a8c73904 (patch)
tree08c9f34f56b0a66a21f94f4ae75dc00af9f59375 /src/cmd/link/internal/loader/loader.go
parent9647f89f2ac2a64acb502c594fc747f206842a86 (diff)
parentc6d89dbf9954b101589e2db8e170b84167782109 (diff)
downloadgo-ddf078e08dc61f38e26f9969dd2a2151a8c73904.tar.gz
go-ddf078e08dc61f38e26f9969dd2a2151a8c73904.zip
[dev.boringcrypto.go1.15] all: merge go1.15.14 into dev.boringcrypto.go1.15
Change-Id: Ia5ae002730c2c0e6bea5e9a10bf335af3ef23e23
Diffstat (limited to 'src/cmd/link/internal/loader/loader.go')
-rw-r--r--src/cmd/link/internal/loader/loader.go12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go
index 32c342e545..3df84c5c94 100644
--- a/src/cmd/link/internal/loader/loader.go
+++ b/src/cmd/link/internal/loader/loader.go
@@ -434,7 +434,17 @@ func (l *Loader) AddSym(name string, ver int, r *oReader, li int, kind int, dupo
if l.flags&FlagStrictDups != 0 {
l.checkdup(name, r, li, oldi)
}
- return oldi, false
+ // Fix for issue #46656 -- given two dupok symbols with
+ // different sizes, favor symbol with larger size.
+ szdup := l.SymSize(oldi)
+ sz := int64(r.Sym(li).Siz())
+ if szdup >= sz {
+ return oldi, false
+ } else {
+ // new symbol overwrites old symbol.
+ l.objSyms[oldi] = objSym{r, li}
+ return oldi, true
+ }
}
oldr, oldli := l.toLocal(oldi)
oldsym := oldr.Sym(oldli)