mirror of
https://github.com/golang/go.git
synced 2025-05-23 08:21:24 +00:00
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/+/188238 Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
f4ca3c1e0a
commit
376fc48338
@ -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."
|
||||||
|
@ -402,11 +402,12 @@ type FuncInfo struct {
|
|||||||
Pcln Pcln
|
Pcln Pcln
|
||||||
InlMarks []InlMark
|
InlMarks []InlMark
|
||||||
|
|
||||||
dwarfInfoSym *LSym
|
dwarfInfoSym *LSym
|
||||||
dwarfLocSym *LSym
|
dwarfLocSym *LSym
|
||||||
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 {
|
|||||||
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,
|
|||||||
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 {
|
|||||||
// 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) {
|
|||||||
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 (
|
|||||||
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 (
|
|||||||
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{
|
|||||||
SDWARFINFO,
|
SDWARFINFO,
|
||||||
SDWARFRANGE,
|
SDWARFRANGE,
|
||||||
SDWARFLOC,
|
SDWARFLOC,
|
||||||
|
SDWARFLINES,
|
||||||
SDWARFMISC,
|
SDWARFMISC,
|
||||||
SABIALIAS,
|
SABIALIAS,
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user