[gdb/symtab] Support -readnow during reread
authorTom de Vries <tdevries@suse.de>
Tue, 7 Dec 2021 06:51:25 +0000 (07:51 +0100)
committerTom de Vries <tdevries@suse.de>
Tue, 7 Dec 2021 06:51:25 +0000 (07:51 +0100)
When running test-case gdb.base/cached-source-file.exp with target board
readnow, we run into:
...
FAIL: gdb.base/cached-source-file.exp: rerun program (the program exited)
...

The problem is that when rereading, the readnow is ignored.

Fix this by copying the readnow handling code from symbol_file_add_with_addrs
to reread_symbols.

Tested on x86_64-linux.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26800

gdb/infcmd.c
gdb/remote.c
gdb/symfile.c
gdb/symtab.h
gdb/testsuite/gdb.ada/exec_changed.exp
gdb/testsuite/gdb.base/cached-source-file.exp
gdb/testsuite/gdb.base/reread.exp

index 984ce4e042ba0d782979a6181a307b02aef3f392..a3752cc92852abf2c5997a47685ba8f8a53b05f1 100644 (file)
@@ -395,7 +395,7 @@ run_command_1 (const char *args, int from_tty, enum run_how run_how)
      to check again here.  Since reopen_exec_file doesn't do anything
      if the timestamp hasn't changed, I don't see the harm.  */
   reopen_exec_file ();
-  reread_symbols ();
+  reread_symbols (from_tty);
 
   gdb::unique_xmalloc_ptr<char> stripped = strip_bg_char (args, &async_exec);
   args = stripped.get ();
@@ -2399,7 +2399,7 @@ setup_inferior (int from_tty)
   else
     {
       reopen_exec_file ();
-      reread_symbols ();
+      reread_symbols (from_tty);
     }
 
   /* Take any necessary post-attaching actions for this platform.  */
index ebbc138b40578e3cd667d91d7f7bd4b70808ba9c..7ed9330ce39f4311e6b72701cf7372b4816e6471 100644 (file)
@@ -5718,7 +5718,7 @@ remote_target::open_1 (const char *name, int from_tty, int extended_p)
 
   remote_fileio_reset ();
   reopen_exec_file ();
-  reread_symbols ();
+  reread_symbols (from_tty);
 
   remote_target *remote
     = (extended_p ? new extended_remote_target () : new remote_target ());
index 9e5c2d488812967b8541e1115039cd93dd104d13..89469a3d3dcdee05c385794fc3fa7adb7ba64cfa 100644 (file)
@@ -1797,7 +1797,7 @@ load_command (const char *arg, int from_tty)
   /* The user might be reloading because the binary has changed.  Take
      this opportunity to check.  */
   reopen_exec_file ();
-  reread_symbols ();
+  reread_symbols (from_tty);
 
   std::string temp;
   if (arg == NULL)
@@ -2411,7 +2411,7 @@ remove_symbol_file_command (const char *args, int from_tty)
 /* Re-read symbols if a symbol-file has changed.  */
 
 void
