aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzhouguangyuan <zhouguangyuan.xian@gmail.com>2021-09-16 02:10:17 +0800
committerAlexander Rakoczy <alex@golang.org>2021-10-13 15:12:46 +0000
commitf687831e4cfa06d19533d47ae93c0451bd1ca688 (patch)
treea5ea7f09d0b01c436f55cd46a686740f89bdc937 /src
parent0454d7346f4ca89261356d3f17da11ab5bc643c5 (diff)
downloadgo-f687831e4cfa06d19533d47ae93c0451bd1ca688.tar.xz
cmd/link: disable weak reference in itab if build with "-linkshared"
When build with "-linkshared", we can't tell if the interface method will be used or not. It can be used in shared library. Fixes #47873 Change-Id: Iba12812f199b7679cf2fd41a304268d6d6dd03c6 Reviewed-on: https://go-review.googlesource.com/c/go/+/350189 Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Trust: Alexander Rakoczy <alex@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/link/internal/ld/deadcode.go4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go
index 0221024d56..79acd73387 100644
--- a/src/cmd/link/internal/ld/deadcode.go
+++ b/src/cmd/link/internal/ld/deadcode.go
@@ -134,7 +134,9 @@ func (d *deadcodePass) flood() {
methods = methods[:0]
for i := 0; i < relocs.Count(); i++ {
r := relocs.At(i)
- if r.Weak() {
+ // When build with "-linkshared", we can't tell if the interface
+ // method in itab will be used or not. Ignore the weak attribute.
+ if r.Weak() && !(d.ctxt.linkShared && d.ldr.IsItab(symIdx)) {
continue
}
t := r.Type()