public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH][gdb/symtab] Support -readnow during reread
@ 2021-10-11 14:44 Tom de Vries
  2021-10-28  8:53 ` [PING][PATCH][gdb/symtab] " Tom de Vries
  0 siblings, 1 reply; 4+ messages in thread
From: Tom de Vries @ 2021-10-11 14:44 UTC (permalink / raw)
  To: gdb-patches

Hi,

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

Any comments?

Thanks,
- Tom

[gdb/symtab] Support -readnow during reread

---
 gdb/infcmd.c                                  |  4 ++--
 gdb/remote.c                                  |  2 +-
 gdb/symfile.c                                 | 17 +++++++++++++++--
 gdb/symtab.h                                  |  2 +-
 gdb/testsuite/gdb.ada/exec_changed.exp        |  8 --------
 gdb/testsuite/gdb.base/cached-source-file.exp | 18 +++++++++++-------
 gdb/testsuite/gdb.base/reread.exp             |  8 --------
 7 files changed, 30 insertions(+), 29 deletions(-)

diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index b55a56c020d..ee7f107ab1b 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -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 ();
@@ -2396,7 +2396,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.  */
diff --git a/gdb/remote.c b/gdb/remote.c
index d5eb40ce578..1fba8549ee4 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -5688,7 +5688,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 ());
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 9e5c2d48881..89469a3d3dc 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -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 ("");
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 61f20b25a7b..a9e01cc967c 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -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
diff --git a/gdb/testsuite/gdb.ada/exec_changed.exp b/gdb/testsuite/gdb.ada/exec_changed.exp
index 8cbc29f8fdd..d08e1ce1555 100644
--- a/gdb/testsuite/gdb.ada/exec_changed.exp
+++ b/gdb/testsuite/gdb.ada/exec_changed.exp
@@ -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"
diff --git a/gdb/testsuite/gdb.base/cached-source-file.exp b/gdb/testsuite/gdb.base/cached-source-file.exp
index 13965d93b65..3b0166aa18d 100644
--- a/gdb/testsuite/gdb.base/cached-source-file.exp
+++ b/gdb/testsuite/gdb.base/cached-source-file.exp
@@ -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.
diff --git a/gdb/testsuite/gdb.base/reread.exp b/gdb/testsuite/gdb.base/reread.exp
index 7ab30f2fde0..3d4b484182d 100644
--- a/gdb/testsuite/gdb.base/reread.exp
+++ b/gdb/testsuite/gdb.base/reread.exp
@@ -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"
 	}

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

* [PING][PATCH][gdb/symtab] Support -readnow during reread
  2021-10-11 14:44 [PATCH][gdb/symtab] Support -readnow during reread Tom de Vries
@ 2021-10-28  8:53 ` Tom de Vries
  2021-11-19 14:51   ` [PING^2][PATCH][gdb/symtab] " Tom de Vries
  0 siblings, 1 reply; 4+ messages in thread
From: Tom de Vries @ 2021-10-28  8:53 UTC (permalink / raw)
  To: gdb-patches

On 10/11/21 4:44 PM, Tom de Vries via Gdb-patches wrote:
> Hi,
> 
> 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
> 
> Any comments?
> 

Ping.

Thanks,
- Tom
> 
> [gdb/symtab] Support -readnow during reread
> 
> ---
>  gdb/infcmd.c                                  |  4 ++--
>  gdb/remote.c                                  |  2 +-
>  gdb/symfile.c                                 | 17 +++++++++++++++--
>  gdb/symtab.h                                  |  2 +-
>  gdb/testsuite/gdb.ada/exec_changed.exp        |  8 --------
>  gdb/testsuite/gdb.base/cached-source-file.exp | 18 +++++++++++-------
>  gdb/testsuite/gdb.base/reread.exp             |  8 --------
>  7 files changed, 30 insertions(+), 29 deletions(-)
> 
> diff --git a/gdb/infcmd.c b/gdb/infcmd.c
> index b55a56c020d..ee7f107ab1b 100644
> --- a/gdb/infcmd.c
> +++ b/gdb/infcmd.c
> @@ -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 ();
> @@ -2396,7 +2396,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.  */
> diff --git a/gdb/remote.c b/gdb/remote.c
> index d5eb40ce578..1fba8549ee4 100644
> --- a/gdb/remote.c
> +++ b/gdb/remote.c
> @@ -5688,7 +5688,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 ());
> diff --git a/gdb/symfile.c b/gdb/symfile.c
> index 9e5c2d48881..89469a3d3dc 100644
> --- a/gdb/symfile.c
> +++ b/gdb/symfile.c
> @@ -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 ("");
> diff --git a/gdb/symtab.h b/gdb/symtab.h
> index 61f20b25a7b..a9e01cc967c 100644
> --- a/gdb/symtab.h
> +++ b/gdb/symtab.h
> @@ -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
> diff --git a/gdb/testsuite/gdb.ada/exec_changed.exp b/gdb/testsuite/gdb.ada/exec_changed.exp
> index 8cbc29f8fdd..d08e1ce1555 100644
> --- a/gdb/testsuite/gdb.ada/exec_changed.exp
> +++ b/gdb/testsuite/gdb.ada/exec_changed.exp
> @@ -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"
> diff --git a/gdb/testsuite/gdb.base/cached-source-file.exp b/gdb/testsuite/gdb.base/cached-source-file.exp
> index 13965d93b65..3b0166aa18d 100644
> --- a/gdb/testsuite/gdb.base/cached-source-file.exp
> +++ b/gdb/testsuite/gdb.base/cached-source-file.exp
> @@ -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.
> diff --git a/gdb/testsuite/gdb.base/reread.exp b/gdb/testsuite/gdb.base/reread.exp
> index 7ab30f2fde0..3d4b484182d 100644
> --- a/gdb/testsuite/gdb.base/reread.exp
> +++ b/gdb/testsuite/gdb.base/reread.exp
> @@ -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"
>  	}
> 

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

* [PING^2][PATCH][gdb/symtab] Support -readnow during reread
  2021-10-28  8:53 ` [PING][PATCH][gdb/symtab] " Tom de Vries
