mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 17:18:24 +08:00
gdb/testsuite/dwarf: don't automatically add directory and file entry for DWARF 5
To support DWARF 5 in the DWARF assembler line tables, we currently copy the first user-provided directory and the first user-provided files and make them elements at indices 0 in the directory and file name tables. That was a sufficient behavior at the time (see commit 44fda089397a ("[gdb/testsuite] Support .debug_line v5 in dwarf assembler")), but in the following patches, I would need to have finer grained control on what is generated exactly. For example, I'd like to generate a DWARF 5 line table with just a single file and a single directory. Get rid of this behavior, and implement what is suggested in 44fda089397a: make include_dir return the directory index that can be used to refer to that directory entry (based on the DWARF version), and use it afterwards. Adjust dw2-lines.exp and dw2-prologue-end.exp accordingly. Their produced DWARF5 binaries will change a bit, in that they will now have a single directory and file, where they had two before. But it doesn't change the expected GDB behavior. Change-Id: I5459b16ac9b7f28c34c9693c35c9afd2ebb3aa3b
This commit is contained in:

committed by
Simon Marchi

parent
56325e2ba6
commit
9a0de6abdd
@ -79,10 +79,15 @@ proc test_1 { _cv _cdw64 _lv _ldw64 {_string_form ""}} {
|
||||
}
|
||||
|
||||
lines [list version $lv is_64 $ldw64 string_form $string_form] Llines {
|
||||
include_dir "${srcdir}/${subdir}"
|
||||
file_name "$srcfile" 1
|
||||
set diridx [include_dir "${srcdir}/${subdir}"]
|
||||
file_name "$srcfile" $diridx
|
||||
|
||||
program {
|
||||
# If using DWARF 5, we want to refer to file 0, but the LNP
|
||||
# state machine is still initialized with file 1. So we need
|
||||
# to set the current file explicitly.
|
||||
DW_LNS_set_file $diridx
|
||||
|
||||
DW_LNE_set_address bar_label
|
||||
line [line_for bar_label]
|
||||
DW_LNS_copy
|
||||
|
@ -48,10 +48,11 @@ Dwarf::assemble $asm_file {
|
||||
}
|
||||
|
||||
lines {version 5} lines_label {
|
||||
include_dir "${srcdir}/${subdir}"
|
||||
file_name "$srcfile" 1
|
||||
set diridx [include_dir "${srcdir}/${subdir}"]
|
||||
file_name "$srcfile" $diridx
|
||||
|
||||
program {
|
||||
DW_LNS_set_file $diridx
|
||||
DW_LNE_set_address $main_start
|
||||
line [gdb_get_line_number "main prologue"]
|
||||
DW_LNS_copy
|
||||
|
@ -2277,14 +2277,32 @@ namespace eval Dwarf {
|
||||
_op .byte 1 "standard opcode 9"
|
||||
_op .byte 0 "standard opcode 10"
|
||||
|
||||
# Add a directory entry to the line table header's directory table.
|
||||
#
|
||||
# Return the index by which this entry can be referred to.
|
||||
proc include_dir {dirname} {
|
||||
variable _line_include_dirs
|
||||
lappend _line_include_dirs $dirname
|
||||
|
||||
if { $Dwarf::_line_unit_version >= 5 } {
|
||||
return [expr [llength $_line_include_dirs] - 1]
|
||||
} else {
|
||||
return [llength $_line_include_dirs]
|
||||
}
|
||||
}
|
||||
|
||||
# Add a file name entry to the line table header's file names table.
|
||||
#
|
||||
# Return the index by which this entry can be referred to.
|
||||
proc file_name {filename diridx} {
|
||||
variable _line_file_names
|
||||
lappend _line_file_names $filename $diridx
|
||||
|
||||
if { $Dwarf::_line_unit_version >= 5 } {
|
||||
return [expr [llength $_line_file_names] - 1]
|
||||
} else {
|
||||
return [llength $_line_file_names]
|
||||
}
|
||||
}
|
||||
|
||||
proc _line_finalize_header {} {
|
||||
@ -2316,15 +2334,8 @@ namespace eval Dwarf {
|
||||
}
|
||||
|
||||
set nr_dirs [llength $_line_include_dirs]
|
||||
# For entry 0.
|
||||
set nr_dirs [expr $nr_dirs + 1]
|
||||
_op .byte $nr_dirs "directory_count"
|
||||
|
||||
# Entry 0.
|
||||
set dirname [lindex $_line_include_dirs 0]
|
||||
set _line_include_dirs \
|
||||
[concat [list $dirname] $_line_include_dirs]
|
||||
|
||||
foreach dirname $_line_include_dirs {
|
||||
switch $_line_string_form {
|
||||
string {
|
||||
@ -2360,16 +2371,8 @@ namespace eval Dwarf {
|
||||
"file_name_entry_format (form: DW_FORM_udata)"
|
||||
|
||||
set nr_files [expr [llength $_line_file_names] / 2]
|
||||
# For entry 0.
|
||||
set nr_files [expr $nr_files + 1]
|
||||
_op .byte $nr_files "file_names_count"
|
||||
|
||||
# Entry 0.
|
||||
set filename [lindex $_line_file_names 0]
|
||||
set diridx [lindex $_line_file_names 1]
|
||||
set _line_file_names \
|
||||
[concat [list $filename $diridx] $_line_file_names]
|
||||
|
||||
foreach { filename diridx } $_line_file_names {
|
||||
switch $_line_string_form {
|
||||
string {
|
||||
|
Reference in New Issue
Block a user