aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2017-03-06 07:32:37 -0800
committerMatthew Dempsky <mdempsky@google.com>2017-03-07 17:32:54 +0000
commit68177d9ec034b5d2f0ef35fa1a225616c2af3827 (patch)
treed7b6b1631a33dfc57e97ba7f547c31cf90404e1f /src/cmd/internal/obj
parente577a55b78bb2d36841504c00ff1d984c167308e (diff)
downloadgo-68177d9ec034b5d2f0ef35fa1a225616c2af3827.tar.xz
cmd/internal/obj: move dwarf.Var generation into compiler
Passes toolstash -cmp. Change-Id: I4bd60f7ebba5457e7b3ece688fee2351bfeeb59a Reviewed-on: https://go-review.googlesource.com/37874 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alessandro Arzilli <alessandro.arzilli@gmail.com> Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/link.go2
-rw-r--r--src/cmd/internal/obj/objfile.go63
-rw-r--r--src/cmd/internal/obj/plist.go2
3 files changed, 17 insertions, 50 deletions
diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go
index 62e9608954..e55af81c98 100644
--- a/src/cmd/internal/obj/link.go
+++ b/src/cmd/internal/obj/link.go
@@ -32,6 +32,7 @@ package obj
import (
"bufio"
+ "cmd/internal/dwarf"
"cmd/internal/src"
"cmd/internal/sys"
"fmt"
@@ -752,6 +753,7 @@ type Link struct {
Armsize int32
Pc int64
DiagFunc func(string, ...interface{})
+ DebugInfo func(fn *LSym) []*dwarf.Var
Mode int
Cursym *LSym
Version int
diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go
index 1bd4f53ae4..9a208b20b1 100644
--- a/src/cmd/internal/obj/objfile.go
+++ b/src/cmd/internal/obj/objfile.go
@@ -551,54 +551,19 @@ func (c dwCtxt) AddSectionOffset(s dwarf.Sym, size int, t interface{}, ofs int64
r.Type = R_DWARFREF
}
-func gendwarf(ctxt *Link, text []*LSym) []*LSym {
- dctxt := dwCtxt{ctxt}
- var dw []*LSym
-
- for _, s := range text {
- dsym := Linklookup(ctxt, dwarf.InfoPrefix+s.Name, int(s.Version))
- if dsym.Size != 0 {
- continue
- }
- dw = append(dw, dsym)
- dsym.Type = SDWARFINFO
- dsym.Set(AttrDuplicateOK, s.DuplicateOK())
- var vars []*dwarf.Var
- var abbrev int
- var offs int32
- for _, a := range s.Autom {
- switch a.Name {
- case NAME_AUTO:
- abbrev = dwarf.DW_ABRV_AUTO
- offs = a.Aoffset
- if ctxt.FixedFrameSize() == 0 {
- offs -= int32(ctxt.Arch.PtrSize)
- }
- if Framepointer_enabled(GOOS, GOARCH) {
- offs -= int32(ctxt.Arch.PtrSize)
- }
-
- case NAME_PARAM:
- abbrev = dwarf.DW_ABRV_PARAM
- offs = a.Aoffset + int32(ctxt.FixedFrameSize())
-
- default:
- continue
- }
-
- typename := dwarf.InfoPrefix + a.Gotype.Name[len("type."):]
- vars = append(vars, &dwarf.Var{
- Name: a.Asym.Name,
- Abbrev: abbrev,
- Offset: offs,
- Type: Linklookup(ctxt, typename, 0),
- })
- }
-
- // Stable sort so that ties are broken with declaration order.
- sort.Stable(dwarf.VarsByOffset(vars))
-
- dwarf.PutFunc(dctxt, dsym, s.Name, s.Version == 0, s, s.Size, vars)
+// makeFuncDebugEntry makes a DWARF Debugging Information Entry
+// for TEXT symbol s.
+func makeFuncDebugEntry(ctxt *Link, s *LSym) {
+ dsym := Linklookup(ctxt, dwarf.InfoPrefix+s.Name, int(s.Version))
+ if dsym.Size != 0 {
+ return
+ }
+ dsym.Type = SDWARFINFO
+ dsym.Set(AttrDuplicateOK, s.DuplicateOK())
+ var vars []*dwarf.Var
+ if ctxt.DebugInfo != nil {
+ vars = ctxt.DebugInfo(s)
}
- return dw
+ dwarf.PutFunc(dwCtxt{ctxt}, dsym, s.Name, s.Version == 0, s, s.Size, vars)
+ ctxt.Data = append(ctxt.Data, dsym)
}
diff --git a/src/cmd/internal/obj/plist.go b/src/cmd/internal/obj/plist.go
index 8532bbc1d4..4ff71632a0 100644
--- a/src/cmd/internal/obj/plist.go
+++ b/src/cmd/internal/obj/plist.go
@@ -128,6 +128,7 @@ func flushplist(ctxt *Link, plist *Plist, freeProgs bool) {
ctxt.Arch.Preprocess(ctxt, s)
ctxt.Arch.Assemble(ctxt, s)
linkpcln(ctxt, s)
+ makeFuncDebugEntry(ctxt, s)
if freeProgs {
s.Text = nil
}
@@ -135,7 +136,6 @@ func flushplist(ctxt *Link, plist *Plist, freeProgs bool) {
// Add to running list in ctxt.
ctxt.Text = append(ctxt.Text, text...)
- ctxt.Data = append(ctxt.Data, gendwarf(ctxt, text)...)
ctxt.Curp = nil
if freeProgs {
ctxt.freeProgs()