@ 2021-11-19 14:51   ` Tom de Vries
  2021-12-07  6:52     ` [committed][gdb/symtab] " Tom de Vries
  0 siblings, 1 reply; 4+ messages in thread
From: Tom de Vries @ 2021-11-19 14:51 UTC (permalink / raw)
  To: gdb-patches

On 10/28/21 10:53 AM, Tom de Vries via Gdb-patches wrote:
> On 10/11/21 4:44 PM, Tom de Vries via Gdb-patches wrote:
>> Hi,
>>
>> 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
>>
>> Any comments?
>>
> 

Ping.

Thanks,
- Tom

>> [gdb/symtab] Support -readnow during reread
>>
>> ---
>>  gdb/infcmd.c                                  |  4 ++--
>>  gdb/remote.c                                  |  2 +-
>>  gdb/symfile.c                                 | 17 +++++++++++++++--
>>  gdb/symtab.h                                  |  2 +-
>>  gdb/testsuite/gdb.ada/exec_changed.exp        |  8 --------
>>  gdb/testsuite/gdb.base/cached-source-file.exp | 18 +++++++++++-------
>>  gdb/testsuite/gdb.base/reread.exp             |  8 --------
>>  7 files changed, 30 insertions(+), 29 deletions(-)
>>
>> diff --git a/gdb/infcmd.c b/gdb/infcmd.c
>> index b55a56c020d..ee7f107ab1b 100644
>> --- a/gdb/infcmd.c
>> +++ b/gdb/infcmd.c
>> @@ -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 ();
>> @@ -2396,7 +2396,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.  */
>> diff --git a/gdb/remote.c b/gdb/remote.c
>> index d5eb40ce578..1fba8549ee4 100644
>> --- a/gdb/remote.c
>> +++ b/gdb/remote.c
>> @@ -5688,7 +5688,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 ());
>> diff --git a/gdb/symfile.c b/gdb/symfile.c
>> index 9e5c2d48881..89469a3d3dc 100644
>> --- a/gdb/symfile.c
>> +++ b/gdb/symfile.c
>> @@ -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 ("");
>> diff --git a/gdb/symtab.h b/gdb/symtab.h
>> index 61f20b25a7b..a9e01cc967c 100644
>> --- a/gdb/symtab.h
>> +++ b/gdb/symtab.h
>> @@ -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
>> diff --git a/gdb/testsuite/gdb.ada/exec_changed.exp b/gdb/testsuite/gdb.ada/exec_changed.exp
>> index 8cbc29f8fdd..d08e1ce1555 100644
>> --- a/gdb/testsuite/gdb.ada/exec_changed.exp
>> +++ b/gdb/testsuite/gdb.ada/exec_changed.exp
>> @@ -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"
>> diff --git a/gdb/testsuite/gdb.base/cached-source-file.exp b/gdb/testsuite/gdb.base/cached-source-file.exp
>> index 13965d93b65..3b0166aa18d 100644
>> --- a/gdb/testsuite/gdb.base/cached-source-file.exp
>> +++ b/gdb/testsuite/gdb.base/cached-source-file.exp
>> @@ -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.
>> diff --git a/gdb/testsuite/gdb.base/reread.exp b/gdb/testsuite/gdb.base/reread.exp
>> index 7ab30f2fde0..3d4b484182d 100644
>> --- a/gdb/testsuite/gdb.base/reread.exp
>> +++ b/gdb/testsuite/gdb.base/reread.exp
>> @@ -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"
>>  	}
>>

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

