[binutils-gdb] gdb: make "maintenance info line-table" show relocated addresses again

Simon Marchi simark@sourceware.org
Wed Mar 22 01:33:13 GMT 2023


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

commit 904d9b02a185c9048cf17bf7295b89d7380cea3d
Author: Simon Marchi <simon.marchi@efficios.com>
Date:   Thu Mar 16 16:30:34 2023 -0400

    gdb: make "maintenance info line-table" show relocated addresses again
    
    Commit 1acc9dca423f ("Change linetables to be objfile-independent")
    changed "maintenance info line-table" to print unrelocated addresses
    instead of relocated.  This breaks a few tests on systems where that
    matters.  The ones I see are:
    
        Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.base/consecutive.exp ...
        FAIL: gdb.base/consecutive.exp: stopped at bp, 2nd instr (missing hex prefix)
        Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.base/async.exp ...
        FAIL: gdb.base/async.exp: stepi&
        FAIL: gdb.base/async.exp: nexti&
        FAIL: gdb.base/async.exp: finish&
    
    These tests run "maintenance info line-table" to record the address of
    some lines, and then use these addresses in expected patterns.  It
    therefore expects these addresses to match the runtime addresses,
    therefore the relocated addresses.
    
    Add back the relocated addresses, next to the unrelocated addresses,
    like so:
    
        INDEX  LINE   REL-ADDRESS        UNREL-ADDRESS      IS-STMT PROLOGUE-END
        0      6      0x0000555555555119 0x0000000000001119 Y
        1      7      0x000055555555511d 0x000000000000111d Y
        2      8      0x0000555555555123 0x0000000000001123 Y
        3      END    0x0000555555555125 0x0000000000001125 Y
    
    The unrelocated addresses can always be useful trying to map this
    information with a DWARF info dump.
    
    Adjust the is_stmt_addresses proc in the testsuite to match the new
    output.
    
    Change-Id: I59558f167e13e63421c9e0f2cad192e7c95c10cf

Diff:
---
 gdb/symmisc.c             | 9 ++++++---
 gdb/testsuite/lib/gdb.exp | 2 +-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 54dc570d282..a09b541f1b3 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -976,10 +976,11 @@ maintenance_print_one_line_table (struct symtab *symtab, void *data)
       /* Leave space for 6 digits of index and line number.  After that the
 	 tables will just not format as well.  */
       struct ui_out *uiout = current_uiout;
-      ui_out_emit_table table_emitter (uiout, 5, -1, "line-table");
+      ui_out_emit_table table_emitter (uiout, 6, -1, "line-table");
       uiout->table_header (6, ui_left, "index", _("INDEX"));
       uiout->table_header (6, ui_left, "line", _("LINE"));
-      uiout->table_header (18, ui_left, "address", _("ADDRESS"));
+      uiout->table_header (18, ui_left, "rel-address", _("REL-ADDRESS"));
+      uiout->table_header (18, ui_left, "unrel-address", _("UNREL-ADDRESS"));
       uiout->table_header (7, ui_left, "is-stmt", _("IS-STMT"));
       uiout->table_header (12, ui_left, "prologue-end", _("PROLOGUE-END"));
       uiout->table_body ();
@@ -995,7 +996,9 @@ maintenance_print_one_line_table (struct symtab *symtab, void *data)
 	    uiout->field_signed ("line", item->line);
 	  else
 	    uiout->field_string ("line", _("END"));
-	  uiout->field_core_addr ("address", objfile->arch (),
+	  uiout->field_core_addr ("rel-address", objfile->arch (),
+				  item->pc (objfile));
+	  uiout->field_core_addr ("unrel-address", objfile->arch (),
 				  CORE_ADDR (item->raw_pc ()));
 	  uiout->field_string ("is-stmt", item->is_stmt ? "Y" : "");
 	  uiout->field_string ("prologue-end", item->prologue_end ? "Y" : "");
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 0a0ae697d1e..6c2d7e1c74e 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -8872,7 +8872,7 @@ proc is_stmt_addresses { file } {
     set is_stmt [list]
 
     gdb_test_multiple "maint info line-table $file" "" {
-	-re "\r\n$decimal\[ \t\]+$decimal\[ \t\]+($hex)\[ \t\]+Y\[^\r\n\]*" {
+	-re "\r\n$decimal\[ \t\]+$decimal\[ \t\]+($hex)\[ \t\]+$hex\[ \t\]+Y\[^\r\n\]*" {
 	    lappend is_stmt $expect_out(1,string)
 	    exp_continue
 	}


More information about the Gdb-cvs mailing list