mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 01:07:52 +00:00
[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 <simon.marchi@efficios.com>
This commit is contained in:
@@ -24,15 +24,15 @@ set asm_file [standard_output_file $srcfile2]
|
|||||||
|
|
||||||
# Debug info in the main file.
|
# Debug info in the main file.
|
||||||
Dwarf::assemble $asm_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 {
|
cu {
|
||||||
version 5
|
version 5
|
||||||
} {
|
} {
|
||||||
DW_TAG_compile_unit {
|
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
|
declare_labels int4_type
|
||||||
|
|
||||||
|
|||||||
88
gdb/testsuite/gdb.dwarf2/fission-dw-form-strx.exp
Normal file
88
gdb/testsuite/gdb.dwarf2/fission-dw-form-strx.exp
Normal file
@@ -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"
|
||||||
@@ -3398,9 +3398,24 @@ namespace eval Dwarf {
|
|||||||
|
|
||||||
# Add the strings in ARGS to the .debug_str section, and create a
|
# Add the strings in ARGS to the .debug_str section, and create a
|
||||||
# .debug_str_offsets section pointing to those strings.
|
# .debug_str_offsets section pointing to those strings.
|
||||||
# BASE_OFFSET is the label for DW_AT_str_offsets_base.
|
# Current options are:
|
||||||
proc debug_str_offsets { base_offset args } {
|
# dwo 0|1 - boolean indicating if the sections have the dwo suffix.
|
||||||
_section .debug_str
|
# 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
|
set num 0
|
||||||
foreach arg $args {
|
foreach arg $args {
|
||||||
set str_label [_compute_label "str_${num}"]
|
set str_label [_compute_label "str_${num}"]
|
||||||
@@ -3412,12 +3427,18 @@ namespace eval Dwarf {
|
|||||||
declare_labels debug_str_offsets_start debug_str_offsets_end
|
declare_labels debug_str_offsets_start debug_str_offsets_end
|
||||||
set initial_length "$debug_str_offsets_end - $debug_str_offsets_start"
|
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"
|
_op .4byte $initial_length "Initial_length"
|
||||||
debug_str_offsets_start:
|
debug_str_offsets_start:
|
||||||
_op .2byte 0x5 "version"
|
_op .2byte 0x5 "version"
|
||||||
_op .2byte 0x0 "padding"
|
_op .2byte 0x0 "padding"
|
||||||
$base_offset:
|
if { $base_offset != "" } {
|
||||||
|
$base_offset:
|
||||||
|
}
|
||||||
set num 0
|
set num 0
|
||||||
foreach arg $args {
|
foreach arg $args {
|
||||||
set str_label [_compute_label "str_${num}"]
|
set str_label [_compute_label "str_${num}"]
|
||||||
|
|||||||
Reference in New Issue
Block a user