mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-26 19:44:11 +08:00
[gdb/symtab] Support -readnow during reread
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
This commit is contained in:
parent
af5300fe24
commit
9dec38d3b1
@ -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. */
|
||||
|
@ -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 ());
|
||||
|
@ -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 ("");
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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.
|
||||
|
@ -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"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user