In writelines the linker uses various auxiliary information about a
function to create its line table entries. (It also does some unrelated
stuff, but never mind.) There's no reason to do this for non-Go
functions, so it bails out if the symbol has no FuncInfo.
However, it does so *after* it looks up (and implicitly creates!) the
go.info symbol for the function, which doesn't make sense and risks
creating duplicate symbols for static C functions. Move the check up so
that it doesn't do that.
Since non-Go functions can't reference Go types, there shouldn't be any
relocations to type info DIEs that need to be built, so there should be
no harm not doing that.
I wanted to change the Lookup to an ROLookup but that broke the
shared-mode tests with an inscrutable error.
No test. It seems too specific to worry about, but if someone disagrees
I can figure something out.
Fixes #21566
Change-Id: I61f03b7c504a3bf1c4245a8811795b6303469e91
Reviewed-on: https://go-review.googlesource.com/58630
Reviewed-by: Ian Lance Taylor <iant@golang.org>
var pcfile Pciter
var pcline Pciter
for _, s := range ctxt.Textp {
+ if s.FuncInfo == nil {
+ continue
+ }
epc = s.Value + s.Size
epcs = s
}
funcs = append(funcs, dsym)
- if s.FuncInfo == nil {
- continue
- }
-
finddebugruntimepath(s)
pciterinit(ctxt, &pcfile, &s.FuncInfo.Pcfile)