public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdb/testsuite/dwarf: don't automatically add directory and file entry for DWARF 5
@ 2022-04-18 20:59 Simon Marchi
  0 siblings, 0 replies; only message in thread
From: Simon Marchi @ 2022-04-18 20:59 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9a0de6abdd1af5a4eaafb44d7cda6ad60a4b6485

commit 9a0de6abdd1af5a4eaafb44d7cda6ad60a4b6485
Author: Simon Marchi <simon.marchi@efficios.com>
Date:   Wed Apr 6 21:51:56 2022 -0400

    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

Diff:
---
 gdb/testsuite/gdb.dwarf2/dw2-lines.exp        |  9 ++++++--
 gdb/testsuite/gdb.dwarf2/dw2-prologue-end.exp |  5 ++--
 gdb/testsuite/lib/dwarf.exp                   | 33 +++++++++++++++------------
 3 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/gdb/testsuite/gdb.dwarf2/dw2-lines.exp b/gdb/testsuite/gdb.dwarf2/dw2-lines.exp
index 3cbbd28fd48..b24eec0c8d2 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-lines.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-lines.exp
@@ -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
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-prologue-end.exp b/gdb/testsuite/gdb.dwarf2/dw2-prologue-end.exp
index 7fd1bd78132..9ce97fc1f26 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-prologue-end.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-prologue-end.exp
@@ -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
diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp
index 9c92115fd00..55e97c33a6e 100644
--- a/gdb/testsuite/lib/dwarf.exp
+++ b/gdb/testsuite/lib/dwarf.exp
@@ -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 {


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-04-18 20:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-18 20:59 [binutils-gdb] gdb/testsuite/dwarf: don't automatically add directory and file entry for DWARF 5 Simon Marchi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).