From 38bd725bf1d20c32487ae7e12e37c0060a46ac0f Mon Sep 17 00:00:00 2001 From: Heschi Kreinick Date: Fri, 25 Aug 2017 12:27:15 -0400 Subject: [PATCH] cmd/compile: bug fixes for DWARF location lists Fix two small but serious bugs in the DWARF location list code that should have been caught by the automated tests I didn't write. After emitting debug information for a user variable, mark it as done so that it doesn't get emitted again. Otherwise it would be written once per slot it was decomposed into. Correct a merge error in CL 44350: the location list abbreviations need to have DW_AT_decl_line too, otherwise the resulting DWARF is gibberish. Change-Id: I6ab4b8b32b7870981dac80eadf0ebfc4015ccb01 Reviewed-on: https://go-review.googlesource.com/59070 Run-TryBot: Heschi Kreinick TryBot-Result: Gobot Gobot Reviewed-by: David Chase --- src/cmd/compile/internal/gc/pgen.go | 2 ++ src/cmd/internal/dwarf/dwarf.go | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/cmd/compile/internal/gc/pgen.go b/src/cmd/compile/internal/gc/pgen.go index 3a6848598b..5029b479b2 100644 --- a/src/cmd/compile/internal/gc/pgen.go +++ b/src/cmd/compile/internal/gc/pgen.go @@ -453,6 +453,8 @@ func createComplexVars(fn *Node, debugInfo *ssa.FuncDebug) ([]*Node, []*dwarf.Va if parts == nil { continue } + // Don't work on this variable again, no matter how many slots it has. + delete(varParts, n) // Get the order the parts need to be in to represent the memory // of the decomposed user variable. diff --git a/src/cmd/internal/dwarf/dwarf.go b/src/cmd/internal/dwarf/dwarf.go index 3ab036db0c..3fe8c31ea6 100644 --- a/src/cmd/internal/dwarf/dwarf.go +++ b/src/cmd/internal/dwarf/dwarf.go @@ -328,6 +328,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{ DW_CHILDREN_no, []dwAttrForm{ {DW_AT_name, DW_FORM_string}, + {DW_AT_decl_line, DW_FORM_udata}, {DW_AT_location, DW_FORM_sec_offset}, {DW_AT_type, DW_FORM_ref_addr}, }, @@ -351,6 +352,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{ DW_CHILDREN_no, []dwAttrForm{ {DW_AT_name, DW_FORM_string}, + {DW_AT_decl_line, DW_FORM_udata}, {DW_AT_location, DW_FORM_sec_offset}, {DW_AT_type, DW_FORM_ref_addr}, }, -- 2.48.1