* 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>
|
2002-01-21 Fred Fish <fnf@redhat.com>
|
||||||
|
|
||||||
* arm-tdep.c (thumb_skip_prologue): Quit scanning prologue
|
* 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 ();
|
clear_breakpoint_hit_counts ();
|
||||||
|
|
||||||
exec_file = (char *) get_exec_file (0);
|
|
||||||
|
|
||||||
/* Purge old solib objfiles. */
|
/* Purge old solib objfiles. */
|
||||||
objfile_purge_solibs ();
|
objfile_purge_solibs ();
|
||||||
|
|
||||||
do_run_cleanups (NULL);
|
do_run_cleanups (NULL);
|
||||||
|
|
||||||
/* The exec file is re-read every time we do a generic_mourn_inferior, so
|
/* The comment here used to read, "The exec file is re-read every
|
||||||
we just have to worry about the symbol file. */
|
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 ();
|
reread_symbols ();
|
||||||
|
|
||||||
|
exec_file = (char *) get_exec_file (0);
|
||||||
|
|
||||||
/* We keep symbols from add-symbol-file, on the grounds that the
|
/* We keep symbols from add-symbol-file, on the grounds that the
|
||||||
user might want to add some symbols before running the program
|
user might want to add some symbols before running the program
|
||||||
(right?). But sometimes (dynamic loading where the user manually
|
(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>
|
2002-01-21 Fred Fish <fnf@redhat.com>
|
||||||
|
|
||||||
* gdb.base/maint.exp: Simplify the "maint info breakpoints" test to
|
* 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
|
# Restore first executable to its original name, and move
|
||||||
# second executable into its place. Ensure that the new
|
# 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 ${binfile} ${binfile1}" "" ""
|
||||||
gdb_test "shell mv ${binfile2} ${binfile}" "" ""
|
gdb_test "shell mv ${binfile2} ${binfile}" "" ""
|
||||||
@ -98,6 +98,8 @@ gdb_test "shell touch ${binfile}" "" ""
|
|||||||
# and reset the breakpoints correctly.
|
# and reset the breakpoints correctly.
|
||||||
# Should see "Breakpoint 1, foo () at reread2.c:9"
|
# Should see "Breakpoint 1, foo () at reread2.c:9"
|
||||||
|
|
||||||
|
set prms_id 0
|
||||||
|
|
||||||
if ![isnative] {
|
if ![isnative] {
|
||||||
unsupported "run to foo() second time ";
|
unsupported "run to foo() second time ";
|
||||||
} else {
|
} 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.
|
# End of tests.
|
||||||
|
|
||||||
gdb_stop_suppressing_tests
|
gdb_stop_suppressing_tests
|
||||||
|
Loading…
x
Reference in New Issue
Block a user