Commit 376fc483 authored by Jeremy Faller's avatar Jeremy Faller

cmd/compile: add new symbol for debug line numbers

This is broken out from: CL 187117

This new symbol will be populated by the compiler and contain debug line
information that's currently generated in the linker. One might say it's
sad to create a new symbol, but this symbol will replace the isStmt
symbols.

Testing: Ran go build -toolexec 'toolstash -cmp'

Change-Id: If8f7ae4b43b7247076605b6429b7d03a1fd239c5
Reviewed-on: https://go-review.googlesource.com/c/go/+/188238Reviewed-by: default avatarAustin Clements <austin@google.com>
parent f4ca3c1e
...@@ -30,6 +30,9 @@ const RangePrefix = "go.range." ...@@ -30,6 +30,9 @@ const RangePrefix = "go.range."
// IsStmtPrefix is the prefix for all the symbols containing DWARF is_stmt info for the line number table. // IsStmtPrefix is the prefix for all the symbols containing DWARF is_stmt info for the line number table.
const IsStmtPrefix = "go.isstmt." const IsStmtPrefix = "go.isstmt."
// DebugLinesPrefix is the prefix for all the symbols containing DWARF debug_line information from the compiler.
const DebugLinesPrefix = "go.debuglines."
// ConstInfoPrefix is the prefix for all symbols containing DWARF info // ConstInfoPrefix is the prefix for all symbols containing DWARF info
// entries that contain constants. // entries that contain constants.
const ConstInfoPrefix = "go.constinfo." const ConstInfoPrefix = "go.constinfo."
......
...@@ -407,6 +407,7 @@ type FuncInfo struct { ...@@ -407,6 +407,7 @@ type FuncInfo struct {
dwarfRangesSym *LSym dwarfRangesSym *LSym
dwarfAbsFnSym *LSym dwarfAbsFnSym *LSym
dwarfIsStmtSym *LSym dwarfIsStmtSym *LSym
dwarfDebugLinesSym *LSym
GCArgs *LSym GCArgs *LSym
GCLocals *LSym GCLocals *LSym
......
...@@ -537,7 +537,7 @@ func isDwarf64(ctxt *Link) bool { ...@@ -537,7 +537,7 @@ func isDwarf64(ctxt *Link) bool {
return ctxt.Headtype == objabi.Haix return ctxt.Headtype == objabi.Haix
} }
func (ctxt *Link) dwarfSym(s *LSym) (dwarfInfoSym, dwarfLocSym, dwarfRangesSym, dwarfAbsFnSym, dwarfIsStmtSym *LSym) { func (ctxt *Link) dwarfSym(s *LSym) (dwarfInfoSym, dwarfLocSym, dwarfRangesSym, dwarfAbsFnSym, dwarfIsStmtSym, dwarfDebugLines *LSym) {
if s.Type != objabi.STEXT { if s.Type != objabi.STEXT {
ctxt.Diag("dwarfSym of non-TEXT %v", s) ctxt.Diag("dwarfSym of non-TEXT %v", s)
} }
...@@ -551,9 +551,9 @@ func (ctxt *Link) dwarfSym(s *LSym) (dwarfInfoSym, dwarfLocSym, dwarfRangesSym, ...@@ -551,9 +551,9 @@ func (ctxt *Link) dwarfSym(s *LSym) (dwarfInfoSym, dwarfLocSym, dwarfRangesSym,
s.Func.dwarfAbsFnSym = ctxt.DwFixups.AbsFuncDwarfSym(s) s.Func.dwarfAbsFnSym = ctxt.DwFixups.AbsFuncDwarfSym(s)
} }
s.Func.dwarfIsStmtSym = ctxt.LookupDerived(s, dwarf.IsStmtPrefix+s.Name) s.Func.dwarfIsStmtSym = ctxt.LookupDerived(s, dwarf.IsStmtPrefix+s.Name)
s.Func.dwarfDebugLinesSym = ctxt.LookupDerived(s, dwarf.DebugLinesPrefix+s.Name)
} }
return s.Func.dwarfInfoSym, s.Func.dwarfLocSym, s.Func.dwarfRangesSym, s.Func.dwarfAbsFnSym, s.Func.dwarfIsStmtSym return s.Func.dwarfInfoSym, s.Func.dwarfLocSym, s.Func.dwarfRangesSym, s.Func.dwarfAbsFnSym, s.Func.dwarfIsStmtSym, s.Func.dwarfDebugLinesSym
} }
func (s *LSym) Len() int64 { func (s *LSym) Len() int64 {
...@@ -577,7 +577,7 @@ func (ctxt *Link) fileSymbol(fn *LSym) *LSym { ...@@ -577,7 +577,7 @@ func (ctxt *Link) fileSymbol(fn *LSym) *LSym {
// TEXT symbol 's'. The various DWARF symbols must already have been // TEXT symbol 's'. The various DWARF symbols must already have been
// initialized in InitTextSym. // initialized in InitTextSym.
func (ctxt *Link) populateDWARF(curfn interface{}, s *LSym, myimportpath string) { func (ctxt *Link) populateDWARF(curfn interface{}, s *LSym, myimportpath string) {
info, loc, ranges, absfunc, _ := ctxt.dwarfSym(s) info, loc, ranges, absfunc, _, _ := ctxt.dwarfSym(s)
if info.Size != 0 { if info.Size != 0 {
ctxt.Diag("makeFuncDebugEntry double process %v", s) ctxt.Diag("makeFuncDebugEntry double process %v", s)
} }
......
...@@ -137,7 +137,7 @@ func (ctxt *Link) InitTextSym(s *LSym, flag int) { ...@@ -137,7 +137,7 @@ func (ctxt *Link) InitTextSym(s *LSym, flag int) {
ctxt.Text = append(ctxt.Text, s) ctxt.Text = append(ctxt.Text, s)
// Set up DWARF entries for s. // Set up DWARF entries for s.
info, loc, ranges, _, isstmt := ctxt.dwarfSym(s) info, loc, ranges, _, isstmt, _ := ctxt.dwarfSym(s)
info.Type = objabi.SDWARFINFO info.Type = objabi.SDWARFINFO
info.Set(AttrDuplicateOK, s.DuplicateOK()) info.Set(AttrDuplicateOK, s.DuplicateOK())
if loc != nil { if loc != nil {
......
...@@ -60,6 +60,7 @@ const ( ...@@ -60,6 +60,7 @@ const (
SDWARFRANGE SDWARFRANGE
SDWARFLOC SDWARFLOC
SDWARFMISC SDWARFMISC
SDWARFLINES
// ABI alias. An ABI alias symbol is an empty symbol with a // ABI alias. An ABI alias symbol is an empty symbol with a
// single relocation with 0 size that references the native // single relocation with 0 size that references the native
// function implementation symbol. // function implementation symbol.
......
...@@ -110,6 +110,7 @@ const ( ...@@ -110,6 +110,7 @@ const (
SDWARFINFO SDWARFINFO
SDWARFRANGE SDWARFRANGE
SDWARFLOC SDWARFLOC
SDWARFLINES
SDWARFMISC // Not really a section; informs/affects other DWARF section generation SDWARFMISC // Not really a section; informs/affects other DWARF section generation
// ABI aliases (these never appear in the output) // ABI aliases (these never appear in the output)
...@@ -130,6 +131,7 @@ var AbiSymKindToSymKind = [...]SymKind{ ...@@ -130,6 +131,7 @@ var AbiSymKindToSymKind = [...]SymKind{
SDWARFINFO, SDWARFINFO,
SDWARFRANGE, SDWARFRANGE,
SDWARFLOC, SDWARFLOC,
SDWARFLINES,
SDWARFMISC, SDWARFMISC,
SABIALIAS, SABIALIAS,
} }
......
...@@ -58,13 +58,14 @@ func _() { ...@@ -58,13 +58,14 @@ func _() {
_ = x[SDWARFINFO-47] _ = x[SDWARFINFO-47]
_ = x[SDWARFRANGE-48] _ = x[SDWARFRANGE-48]
_ = x[SDWARFLOC-49] _ = x[SDWARFLOC-49]
_ = x[SDWARFMISC-50] _ = x[SDWARFLINES-50]
_ = x[SABIALIAS-51] _ = x[SDWARFMISC-51]
_ = x[SABIALIAS-52]
} }
const _SymKind_name = "SxxxSTEXTSELFRXSECTSTYPESSTRINGSGOSTRINGSGOFUNCSGCBITSSRODATASFUNCTABSELFROSECTSMACHOPLTSTYPERELROSSTRINGRELROSGOSTRINGRELROSGOFUNCRELROSGCBITSRELROSRODATARELROSFUNCTABRELROSTYPELINKSITABLINKSSYMTABSPCLNTABSFirstWritableSBUILDINFOSELFSECTSMACHOSMACHOGOTSWINDOWSSELFGOTSNOPTRDATASINITARRSDATASXCOFFTOCSBSSSNOPTRBSSSTLSBSSSXREFSMACHOSYMSTRSMACHOSYMTABSMACHOINDIRECTPLTSMACHOINDIRECTGOTSFILEPATHSCONSTSDYNIMPORTSHOSTOBJSDWARFSECTSDWARFINFOSDWARFRANGESDWARFLOCSDWARFMISCSABIALIAS" const _SymKind_name = "SxxxSTEXTSELFRXSECTSTYPESSTRINGSGOSTRINGSGOFUNCSGCBITSSRODATASFUNCTABSELFROSECTSMACHOPLTSTYPERELROSSTRINGRELROSGOSTRINGRELROSGOFUNCRELROSGCBITSRELROSRODATARELROSFUNCTABRELROSTYPELINKSITABLINKSSYMTABSPCLNTABSFirstWritableSBUILDINFOSELFSECTSMACHOSMACHOGOTSWINDOWSSELFGOTSNOPTRDATASINITARRSDATASXCOFFTOCSBSSSNOPTRBSSSTLSBSSSXREFSMACHOSYMSTRSMACHOSYMTABSMACHOINDIRECTPLTSMACHOINDIRECTGOTSFILEPATHSCONSTSDYNIMPORTSHOSTOBJSDWARFSECTSDWARFINFOSDWARFRANGESDWARFLOCSDWARFLINESSDWARFMISCSABIALIAS"
var _SymKind_index = [...]uint16{0, 4, 9, 19, 24, 31, 40, 47, 54, 61, 69, 79, 88, 98, 110, 124, 136, 148, 160, 173, 182, 191, 198, 206, 220, 230, 238, 244, 253, 261, 268, 278, 286, 291, 300, 304, 313, 320, 325, 337, 349, 366, 383, 392, 398, 408, 416, 426, 436, 447, 456, 466, 475} var _SymKind_index = [...]uint16{0, 4, 9, 19, 24, 31, 40, 47, 54, 61, 69, 79, 88, 98, 110, 124, 136, 148, 160, 173, 182, 191, 198, 206, 220, 230, 238, 244, 253, 261, 268, 278, 286, 291, 300, 304, 313, 320, 325, 337, 349, 366, 383, 392, 398, 408, 416, 426, 436, 447, 456, 467, 477, 486}
func (i SymKind) String() string { func (i SymKind) String() string {
if i >= SymKind(len(_SymKind_index)-1) { if i >= SymKind(len(_SymKind_index)-1) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment