Commit 38bd725b authored by Heschi Kreinick's avatar Heschi Kreinick

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 <heschi@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarDavid Chase <drchase@google.com>
parent dc42ffff
...@@ -453,6 +453,8 @@ func createComplexVars(fn *Node, debugInfo *ssa.FuncDebug) ([]*Node, []*dwarf.Va ...@@ -453,6 +453,8 @@ func createComplexVars(fn *Node, debugInfo *ssa.FuncDebug) ([]*Node, []*dwarf.Va
if parts == nil { if parts == nil {
continue 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 // Get the order the parts need to be in to represent the memory
// of the decomposed user variable. // of the decomposed user variable.
......
...@@ -328,6 +328,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{ ...@@ -328,6 +328,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{
DW_CHILDREN_no, DW_CHILDREN_no,
[]dwAttrForm{ []dwAttrForm{
{DW_AT_name, DW_FORM_string}, {DW_AT_name, DW_FORM_string},
{DW_AT_decl_line, DW_FORM_udata},
{DW_AT_location, DW_FORM_sec_offset}, {DW_AT_location, DW_FORM_sec_offset},
{DW_AT_type, DW_FORM_ref_addr}, {DW_AT_type, DW_FORM_ref_addr},
}, },
...@@ -351,6 +352,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{ ...@@ -351,6 +352,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{
DW_CHILDREN_no, DW_CHILDREN_no,
[]dwAttrForm{ []dwAttrForm{
{DW_AT_name, DW_FORM_string}, {DW_AT_name, DW_FORM_string},
{DW_AT_decl_line, DW_FORM_udata},
{DW_AT_location, DW_FORM_sec_offset}, {DW_AT_location, DW_FORM_sec_offset},
{DW_AT_type, DW_FORM_ref_addr}, {DW_AT_type, DW_FORM_ref_addr},
}, },
......
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