]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/testsuite] Generate DW_MACRO_define_strp in dwarf assembly
authorTom de Vries <tdevries@suse.de>
Thu, 16 May 2024 07:38:15 +0000 (09:38 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 16 May 2024 07:38:15 +0000 (09:38 +0200)
Add support for DW_MACRO_define_strp in dwarf assembly, and use it in
test-case gdb.dwarf2/macro-source-path.exp.

Tested on x86_64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
gdb/testsuite/gdb.dwarf2/macro-source-path.exp
gdb/testsuite/lib/dwarf.exp

index bcfd2f2f92c2acb992ca8a2bca26dbc33146e247..b6b7b0bd2fd373a92c55796c4ece7d376de7947e 100644 (file)
@@ -125,6 +125,7 @@ proc do_test { test_name lines_version DW_AT_name main_file_idx directories
                        # PR 29034).  We're not trying to replicate that here,
                        # this is not in the scope of this test.
                        define 0 "ONE 1"
+                       define_strp 0 "THREE 3"
                        start_file 0 $::main_file_idx
                            # A macro defined at line 1 of the main file.
                            define 1 "TWO 2"
@@ -144,6 +145,7 @@ proc do_test { test_name lines_version DW_AT_name main_file_idx directories
 
            gdb_test "print ONE" " = 1"
            gdb_test "print TWO" " = 2"
+           gdb_test "print THREE" " = 3"
        }
     }
 }
index 44862dbb339a9066b0e1bd7eef030ff051f2e6eb..5b23a60af8eb24022a1a4387547473a0679a5e8c 100644 (file)
@@ -549,6 +549,9 @@ namespace eval Dwarf {
     # The current CU's offset size.
     variable _cu_offset_size
 
+    # The current macro unit's offset size.
+    variable _mu_offset_size
+
     # Label generation number.
     variable _label_num
 
@@ -2229,6 +2232,8 @@ namespace eval Dwarf {
        if { ${is-64} } {
            set flags [expr $flags | 0x1]
        }
+       variable _mu_offset_size
+       set _mu_offset_size [expr ${is-64} ? 8 : 4]
 
        if { ${debug-line-offset-label} != "" } {
            set flags [expr $flags | 0x2]
@@ -2241,11 +2246,12 @@ namespace eval Dwarf {
                "debug_line offset"
        }
 
+       with_override Dwarf::define_strp Dwarf::_macro_unit_define_strp {
        with_override Dwarf::define Dwarf::_macro_unit_define {
        with_override Dwarf::start_file Dwarf::_macro_unit_start_file {
        with_override Dwarf::end_file Dwarf::_macro_unit_end_file {
            uplevel $body
-       }}}
+       }}}}
     }
 
     # Emit a DW_MACRO_define entry.
@@ -2256,6 +2262,26 @@ namespace eval Dwarf {
        _op .asciz "\"$text\"" "Macro definition"
     }
 
+    # Emit a DW_MACRO_define_strp entry.
+
+    proc _macro_unit_define_strp { lineno text } {
+       _op .byte 0x5 "DW_MACRO_define_strp"
+       _op .uleb128 $lineno "Line number"
+
+       variable _strings
+       variable _mu_offset_size
+
+       if {![info exists _strings($text)]} {
+           set _strings($text) [new_label strp]
+           _defer_output .debug_str {
+               define_label $_strings($text)
+               _op .ascii [_quote $text]
+           }
+       }
+
+       _op_offset $_mu_offset_size "$_strings($text)" "strp: $text"
+    }
+
     # Emit a DW_MACRO_start_file entry.
 
     proc _macro_unit_start_file { lineno file_idx } {