]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/testsuite] Add gdb.dwarf2/fission-dw-form-strx.exp
authorTom de Vries <tdevries@suse.de>
Fri, 23 May 2025 16:38:20 +0000 (18:38 +0200)
committerTom de Vries <tdevries@suse.de>
Fri, 23 May 2025 16:38:20 +0000 (18:38 +0200)
Add a dwarf assembly test-case using a DW_FORM_strx in a .dwo file.

Tested on x86_64-linux.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
gdb/testsuite/gdb.dwarf2/dw-form-strx.exp.tcl
gdb/testsuite/gdb.dwarf2/fission-dw-form-strx.exp [new file with mode: 0644]
gdb/testsuite/lib/dwarf.exp

index d69b517f2e79523596389a478ca31a42434f53fa..bc5a65482c32e22887acff42e2fc2df37e132f0c 100644 (file)
@@ -24,15 +24,15 @@ set asm_file [standard_output_file $srcfile2]
 
 # Debug info in the main file.
 Dwarf::assemble $asm_file {
-    declare_labels base_offset
+    declare_labels base_offset_cu1
 
-    debug_str_offsets base_offset int
+    debug_str_offsets { base_offset base_offset_cu1 } int
 
     cu {
        version 5
     } {
        DW_TAG_compile_unit {
-           {DW_AT_str_offsets_base $base_offset sec_offset}
+           {DW_AT_str_offsets_base $base_offset_cu1 sec_offset}
        } {
            declare_labels int4_type
 
diff --git a/gdb/testsuite/gdb.dwarf2/fission-dw-form-strx.exp b/gdb/testsuite/gdb.dwarf2/fission-dw-form-strx.exp
new file mode 100644 (file)
index 0000000..4f5867c
--- /dev/null
@@ -0,0 +1,88 @@
+# Copyright 2025 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Check support for a DW_FORM_strx attribute in a dwo file.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+require dwarf2_support
+
+standard_testfile main.c -dw.S -dwo.S
+
+set main_asm_file [standard_output_file $srcfile2]
+set dwo_asm_file [standard_output_file $srcfile3]
+
+# Debug info in the main file.
+Dwarf::assemble $main_asm_file {
+    cu {
+       version 5
+       dwo_id 0xF00D
+    } {
+       compile_unit {
+           {DW_AT_dwo_name ${::gdb_test_file_name}.dwo DW_FORM_strp}
+       } {}
+    }
+}
+
+# Debug info in the DWO file.
+Dwarf::assemble $dwo_asm_file {
+    debug_str_offsets { dwo 1 } int
+
+    cu {
+       fission 1
+       version 5
+       dwo_id 0xF00D
+    } {
+       compile_unit {} {
+           declare_labels int4_type
+
+           int4_type: DW_TAG_base_type {
+               {DW_AT_byte_size 4 DW_FORM_sdata}
+               {DW_AT_encoding  @DW_ATE_signed}
+               {DW_AT_name      0 DW_FORM_strx_id}
+           }
+
+           DW_TAG_variable {
+               {DW_AT_name global_var}
+               {DW_AT_type :$int4_type}
+               {DW_AT_location {
+                   DW_OP_const1u 12
+                   DW_OP_stack_value
+               } SPECIAL_expr}
+           }
+       }
+    }
+}
+
+# Build main file.
+if { [build_executable "${testfile}.exp" $binfile \
+       [list ${srcfile} ${main_asm_file}] {nodebug}] } {
+    return
+}
+
+# Build DWO file.
+set dwo_file [standard_output_file ${testfile}.dwo]
+if { [gdb_compile_shlib $dwo_asm_file $dwo_file nodebug] != "" } {
+    return
+}
+
+if { [is_remote host] } {
+    gdb_remote_download host $dwo_file
+}
+
+clean_restart $binfile
+
+gdb_test "ptype global_var" "type = int"
index b347437e9faf03087b47c142f59dd433371163f9..4d224cdae75dae10e6ef869f0695c32ff194d720 100644 (file)
@@ -3398,9 +3398,24 @@ namespace eval Dwarf {
 
     # Add the strings in ARGS to the .debug_str section, and create a
     # .debug_str_offsets section pointing to those strings.
-    # BASE_OFFSET is the label for DW_AT_str_offsets_base.
-    proc debug_str_offsets { base_offset args } {
-       _section .debug_str
+    # Current options are:
+    # dwo 0|1 - boolean indicating if the sections have the dwo suffix.
+    #           default = 0 (no .dwo suffix)
+    # base_offset label
+    #         - generate label, to be used in DW_AT_str_offsets_base.
+    #           default = "" (don't generate a label).
+    proc debug_str_offsets { options args } {
+       parse_options {
+           { dwo 0 }
+           { base_offset "" }
+       }
+
+       if { $dwo } {
+           _section .debug_str.dwo
+       } else {
+           _section .debug_str
+       }
+
        set num 0
        foreach arg $args {
            set str_label [_compute_label "str_${num}"]
@@ -3412,12 +3427,18 @@ namespace eval Dwarf {
        declare_labels debug_str_offsets_start debug_str_offsets_end
        set initial_length "$debug_str_offsets_end - $debug_str_offsets_start"
 
-       _section .debug_str_offsets
+       if { $dwo } {
+           _section .debug_str_offsets.dwo
+       } else {
+           _section .debug_str_offsets
+       }
        _op .4byte $initial_length "Initial_length"
        debug_str_offsets_start:
        _op .2byte 0x5 "version"
        _op .2byte 0x0 "padding"
-       $base_offset:
+       if { $base_offset != "" } {
+           $base_offset:
+       }
        set num 0
        foreach arg $args {
            set str_label [_compute_label "str_${num}"]