]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: resolve ABI alias for runtime.unreachableMethod
authorCherry Mui <cherryyz@google.com>
Thu, 13 May 2021 20:36:32 +0000 (16:36 -0400)
committerCherry Mui <cherryyz@google.com>
Thu, 13 May 2021 21:01:50 +0000 (21:01 +0000)
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>

src/cmd/link/internal/ld/data.go

index 6659e95cc1f3595b395cb87ee0fee2c17a57a767..223df63d9df7af62f43e86a0ef83fb358b8e1495 100644 (file)
@@ -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