diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index ec385e5df8d..e3166adcc7c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2021-02-02 Simon Marchi + + * lib/dwarf.exp (_location): Add parameters. + (_handle_DW_FORM): Adjust. + 2021-02-02 Simon Marchi PR gdb/26813 diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp index aba4afba224..f4f1cab05e6 100644 --- a/gdb/testsuite/lib/dwarf.exp +++ b/gdb/testsuite/lib/dwarf.exp @@ -515,11 +515,15 @@ namespace eval Dwarf { } SPECIAL_expr { + variable _cu_version + variable _cu_addr_size + variable _cu_offset_size + set l1 [new_label "expr_start"] set l2 [new_label "expr_end"] _op .uleb128 "$l2 - $l1" "expression" define_label $l1 - _location $value + _location $value $_cu_version $_cu_addr_size $_cu_offset_size define_label $l2 } @@ -889,18 +893,28 @@ namespace eval Dwarf { # This is a miniature assembler for location expressions. It is # suitable for use in the attributes to a DIE. Its output is # prefixed with "=" to make it automatically use DW_FORM_block. + # # BODY is split by lines, and each line is taken to be a list. + # + # DWARF_VERSION is the DWARF version for the section where the location + # description is found. + # + # ADDR_SIZE is the length in bytes (4 or 8) of an address on the target + # machine (typically found in the header of the section where the location + # description is found). + # + # OFFSET_SIZE is the length in bytes (4 or 8) of an offset into a DWARF + # section. This typically depends on whether 32-bit or 64-bit DWARF is + # used, as indicated in the header of the section where the location + # description is found. + # # (FIXME should use 'info complete' here.) # Each list's first element is the opcode, either short or long # forms are accepted. # FIXME argument handling # FIXME move docs - proc _location {body} { + proc _location { body dwarf_version addr_size offset_size } { variable _constants - variable _cu_label - variable _cu_version - variable _cu_addr_size - variable _cu_offset_size foreach line [split $body \n] { # Ignore blank lines, and allow embedded comments. @@ -912,7 +926,7 @@ namespace eval Dwarf { switch -exact -- $opcode { DW_OP_addr { - _op .${_cu_addr_size}byte [lindex $line 1] + _op .${addr_size}byte [lindex $line 1] } DW_OP_regx { @@ -992,10 +1006,10 @@ namespace eval Dwarf { # Here label is a section offset. set label [lindex $line 1] - if { $_cu_version == 2 } { - _op .${_cu_addr_size}byte $label + if { $dwarf_version == 2 } { + _op .${addr_size}byte $label } else { - _op .${_cu_offset_size}byte $label + _op .${offset_size}byte $label } _op .sleb128 [lindex $line 2] } @@ -1007,10 +1021,10 @@ namespace eval Dwarf { # Here label is a section offset. set label [lindex $line 1] - if { $_cu_version == 2 } { - _op .${_cu_addr_size}byte $label + if { $dwarf_version == 2 } { + _op .${addr_size}byte $label } else { - _op .${_cu_offset_size}byte $label + _op .${offset_size}byte $label } }