]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: add new symbol for debug line numbers
authorJeremy Faller <jeremy@golang.org>
Tue, 30 Jul 2019 21:48:11 +0000 (17:48 -0400)
committerJeremy Faller <jeremy@golang.org>
Mon, 23 Sep 2019 19:40:07 +0000 (19:40 +0000)
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>
src/cmd/internal/dwarf/dwarf.go
src/cmd/internal/obj/link.go
src/cmd/internal/obj/objfile.go
src/cmd/internal/obj/plist.go
src/cmd/internal/objabi/symkind.go
src/cmd/link/internal/sym/symkind.go
src/cmd/link/internal/sym/symkind_string.go

index 1f5786f1ada41854feb9d8f34219ea2860238b40..3feb81a5b4de40dd47cc9234bd2267fa6aba8a1f 100644 (file)
@@ -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.
 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
 // entries that contain constants.
 const ConstInfoPrefix = "go.constinfo."
index 17f1181c5ed33a5f4c644de133d56fceb5da4d51..4beb236bf2c102e3849a08b381801b0ecb42f128 100644 (file)
@@ -402,11 +402,12 @@ type FuncInfo struct {
        Pcln     Pcln
        InlMarks []InlMark
 
-       dwarfInfoSym   *LSym
-       dwarfLocSym    *LSym
-       dwarfRangesSym *LSym
-       dwarfAbsFnSym  *LSym
-       dwarfIsStmtSym *LSym
+       dwarfInfoSym       *LSym
+       dwarfLocSym        *LSym
+       dwarfRangesSym     *LSym
+       dwarfAbsFnSym      *LSym
+       dwarfIsStmtSym     *LSym
+       dwarfDebugLinesSym *LSym
 
        GCArgs       *LSym
        GCLocals     *LSym
index a3281a99e496f043bc2d8042ceda4301da237061..65803ae29af976bb0f52bbaf73a0f9ac1b3e7788 100644 (file)
@@ -537,7 +537,7 @@ func isDwarf64(ctxt *Link) bool {
        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 {
                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.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 {
@@ -577,7 +577,7 @@ func (ctxt *Link) fileSymbol(fn *LSym) *LSym {
 // TEXT symbol 's'. The various DWARF symbols must already have been
 // initialized in InitTextSym.
 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 {
                ctxt.Diag("makeFuncDebugEntry double process %v", s)
        }
index 303fa469e42a08adb5ed75721f7707a47a1caf55..ad08d15c1bf8bf4f809bdb96ea417321e4e6cbb5 100644 (file)
@@ -137,7 +137,7 @@ func (ctxt *Link) InitTextSym(s *LSym, flag int) {
        ctxt.Text = append(ctxt.Text, 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.Set(AttrDuplicateOK, s.DuplicateOK())
        if loc != nil {
index 16b4c535ed85b2fcb56286dcc6cc649bc5212183..0e763e4496c222167200b891bc55485a82360b2a 100644 (file)
@@ -60,6 +60,7 @@ const (
        SDWARFRANGE
        SDWARFLOC
        SDWARFMISC
+       SDWARFLINES
        // ABI alias. An ABI alias symbol is an empty symbol with a
        // single relocation with 0 size that references the native
        // function implementation symbol.
index dbc275073267b1d3620cc19a4144a413142feb67..a3efced6489f4dc05c3bf1817a63f9fcbb45a010 100644 (file)
@@ -110,6 +110,7 @@ const (
        SDWARFINFO
        SDWARFRANGE
        SDWARFLOC
+       SDWARFLINES
        SDWARFMISC // Not really a section; informs/affects other DWARF section generation
 
        // ABI aliases (these never appear in the output)
@@ -130,6 +131,7 @@ var AbiSymKindToSymKind = [...]SymKind{
        SDWARFINFO,
        SDWARFRANGE,
        SDWARFLOC,
+       SDWARFLINES,
        SDWARFMISC,
        SABIALIAS,
 }
index 0e854c334ecd4e8d7bb4c9cccfa63402a5d8e3c0..9349ff6af539807a65cdaab5e6487c859dcb7175 100644 (file)
@@ -58,13 +58,14 @@ func _() {
        _ = x[SDWARFINFO-47]
        _ = x[SDWARFRANGE-48]
        _ = x[SDWARFLOC-49]
-       _ = x[SDWARFMISC-50]
-       _ = x[SABIALIAS-51]
+       _ = x[SDWARFLINES-50]
+       _ = 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 {
        if i >= SymKind(len(_SymKind_index)-1) {