mirror of
https://github.com/golang/go
synced 2024-09-05 16:04:50 +00:00
cmd/link/internal/ld: panic if inlined functions missing FuncInfo
All inlined functions are Go functions, and thus should be capable of having a FuncInfo. Missing FuncInfo is likely indication of a compiler bug that dropped the symbol too early, failing to add it to the symbol list used for writing output. I believe all existing cases have been fixed; this check will prevent regressions. The exception is -linkshared mode. There symbols are loaded from the shared library, and the FuncInfo is not available. This is a bug, as it can result in incorrect the FuncID in inlinedCall, but it is very involved to fix. For #54959. For #55954. Change-Id: Ib0dc4f1ea62525b55f68604d6013ff33223fdcdd Reviewed-on: https://go-review.googlesource.com/c/go/+/429637 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Michael Pratt <mpratt@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
parent
33738ddd0a
commit
8a0cf719a6
|
@ -171,7 +171,18 @@ func genInlTreeSym(ctxt *Link, cu *sym.CompilationUnit, fi loader.FuncInfo, arch
|
|||
var funcID objabi.FuncID
|
||||
if inlFunc.Valid() {
|
||||
funcID = inlFunc.FuncID()
|
||||
} else if !ctxt.linkShared {
|
||||
// Inlined functions are always Go functions, and thus
|
||||
// must have FuncInfo.
|
||||
//
|
||||
// Unfortunately, with -linkshared, the inlined
|
||||
// function may be external symbols (from another
|
||||
// shared library), and we don't load FuncInfo from the
|
||||
// shared library. We will report potentially incorrect
|
||||
// FuncID in this case. See https://go.dev/issue/55954.
|
||||
panic(fmt.Sprintf("inlined function %s missing func info", ldr.SymName(call.Func)))
|
||||
}
|
||||
|
||||
// Construct runtime.inlinedCall value.
|
||||
const size = 12
|
||||
inlTreeSym.SetUint8(arch, int64(i*size+0), uint8(funcID))
|
||||
|
|
Loading…
Reference in a new issue