From: Cherry Mui Date: Thu, 13 May 2021 20:36:32 +0000 (-0400) Subject: cmd/link: resolve ABI alias for runtime.unreachableMethod X-Git-Tag: go1.17beta1~157 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=92c189f2117415ff7a4bd9652422ba9af1745cb9;p=gostls13.git 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 --- 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