aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <pedro@palves.net>2021-09-24 13:03:34 +0100
committerPedro Alves <pedro@palves.net>2021-09-24 13:03:34 +0100
commit62df62b23032bb33ae7d7dc7ec7039a25794907b (patch)
treef739abbbdb31bbabae65f9928f5a533692648c6a
parentd8f2441d856b3b57bbd3b3c60496ca30678f1b8f (diff)
downloadbinutils-62df62b23032bb33ae7d7dc7ec7039a25794907b.zip
binutils-62df62b23032bb33ae7d7dc7ec7039a25794907b.tar.gz
binutils-62df62b23032bb33ae7d7dc7ec7039a25794907b.tar.bz2
gdb/testsuite: Make it possible to use TCL variables in DWARF assembler loclists
It is currently not possible to use variables in locations lists. For example, with: diff --git a/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp b/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp index 6b4f5c8cbb8..cdbf948619f 100644 --- a/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp +++ b/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp @@ -30,6 +30,8 @@ if {![dwarf2_support]} { return 0 } +set myconst 0x123456 + # Test with 32-bit and 64-bit DWARF. foreach_with_prefix is_64 {false true} { if { $is_64 } { @@ -49,6 +51,7 @@ foreach_with_prefix is_64 {false true} { global func1_addr func1_len global func2_addr func2_len global is_64 + global myconst # The CU uses the DW_FORM_loclistx form to refer to the .debug_loclists # section. @@ -107,7 +110,7 @@ foreach_with_prefix is_64 {false true} { list_ { # When in func1. start_length $func1_addr $func1_len { - DW_OP_constu 0x123456 + DW_OP_constu $myconst DW_OP_stack_value } we get: $ make check TESTS="*/loclists-multiple-cus.exp" ... gdb compile failed, build/gdb/testsuite/outputs/gdb.dwarf2/loclists-multiple-cus/loclists-multiple-cus-dw32.S: Assembler messages: build/gdb/testsuite/outputs/gdb.dwarf2/loclists-multiple-cus/loclists-multiple-cus-dw32.S:78: Error: leb128 operand is an undefined symbol: $myconst ... That means $myconst was copied literally to the generated assembly file. This patch fixes it, by running subst on the location list body, in the context of the caller. The fix is applied to both Dwarf::loclists::table::list_::start_length and Dwarf::loclists::table::list_::start_end. Reported-by: Zoran Zaric <Zoran.Zaric@amd.com> Change-Id: I615a64431857242d9f477d5699e3732df1b31322
-rw-r--r--gdb/testsuite/lib/dwarf.exp4
1 files changed, 4 insertions, 0 deletions
diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp
index 7fb3561..87bb6c1 100644
--- a/gdb/testsuite/lib/dwarf.exp
+++ b/gdb/testsuite/lib/dwarf.exp
@@ -1845,6 +1845,8 @@ namespace eval Dwarf {
variable _debug_loclists_list_count
variable _debug_loclists_locdesc_count
+ set locdesc [uplevel [list subst $locdesc]]
+
_op .byte 0x08 "DW_LLE_start_length"
# Start and end of the address range.
@@ -1874,6 +1876,8 @@ namespace eval Dwarf {
variable _debug_loclists_list_count
variable _debug_loclists_locdesc_count
+ set locdesc [uplevel [list subst $locdesc]]
+
_op .byte 0x07 "DW_LLE_start_end"
# Start and end of the address range.