From 4c42eaff630026a1c9589e913d072935fed919c1 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Mon, 24 Jul 2006 20:38:08 +0000 Subject: [PATCH] gdb/ * corefile.c (reopen_exec_file): Only check for an open exec file. Use exec_file_attach. * exec.c (exec_open): Make static. (exec_file_command): Don't use target_preopen. Query directly about changing the file. * gdbcore.h (exec_open): Remove prototype. gdb/testsuite/ * gdb.base/completion.exp: Update for change in "file" behavior. * gdb.stabs/weird.exp: Likewise. * lib/mi-support.exp (mi_gdb_file_cmd): Likewise. * lib/gdb.exp (gdb_file_cmd): Likewise. Kill the program explicitly. --- gdb/ChangeLog | 11 ++++++++++- gdb/corefile.c | 8 +++----- gdb/exec.c | 9 ++++++--- gdb/gdbcore.h | 2 -- gdb/testsuite/ChangeLog | 7 +++++++ gdb/testsuite/gdb.base/completion.exp | 21 ++++++++------------- gdb/testsuite/gdb.stabs/weird.exp | 2 +- gdb/testsuite/lib/gdb.exp | 19 ++++++++++++++----- gdb/testsuite/lib/mi-support.exp | 5 ----- 9 files changed, 49 insertions(+), 35 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ebb2450c036..b92727cf771 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,4 +1,13 @@ -2006-07-21 Frederic Riss +2006-07-24 Daniel Jacobowitz + + * corefile.c (reopen_exec_file): Only check for an open exec file. + Use exec_file_attach. + * exec.c (exec_open): Make static. + (exec_file_command): Don't use target_preopen. Query directly about + changing the file. + * gdbcore.h (exec_open): Remove prototype. + +2006-07-24 Frederic Riss * regcache.c (struct regcache): Make register_valid_p a signed char array. diff --git a/gdb/corefile.c b/gdb/corefile.c index c49d00c8191..03e853bb5f4 100644 --- a/gdb/corefile.c +++ b/gdb/corefile.c @@ -156,8 +156,8 @@ reopen_exec_file (void) struct stat st; long mtime; - /* Don't do anything if the current target isn't exec. */ - if (exec_bfd == NULL || strcmp (target_shortname, "exec") != 0) + /* Don't do anything if there isn't an exec file. */ + if (exec_bfd == NULL) return; /* If the timestamp of the exec file has changed, reopen it. */ @@ -167,9 +167,7 @@ reopen_exec_file (void) res = stat (filename, &st); if (mtime && mtime != st.st_mtime) - { - exec_open (filename, 0); - } + exec_file_attach (filename, 0); #endif } diff --git a/gdb/exec.c b/gdb/exec.c index 7bd2ccd5734..9653c243999 100644 --- a/gdb/exec.c +++ b/gdb/exec.c @@ -85,7 +85,7 @@ show_write_files (struct ui_file *file, int from_tty, struct vmap *vmap; -void +static void exec_open (char *args, int from_tty) { target_preopen (from_tty); @@ -286,8 +286,11 @@ exec_file_command (char *args, int from_tty) { char **argv; char *filename; - - target_preopen (from_tty); + + if (from_tty && target_has_execution + && !query (_("A program is being debugged already.\n" + "Are you sure you want to change the file? "))) + error (_("File not changed.")); if (args) { diff --git a/gdb/gdbcore.h b/gdb/gdbcore.h index eb4c46d46d3..d72a17b6709 100644 --- a/gdb/gdbcore.h +++ b/gdb/gdbcore.h @@ -123,8 +123,6 @@ extern int write_files; extern void core_file_command (char *filename, int from_tty); -extern void exec_open (char *filename, int from_tty); - extern void exec_file_attach (char *filename, int from_tty); extern void exec_file_clear (int from_tty); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 641cdd21687..f145210704b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2006-07-24 Daniel Jacobowitz + + * gdb.base/completion.exp: Update for change in "file" behavior. + * gdb.stabs/weird.exp: Likewise. + * lib/mi-support.exp (mi_gdb_file_cmd): Likewise. + * lib/gdb.exp (gdb_file_cmd): Likewise. Kill the program explicitly. + 2006-07-24 Nathan Sidwell * gdb.base/auxv.exp: Skip on non-linux, non-solaris targets. diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp index 2961cb5ac1a..23d69027b22 100644 --- a/gdb/testsuite/gdb.base/completion.exp +++ b/gdb/testsuite/gdb.base/completion.exp @@ -671,19 +671,14 @@ sleep 1 gdb_expect { -re "^file ./gdb.base/completion\\.exp $"\ { send_gdb "\n" - gdb_expect { - -re "\r\nA program is being debugged already\\. Kill it\\? \\(y or n\\) $" - { send_gdb "n\n" - gdb_expect { - -re "\r\nProgram not killed\\.\r\n$gdb_prompt $"\ - { pass "complete 'file ./gdb.base/complet'"} - -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/complet'"} - timeout {fail "(timeout) complete 'file ./gdb.base/complet'"} - } - } - -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/complet'"} - timeout {fail "(timeout) complete 'file ./gdb.base/complet'"} - } + # Ignore the exact error message. + gdb_test_multiple "" "complete 'file ./gdb.base/complet'" { + -re "\r\nA program is being debugged already\\.\[\r\n\]+Are you sure you want to change the file\\? \\(y or n\\) $" { + send_gdb "n\n" + exp_continue + } + -re ".*$gdb_prompt $" { pass "complete 'file ./gdb.base/complet'" } + } } -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/complet'" } timeout { fail "(timeout) complete 'file ./gdb.base/complet'" } diff --git a/gdb/testsuite/gdb.stabs/weird.exp b/gdb/testsuite/gdb.stabs/weird.exp index 7f67ccb132b..fca9701ccf7 100644 --- a/gdb/testsuite/gdb.stabs/weird.exp +++ b/gdb/testsuite/gdb.stabs/weird.exp @@ -313,7 +313,7 @@ gdb_expect 60 { -re "^file (\[^ \]| +\008)*\r*\n" { exp_continue } - -re "A program is being debugged already. Kill it\\? \\(y or n\\)" { + -re "A program is being debugged already.\[\r\n\]+Are you sure you want to change the file\\? \\(y or n\\)" { send_gdb "y\n" exp_continue } diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index eca2a504666..047bf504faa 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1008,6 +1008,20 @@ proc gdb_file_cmd { arg } { } } + # The file command used to kill the remote target. For the benefit + # of the testsuite, preserve this behavior. + send_gdb "kill\n" + gdb_expect 120 { + -re "Kill the program being debugged. .y or n. $" { + send_gdb "y\n" + verbose "\t\tKilling previous program being debugged" + exp_continue + } + -re "$gdb_prompt $" { + # OK. + } + } + send_gdb "file $arg\n" gdb_expect 120 { -re "Reading symbols from.*no debugging symbols found.*done.*$gdb_prompt $" { @@ -1020,11 +1034,6 @@ proc gdb_file_cmd { arg } { set gdb_file_cmd_debug_info "debug" return 0 } - -re "A program is being debugged already.*Kill it.*y or n. $" { - send_gdb "y\n" - verbose "\t\tKilling previous program being debugged" - exp_continue - } -re "Load new symbol table from \".*\".*y or n. $" { send_gdb "y\n" gdb_expect 120 { diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp index fa99c53f255..5d5af947152 100644 --- a/gdb/testsuite/lib/mi-support.exp +++ b/gdb/testsuite/lib/mi-support.exp @@ -411,11 +411,6 @@ proc mi_gdb_file_cmd { arg } { perror "$arg wasn't compiled with \"-g\"" return -1 } - -re "A program is being debugged already.*Kill it.*y or n. $" { - send_gdb "y\n" - verbose "\t\tKilling previous program being debugged" - exp_continue - } -re "Load new symbol table from \".*\".*y or n. $" { send_gdb "y\n" gdb_expect 120 { -- 2.39.5