aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2021-05-13 16:36:32 -0400
committerCherry Mui <cherryyz@google.com>2021-05-13 21:01:50 +0000
commit92c189f2117415ff7a4bd9652422ba9af1745cb9 (patch)
tree32c8a4c2bd26b15007e21fc10b858287796902e0
parent7a7624a3fa4665e8d75919746b6d762d3984d471 (diff)
downloadgo-92c189f2117415ff7a4bd9652422ba9af1745cb9.tar.gz
go-92c189f2117415ff7a4bd9652422ba9af1745cb9.zip
cmd/link: resolve ABI alias for runtime.unreachableMethod
We redirect references to unreachable methods to runtime.unreachableMethod. We choose to use ABIInternal symbol for this, because runtime.unreachableMethod is a defined Go function. When linking against shared libraries, and ABI wrappers are not enabled, the imported function symbols are all ABI0 and aliased to ABIInternal. We need to resolve ABI alias in this case. Change-Id: Idd64ef46ce0b5f54882ea0069ce0d59dc9b7a599 Reviewed-on: https://go-review.googlesource.com/c/go/+/319891 Trust: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> Reviewed-by: Jeremy Faller <jeremy@golang.org> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Than McIntosh <thanm@google.com> TryBot-Result: Go Bot <gobot@golang.org>
-rw-r--r--src/cmd/link/internal/ld/data.go2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go
index 6659e95cc1..223df63d9d 100644
--- a/src/cmd/link/internal/ld/data.go
+++ b/src/cmd/link/internal/ld/data.go
@@ -340,6 +340,7 @@ func (st *relocSymState) relocsym(s loader.Sym, P []byte) {
if weak && !ldr.AttrReachable(rs) {
// Redirect it to runtime.unreachableMethod, which will throw if called.
rs = syms.unreachableMethod
+ rs = ldr.ResolveABIAlias(rs)
}
if target.IsExternal() {
nExtReloc++
@@ -623,6 +624,7 @@ func extreloc(ctxt *Link, ldr *loader.Loader, s loader.Sym, r loader.Reloc) (loa
rs := ldr.ResolveABIAlias(r.Sym())
if r.Weak() && !ldr.AttrReachable(rs) {
rs = ctxt.ArchSyms.unreachableMethod
+ rs = ldr.ResolveABIAlias(rs)
}
rs, off := FoldSubSymbolOffset(ldr, rs)
rr.Xadd = r.Add() + off