Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH][gdb/symtab] Handle DW_AT_ranges with DW_FORM_sec_off in partial DIE
@ 2021-01-25 12:24 Tom de Vries
  2021-01-25 12:52 ` Bernd Edlinger
  0 siblings, 1 reply; 12+ messages in thread
From: Tom de Vries @ 2021-01-25 12:24 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

Hi,

While looking into a failure in gdb.go/package.exp with gcc-11, I noticed that
gdb shows some complaints when loading the executable (also with gcc-10, where
the test-case passes):
...
$ gdb -batch -iex "set complaints 100" package.10 -ex start
During symbol reading: Attribute value is not a constant (DW_FORM_sec_offset)
Temporary breakpoint 1 at 0x402ae6: file gdb.go/package1.go, line 8.
During symbol reading: Attribute value is not a constant (DW_FORM_sec_offset)
During symbol reading: Invalid .debug_rnglists data (no base address)
...

Fix this by using as_unsigned () to read DW_AT_ranges in the partial DIE
reader, similar to how that is done in dwarf2_get_pc_bounds.

Tested on x86_64-linux.

Any comments?

Thanks,
- Tom

[gdb/symtab] Handle DW_AT_ranges with DW_FORM_sec_off in partial DIE

gdb/ChangeLog:

2021-01-25  Tom de Vries  <tdevries@suse.de>

	* dwarf2/read.c (partial_die_info::read): Use as_unsigned () for
	DW_AT_ranges.

gdb/testsuite/ChangeLog:

2021-01-25  Tom de Vries  <tdevries@suse.de>

	* gdb.dwarf2/dw2-ranges-psym.exp (gdb_load_no_complaints): New proc.
	* lib/gdb.exp: Use gdb_load_no_complaints.

---
 gdb/dwarf2/read.c                            |  2 +-
 gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp |  5 +++-
 gdb/testsuite/lib/gdb.exp                    | 36 ++++++++++++++++++++++++++++
 3 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 309ff8331e7..5191d697ec7 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -19810,7 +19810,7 @@ partial_die_info::read (const struct die_reader_specs *reader,
 	    /* It would be nice to reuse dwarf2_get_pc_bounds here,
 	       but that requires a full DIE, so instead we just
 	       reimplement it.  */
-	    unsigned int ranges_offset = (attr.constant_value (0)
+	    unsigned int ranges_offset = (attr.as_unsigned ()
 					  + (need_ranges_base
 					     ? cu->ranges_base
 					     : 0));
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp b/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp
index 72966aff820..3ad2d1c567c 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp
@@ -120,11 +120,14 @@ Dwarf::assemble $asm_file {
     }
 }
 
-if { [prepare_for_testing "failed to prepare" ${testfile} \
+if { [build_executable "failed to prepare" ${testfile} \
 	  [list $srcfile $srcfile2 $asm_file] {nodebug}] } {
     return -1
 }
 
+clean_restart
+gdb_load_no_complaints $binfile
+
 if ![runto_main] {
     return -1
 }
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 03653ab1a7f..2a952c6146f 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -5095,6 +5095,42 @@ proc gdb_load { arg } {
     return 0
 }
 
+#
+# gdb_load_no_complaints -- As gdb_load, but in addition verifies that
+# loading caused no symbol reading complaints.
+#
+proc gdb_load_no_complaints { arg } {
+    global gdb_prompt gdb_file_cmd_msg decimal
+
+    # Save current setting of complaints.
+    set save ""
+    set show_complaints_re \
+	"Max number of complaints about incorrect symbols is ($decimal)\\."
+    gdb_test_multiple "show complaints" "" {
+	-re -wrap $show_complaints_re {
+	    set save $expect_out(1,string)
+	}
+    }
+
+    # Fall back to regular gdb_load if we couldn't get the current setting
+    # of complaints.
+    if { $save == "" } {
+	return gdb_load $arg
+    }
+
+    # Temporarily set complaint to a small non-zero number.
+    gdb_test_no_output "set complaints 5" ""
+
+    gdb_load $arg
+
+    # Verify that there were no complaints.
+    set re "^Reading symbols from \[^\r\n\]*\r\n$gdb_prompt $"
+    gdb_assert {[regexp $re $gdb_file_cmd_msg]} "No complaints"
+
+    # Restore saved setting of complaints.
+    gdb_test_no_output "set complaints $save" ""
+}
+
 # gdb_reload -- load a file into the target.  Called before "running",
 # either the first time or after already starting the program once,
 # for remote targets.  Most files that override gdb_load should now

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-01-26  7:47 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-25 12:24 [PATCH][gdb/symtab] Handle DW_AT_ranges with DW_FORM_sec_off in partial DIE Tom de Vries
2021-01-25 12:52 ` Bernd Edlinger
2021-01-25 15:27   ` Simon Marchi via Gdb-patches
2021-01-25 15:37     ` Tom de Vries
2021-01-25 15:47       ` Bernd Edlinger
2021-01-25 16:36         ` Simon Marchi via Gdb-patches
2021-01-25 17:42           ` Bernd Edlinger
2021-01-25 18:12             ` Simon Marchi via Gdb-patches
2021-01-25 18:53               ` Bernd Edlinger
2021-01-25 19:20                 ` Bernd Edlinger
2021-01-26  1:52                 ` Simon Marchi via Gdb-patches
2021-01-26  7:47                   ` Bernd Edlinger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox