From: Tom de Vries Date: Fri, 23 May 2025 16:38:20 +0000 (+0200) Subject: [gdb/testsuite] Add gdb.dwarf2/fission-dw-form-strx.exp X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8cfde4a0187376f9631b6b0cb90a258b33726ae0;p=thirdparty%2Fbinutils-gdb.git [gdb/testsuite] Add gdb.dwarf2/fission-dw-form-strx.exp Add a dwarf assembly test-case using a DW_FORM_strx in a .dwo file. Tested on x86_64-linux. Approved-By: Simon Marchi --- diff --git a/gdb/testsuite/gdb.dwarf2/dw-form-strx.exp.tcl b/gdb/testsuite/gdb.dwarf2/dw-form-strx.exp.tcl index d69b517f2e7..bc5a65482c3 100644 --- a/gdb/testsuite/gdb.dwarf2/dw-form-strx.exp.tcl +++ b/gdb/testsuite/gdb.dwarf2/dw-form-strx.exp.tcl @@ -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 index 00000000000..4f5867c28b5 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/fission-dw-form-strx.exp @@ -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 . + +# 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" diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp index b347437e9fa..4d224cdae75 100644 --- a/gdb/testsuite/lib/dwarf.exp +++ b/gdb/testsuite/lib/dwarf.exp @@ -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}"]