From 92c189f2117415ff7a4bd9652422ba9af1745cb9 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Thu, 13 May 2021 16:36:32 -0400 Subject: 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 Run-TryBot: Cherry Mui Reviewed-by: Jeremy Faller Reviewed-by: David Chase Reviewed-by: Than McIntosh TryBot-Result: Go Bot --- src/cmd/link/internal/ld/data.go | 2 ++ 1 file changed, 2 insertions(+) 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 -- cgit v1.2.3-54-g00ecf