mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
* infcmd.c (run_command): Check that the `exec' target layer's BFD
is up-to-date before running the program, not just when a program exits. * testsuite/gdb.base/reread.exp: Check that GDB properly re-reads the executable file when it changes while no inferior is running.
This commit is contained in:
parent
58255df39c
commit
39ad761d6d
@ -1,3 +1,9 @@
|
||||
2002-01-21 Jim Blandy <jimb@redhat.com>
|
||||
|
||||
* infcmd.c (run_command): Check that the `exec' target layer's BFD
|
||||
is up-to-date before running the program, not just when a program
|
||||
exits.
|
||||
|
||||
2002-01-21 Fred Fish <fnf@redhat.com>
|
||||
|
||||
* arm-tdep.c (thumb_skip_prologue): Quit scanning prologue
|
||||
|
14
gdb/infcmd.c
14
gdb/infcmd.c
@ -389,17 +389,23 @@ Start it from the beginning? "))
|
||||
|
||||
clear_breakpoint_hit_counts ();
|
||||
|
||||
exec_file = (char *) get_exec_file (0);
|
||||
|
||||
/* Purge old solib objfiles. */
|
||||
objfile_purge_solibs ();
|
||||
|
||||
do_run_cleanups (NULL);
|
||||
|
||||
/* The exec file is re-read every time we do a generic_mourn_inferior, so
|
||||
we just have to worry about the symbol file. */
|
||||
/* The comment here used to read, "The exec file is re-read every
|
||||
time we do a generic_mourn_inferior, so we just have to worry
|
||||
about the symbol file." The `generic_mourn_inferior' function
|
||||
gets called whenever the program exits. However, suppose the
|
||||
program exits, and *then* the executable file changes? We need
|
||||
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 ();
|
||||
|
||||
exec_file = (char *) get_exec_file (0);
|
||||
|
||||
/* We keep symbols from add-symbol-file, on the grounds that the
|
||||
user might want to add some symbols before running the program
|
||||
(right?). But sometimes (dynamic loading where the user manually
|
||||
|
@ -1,3 +1,8 @@
|
||||
2002-01-21 Jim Blandy <jimb@redhat.com>
|
||||
|
||||
* gdb.base/reread.exp: Check that GDB properly re-reads the
|
||||
executable file when it changes while no inferior is running.
|
||||
|
||||
2002-01-21 Fred Fish <fnf@redhat.com>
|
||||
|
||||
* gdb.base/maint.exp: Simplify the "maint info breakpoints" test to
|
||||
|
@ -87,7 +87,7 @@ gdb_expect {
|
||||
|
||||
# Restore first executable to its original name, and move
|
||||
# second executable into its place. Ensure that the new
|
||||
# executable is at least a second older than the old.
|
||||
# executable is at least a second newer than the old.
|
||||
|
||||
gdb_test "shell mv ${binfile} ${binfile1}" "" ""
|
||||
gdb_test "shell mv ${binfile2} ${binfile}" "" ""
|
||||
@ -98,6 +98,8 @@ gdb_test "shell touch ${binfile}" "" ""
|
||||
# and reset the breakpoints correctly.
|
||||
# Should see "Breakpoint 1, foo () at reread2.c:9"
|
||||
|
||||
set prms_id 0
|
||||
|
||||
if ![isnative] {
|
||||
unsupported "run to foo() second time ";
|
||||
} else {
|
||||
@ -118,6 +120,68 @@ if ![isnative] {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
### Second pass: verify that GDB checks the executable file's
|
||||
### timestamp when the program is *restarted*, not just when it exits.
|
||||
|
||||
if ![isnative] {
|
||||
unsupported "second pass: GDB should check for changes before running"
|
||||
} else {
|
||||
|
||||
# Put the older executable back in place.
|
||||
gdb_test "shell mv ${binfile} ${binfile2}" "" ""
|
||||
gdb_test "shell mv ${binfile1} ${binfile}" "" ""
|
||||
|
||||
# Restart GDB entirely.
|
||||
gdb_start
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
|
||||
# Set a breakpoint on foo and run to it.
|
||||
gdb_test "break foo" \
|
||||
"Breakpoint.*at.* file .*$srcfile1, line 14.*" \
|
||||
"second pass: breakpoint foo in first file"
|
||||
gdb_run_cmd
|
||||
gdb_expect {
|
||||
-re ".*Breakpoint.* foo .* at .*$srcfile1:14.*$gdb_prompt $" {
|
||||
pass "second pass: run to foo()";
|
||||
}
|
||||
-re ".*$gdb_prompt $" {
|
||||
fail "second pass: run to foo()";
|
||||
gdb_suppress_tests;
|
||||
}
|
||||
timeout {
|
||||
fail "second pass: run to foo() (timeout)"
|
||||
gdb_suppress_tests
|
||||
}
|
||||
}
|
||||
|
||||
# This time, let the program run to completion. If GDB checks the
|
||||
# executable file's timestamp now, it won't notice any change.
|
||||
gdb_test "continue" ".*Program exited.*" \
|
||||
"second pass: continue to completion"
|
||||
|
||||
# Now move the newer executable into place, and re-run. GDB
|
||||
# should still notice that the executable file has changed,
|
||||
# and still re-set the breakpoint appropriately.
|
||||
gdb_test "shell mv ${binfile} ${binfile1}" "" ""
|
||||
gdb_test "shell mv ${binfile2} ${binfile}" "" ""
|
||||
gdb_run_cmd
|
||||
gdb_expect {
|
||||
-re ".*Breakpoint.* foo .* at .*:9.*$gdb_prompt $" {
|
||||
pass "second pass: run to foo() second time ";
|
||||
}
|
||||
-re ".*$gdb_prompt $" {
|
||||
fail "second pass: run to foo() second time";
|
||||
gdb_suppress_tests;
|
||||
}
|
||||
timeout {
|
||||
fail "second pass: run to foo() second time (timeout)" ;
|
||||
gdb_suppress_tests
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# End of tests.
|
||||
|
||||
gdb_stop_suppressing_tests
|
||||
|
Loading…
Reference in New Issue
Block a user