* [committed][gdb/symtab] Support -readnow during reread
  2021-11-19 14:51   ` [PING^2][PATCH][gdb/symtab] " Tom de Vries
@ 2021-12-07  6:52     ` Tom de Vries
  0 siblings, 0 replies; 4+ messages in thread
From: Tom de Vries @ 2021-12-07  6:52 UTC (permalink / raw)
  To: gdb-patches

On 11/19/21 3:51 PM, Tom de Vries wrote:
> On 10/28/21 10:53 AM, Tom de Vries via Gdb-patches wrote:
>> On 10/11/21 4:44 PM, Tom de Vries via Gdb-patches wrote:
>>> Hi,
>>>
>>> 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
>>>
>>> Any comments?
>>>
>>
> 
> Ping.
> 

Committed.

Thanks,
- Tom

>>> [gdb/symtab] Support -readnow during reread
>>>
>>> ---
>>>  gdb/infcmd.c                                  |  4 ++--
>>>  gdb/remote.c                                  |  2 +-
>>>  gdb/symfile.c                                 | 17 +++++++++++++++--
>>>  gdb/symtab.h                                  |  2 +-
>>>  gdb/testsuite/gdb.ada/exec_changed.exp        |  8 --------
>>>  gdb/testsuite/gdb.base/cached-source-file.exp | 18 +++++++++++-------
>>>  gdb/testsuite/gdb.base/reread.exp             |  8 --------
>>>  7 files changed, 30 insertions(+), 29 deletions(-)
>>>
>>> diff --git a/gdb/infcmd.c b/gdb/infcmd.c
>>> index b55a56c020d..ee7f107ab1b 100644
>>> --- a/gdb/infcmd.c
>>> +++ b/gdb/infcmd.c
>>> @@ -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 ();
>>> @@ -2396,7 +2396,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.  */
>>> diff --git a/gdb/remote.c b/gdb/remote.c
>>> index d5eb40ce578..1fba8549ee4 100644
>>> --- a/gdb/remote.c
>>> +++ b/gdb/remote.c
>>> @@ -5688,7 +5688,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 ());
>>> diff --git a/gdb/symfile.c b/gdb/symfile.c
>>> index 9e5c2d48881..89469a3d3dc 100644
>>> --- a/gdb/symfile.c
>>> +++ b/gdb/symfile.c
>>> @@ -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 ("");
>>> diff --git a/gdb/symtab.h b/gdb/symtab.h
>>> index 61f20b25a7b..a9e01cc967c 100644
>>> --- a/gdb/symtab.h
>>> +++ b/gdb/symtab.h
>>> @@ -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
>>> diff --git a/gdb/testsuite/gdb.ada/exec_changed.exp b/gdb/testsuite/gdb.ada/exec_changed.exp
>>> index 8cbc29f8fdd..d08e1ce1555 100644
>>> --- a/gdb/testsuite/gdb.ada/exec_changed.exp
>>> +++ b/gdb/testsuite/gdb.ada/exec_changed.exp
>>> @@ -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"
>>> diff --git a/gdb/testsuite/gdb.base/cached-source-file.exp b/gdb/testsuite/gdb.base/cached-source-file.exp
>>> index 13965d93b65..3b0166aa18d 100644
>>> --- a/gdb/testsuite/gdb.base/cached-source-file.exp
>>> +++ b/gdb/testsuite/gdb.base/cached-source-file.exp
>>> @@ -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.
>>> diff --git a/gdb/testsuite/gdb.base/reread.exp b/gdb/testsuite/gdb.base/reread.exp
>>> index 7ab30f2fde0..3d4b484182d 100644
>>> --- a/gdb/testsuite/gdb.base/reread.exp
>>> +++ b/gdb/testsuite/gdb.base/reread.exp
>>> @@ -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"
>>>  	}
>>>

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

end of thread, other threads:[~2021-12-07  6:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-11 14:44 [PATCH][gdb/symtab] Support -readnow during reread Tom de Vries
2021-10-28  8:53 ` [PING][PATCH][gdb/symtab] " Tom de Vries
2021-11-19 14:51   ` [PING^2][PATCH][gdb/symtab] " Tom de Vries
2021-12-07  6:52     ` [committed][gdb/symtab] " Tom de Vries

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).