diff options
author | Cherry Mui <cherryyz@google.com> | 2021-05-13 16:36:32 -0400 |
---|---|---|
committer | Cherry Mui <cherryyz@google.com> | 2021-05-13 21:01:50 +0000 |
commit | 92c189f2117415ff7a4bd9652422ba9af1745cb9 (patch) | |
tree | 32c8a4c2bd26b15007e21fc10b858287796902e0 | |
parent | 7a7624a3fa4665e8d75919746b6d762d3984d471 (diff) | |
download | go-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.go | 2 |
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 |