mirror of
https://github.com/golang/go
synced 2024-11-19 15:44:44 -07:00
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: David Chase <drchase@google.com>
This commit is contained in:
parent
dc42ffff59
commit
38bd725bf1
@ -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{
|
|||||||
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{
|
|||||||
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},
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user