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