]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: don't create go.info symbols for non-Go functions
authorHeschi Kreinick <heschi@google.com>
Thu, 24 Aug 2017 18:29:13 +0000 (14:29 -0400)
committerHeschi Kreinick <heschi@google.com>
Thu, 24 Aug 2017 21:18:08 +0000 (21:18 +0000)
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>
src/cmd/link/internal/ld/dwarf.go

index 53684fd0f5c1cd243d3e6ed1e50f605bd29bc6d5..27d78c4ad898cc294af00d2c015772a247abc479 100644 (file)
@@ -1059,6 +1059,9 @@ func writelines(ctxt *Link, syms []*Symbol) ([]*Symbol, []*Symbol) {
        var pcfile Pciter
        var pcline Pciter
        for _, s := range ctxt.Textp {
+               if s.FuncInfo == nil {
+                       continue
+               }
 
                epc = s.Value + s.Size
                epcs = s
@@ -1078,10 +1081,6 @@ func writelines(ctxt *Link, syms []*Symbol) ([]*Symbol, []*Symbol) {
                }
                funcs = append(funcs, dsym)
 
-               if s.FuncInfo == nil {
-                       continue
-               }
-
                finddebugruntimepath(s)
 
                pciterinit(ctxt, &pcfile, &s.FuncInfo.Pcfile)