-reread_symbols (void)
+reread_symbols (int from_tty)
 {
   long new_modtime;
   struct stat new_statbuf;
@@ -2588,6 +2588,19 @@ reread_symbols (void)
 
          read_symbols (objfile, 0);
 
+         if ((objfile->flags & OBJF_READNOW))
+           {
+             const int mainline = objfile->flags & OBJF_MAINLINE;
+             const int should_print = (print_symbol_loading_p (from_tty, mainline, 1)
+                                       && readnow_symbol_files);
+             if (should_print)
+               printf_filtered (_("Expanding full symbols from %ps...\n"),
+                                styled_string (file_name_style.style (),
+                                               objfile_name (objfile)));
+
+             objfile->expand_all_symtabs ();
+           }
+
          if (!objfile_has_symbols (objfile))
            {
              wrap_here ("");
index 61f20b25a7bd642fe13e465bab4823ce70aecf11..a9e01cc967c786ad1359f6de7689c4b7e787bb13 100644 (file)
@@ -1847,7 +1847,7 @@ extern struct compunit_symtab *
 
 extern bool find_pc_line_pc_range (CORE_ADDR, CORE_ADDR *, CORE_ADDR *);
 
-extern void reread_symbols (void);
+extern void reread_symbols (int from_tty);
 
 /* Look up a type named NAME in STRUCT_DOMAIN in the current language.
    The type returned must not be opaque -- i.e., must have at least one field
index 8cbc29f8fddb65f3b2c49c67ec864ce8e99d1449..d08e1ce1555d59016bef78034954f324e1f61462 100644 (file)
@@ -51,8 +51,6 @@ gdb_reinitialize_dir $srcdir/$subdir
 gdb_test "shell mv ${binfile} ${common_binfile}" ".*" ""
 gdb_load ${common_binfile}
 
-set readnow_p [readnow ${common_binfile}]
-
 # Start the program, we should land in the program main procedure
 if { [gdb_start_cmd] < 0 } {
     untested start
@@ -78,9 +76,6 @@ gdb_test "shell touch ${common_binfile}" ".*" ""
 if { [gdb_start_cmd] < 0 } {
     fail "start second"
 } else {
-    if { $readnow_p } {
-       setup_kfail "gdb/26800" *-*-*
-    }
     gdb_test "" \
              "second \\(\\) at .*second.adb.*" \
              "start second"
@@ -108,9 +103,6 @@ if { [gdb_start_cmd] < 0 } {
     gdb_test_no_output "set \$check_gdb_running = 0" "check gdb running"
     fail "start just first"
 } else {
-    if { $readnow_p } {
-       setup_kfail "gdb/26800" *-*-*
-    }
     gdb_test "" \
        "first \\(\\) at .*first.adb.*" \
        "start just first"
index 13965d93b65776b5f33b8dabe707447750ee4237..3b0166aa18dad0a5f010a5c20c1195dfd77512aa 100644 (file)
@@ -84,13 +84,17 @@ if { [gdb_compile "${srcfile}" "${binfile}" executable {debug}] != "" } {
 # Rerun the program.  This should not only force GDB to reload the
 # source cache, but also to break at BP_LINE again, which now has
 # different contents.
-gdb_test_multiple "run" "rerun program" {
-    -re {The program being debugged has been started already\.\r\nStart it from the beginning\? \(y or n\) $} {
-       set binregex [string_to_regexp $binfile]
-       gdb_test "y" "\\`$binregex\\' has changed; re-reading symbols\.\r\nStarting program: ${binregex}.*" \
-           "rerun program"
-    }
-}
+set q \
+    [multi_line \
+        "The program being debugged has been started already\\." \
+        "Start it from the beginning\\? \\(y or n\\) "]
+set binregex [string_to_regexp $binfile]
+set re \
+    [multi_line \
+        "\\`$binregex\\' has changed; re-reading symbols\\.(" \
+        "Expanding full symbols from $binfile\\.\\.\\.)?" \
+        "Starting program: ${binregex}.*"]
+gdb_test "run" $re "rerun program" $q y
 
 # Again, perform the listing and check that the line indeed has
 # changed for GDB.
index 7ab30f2fde032b083b6fd8a2f2660ce2ff0169dd..3d4b484182d4e5c3e690644ed281263f16957090 100644 (file)
@@ -60,8 +60,6 @@ foreach_with_prefix opts { "" "pie" } {
        gdb_rename_execfile ${binfile1} ${binfile}
        gdb_load ${binfile}
 
-       set readnow_p [readnow ${binfile}]
-       
        # Set a breakpoint at foo
 
        gdb_test "break foo" \
@@ -92,9 +90,6 @@ foreach_with_prefix opts { "" "pie" } {
            unsupported $test
        } else {
            gdb_run_cmd
-           if { $readnow_p } {
-               setup_kfail "gdb/26800" *-*-*
-           }
            gdb_test "" "Breakpoint.* foo .* at .*:9.*" $test
        }
 
@@ -131,9 +126,6 @@ foreach_with_prefix opts { "" "pie" } {
            gdb_rename_execfile ${binfile} ${binfile1}
            gdb_rename_execfile ${binfile2} ${binfile}
            gdb_run_cmd
-           if { $readnow_p } {
-               setup_kfail "gdb/26800" *-*-*
-           }
            gdb_test "" "Breakpoint.* foo .* at .*:9.*" \
                "second pass: run to foo() second time"
        }