From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25631 invoked by alias); 7 Sep 2002 16:07:21 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 25613 invoked from network); 7 Sep 2002 16:07:19 -0000 Received: from unknown (HELO mailhost.intrinsity.com) (208.246.32.130) by sources.redhat.com with SMTP; 7 Sep 2002 16:07:19 -0000 Received: from victoria.eng.evsx.com (victoria.eng.evsx.com [192.168.1.29]) by mailhost.intrinsity.com (Postfix) with ESMTP id 696DC3F40C for ; Sat, 7 Sep 2002 11:07:19 -0500 (CDT) Received: from beeville.vert.intrinsity.com (beeville.vert.intrinsity.com [192.168.3.48]) by victoria.eng.evsx.com (8.10.1/8.10.1) with ESMTP id g87G7I021205; Sat, 7 Sep 2002 11:07:19 -0500 (CDT) From: Fred Fish Received: (from fnf@localhost) by beeville.vert.intrinsity.com (8.11.2/8.11.4) id g87G6kE08811; Sat, 7 Sep 2002 11:06:46 -0500 Message-Id: <200209071606.g87G6kE08811@beeville.vert.intrinsity.com> Subject: Re: [RFA] Fix inferior restart problem in gdb.base/commands.exp To: gdb-patches@sources.redhat.com Date: Sat, 07 Sep 2002 09:07:00 -0000 Cc: fnf@intrinsity.com (Fred Fish) Reply-To: fnf@intrinsity.com In-Reply-To: <200209071404.g87E4kb19664@beeville.vert.intrinsity.com> from "Fred Fish" at Sep 07, 2002 09:04:45 AM MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2002-09/txt/msg00105.txt.bz2 Here is an updated patch that checks that the right breakpoint is getting hit, and only that breakpoint. It also has some format tweaks for consistency. -Fred 2002-09-07 Fred Fish * gdb.base/run.c (all_done): Add function and call it at end of main. * gdb.base/commands.exp (bp_deleted_in_command_test): Set breakpoint at all_done so we don't exit, which makes restarting more difficult. Call factorial with 2 instead of 1 to check breakpoint cleared. Adjust expected success results to match stopping at all_done. (temporary_breakpoint_commands): Ditto. (watchpoint_command_test): Adjust hardcoded line number to match. Index: gdb.base/commands.exp =================================================================== RCS file: /mips/newtools/fsf/gdb/gdb/testsuite/gdb.base/commands.exp,v retrieving revision 1.1.1.2 diff -c -p -r1.1.1.2 commands.exp *** gdb.base/commands.exp 2002/08/31 02:49:15 1.1.1.2 --- gdb.base/commands.exp 2002/09/07 15:12:05 *************** proc watchpoint_command_test {} { *** 331,337 **** } send_gdb "continue\n" gdb_expect { ! -re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*run.c:57.*$gdb_prompt $" { pass "continue with watch" } -re "$gdb_prompt $" {fail "continue with watch"} --- 331,337 ---- } send_gdb "continue\n" gdb_expect { ! -re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*run.c:60.*$gdb_prompt $" { pass "continue with watch" } -re "$gdb_prompt $" {fail "continue with watch"} *************** proc deprecated_command_test {} { *** 443,451 **** proc bp_deleted_in_command_test {} { global gdb_prompt ! gdb_test "set args 1" "" "set args in bp_deleted_in_command_test" delete_breakpoints # Create a breakpoint, and associate a command-list to it, with # one command that deletes this breakpoint. gdb_test "break factorial" \ --- 443,459 ---- proc bp_deleted_in_command_test {} { global gdb_prompt ! gdb_test "set args 2" "" "set args in bp_deleted_in_command_test" delete_breakpoints + # Set a breakpoint that will prevent us from running to completion and exiting. + # If we allow the inferior to exit, gdb_run_cmd may not be sufficient to get us + # going again in a future test without a full restart, when using a gdb stub. + + gdb_test "break all_done" \ + "Breakpoint \[0-9\]+ at .*: file .*/run.c, line \[0-9\]+\." \ + "breakpoint at all_done" + # Create a breakpoint, and associate a command-list to it, with # one command that deletes this breakpoint. gdb_test "break factorial" \ *************** proc bp_deleted_in_command_test {} { *** 470,487 **** gdb_expect { -re ">" {pass "add clear command"} -re "$gdb_prompt $" {fail "add clear command"} ! timeout {fail "(timeout) add clear command"} } send_gdb "printf \"factorial command-list executed\\n\"\n" gdb_expect { -re ">" {pass "add printf command"} -re "$gdb_prompt $" {fail "add printf command"} timeout {fail "(timeout) add printf command"} } send_gdb "cont\n" gdb_expect { -re ">" {pass "add cont command"} -re "$gdb_prompt $" {fail "add cont command"} ! timeout {fail "(timeout) add cont command"} } send_gdb "end\n" gdb_expect { -re "$gdb_prompt $" {pass "end commands"} --- 478,503 ---- gdb_expect { -re ">" {pass "add clear command"} -re "$gdb_prompt $" {fail "add clear command"} ! timeout {fail "(timeout) add clear command"} ! } send_gdb "printf \"factorial command-list executed\\n\"\n" gdb_expect { -re ">" {pass "add printf command"} -re "$gdb_prompt $" {fail "add printf command"} timeout {fail "(timeout) add printf command"} } + send_gdb "print value\n" + gdb_expect { + -re ">" {pass "add print value command"} + -re "$gdb_prompt $" {fail "add print value command"} + timeout {fail "(timeout) add print value command"} + } send_gdb "cont\n" gdb_expect { -re ">" {pass "add cont command"} -re "$gdb_prompt $" {fail "add cont command"} ! timeout {fail "(timeout) add cont command"} ! } send_gdb "end\n" gdb_expect { -re "$gdb_prompt $" {pass "end commands"} *************** proc bp_deleted_in_command_test {} { *** 489,496 **** } gdb_run_cmd gdb_expect { ! -re ".*factorial command-list executed.*1.*Program exited normally.*$gdb_prompt $" { pass "run factorial until breakpoint" } -re ".*$gdb_prompt $" { --- 505,515 ---- } gdb_run_cmd + # Note that we specifically don't check that the inferior printed any output + # since it is immaterial to the test results and we don't want to have to check + # whether or not "noinferiorio" is set. gdb_expect { ! -re ".*factorial command-list executed.*\\$\[0-9\]* = 2\[ \r\n\]+.*Breakpoint \[0-9\]+, all_done.*$gdb_prompt $" { pass "run factorial until breakpoint" } -re ".*$gdb_prompt $" { *************** proc bp_deleted_in_command_test {} { *** 504,512 **** proc temporary_breakpoint_commands {} { global gdb_prompt ! gdb_test "set args 1" "" "set args in temporary_breakpoint_commands" delete_breakpoints # Create a temporary breakpoint, and associate a commands list to it. # This test will verify that this commands list is executed when the # breakpoint is hit. --- 523,539 ---- proc temporary_breakpoint_commands {} { global gdb_prompt ! gdb_test "set args 2" "" "set args in temporary_breakpoint_commands" delete_breakpoints + # Set a breakpoint that will prevent us from running to completion and exiting. + # If we allow the inferior to exit, gdb_run_cmd may not be sufficient to get us + # going again in a future test without a full restart, when using a gdb stub. + + gdb_test "break all_done" \ + "Breakpoint \[0-9\]+ at .*: file .*/run.c, line \[0-9\]+\." \ + "breakpoint at all_done" + # Create a temporary breakpoint, and associate a commands list to it. # This test will verify that this commands list is executed when the # breakpoint is hit. *************** proc temporary_breakpoint_commands {} { *** 527,555 **** -re ">" {pass "add silent tbreak command"} -re "$gdb_prompt $" {fail "add silent tbreak command"} timeout {fail "(timeout) add silent tbreak command"} ! } send_gdb "printf \"factorial tbreak commands executed\\n\"\n" gdb_expect { -re ">" {pass "add printf tbreak command"} -re "$gdb_prompt $" {fail "add printf tbreak command"} timeout {fail "(timeout) add printf tbreak command"} ! } send_gdb "cont\n" gdb_expect { -re ">" {pass "add cont tbreak command"} -re "$gdb_prompt $" {fail "add cont tbreak command"} ! timeout {fail "(timeout) add cont tbreak command"} } send_gdb "end\n" gdb_expect { -re "$gdb_prompt $" {pass "end tbreak commands"} timeout {fail "(timeout) end tbreak commands"} ! } gdb_run_cmd gdb_expect { ! -re ".*factorial tbreak commands executed.*1.*Program exited normally.*" { pass "run factorial until temporary breakpoint" } timeout { fail "(timeout) run factorial until temporary breakpoint" } } } --- 554,596 ---- -re ">" {pass "add silent tbreak command"} -re "$gdb_prompt $" {fail "add silent tbreak command"} timeout {fail "(timeout) add silent tbreak command"} ! } send_gdb "printf \"factorial tbreak commands executed\\n\"\n" gdb_expect { -re ">" {pass "add printf tbreak command"} -re "$gdb_prompt $" {fail "add printf tbreak command"} timeout {fail "(timeout) add printf tbreak command"} ! } ! send_gdb "print value\n" ! gdb_expect { ! -re ">" {pass "add print value tbreak command"} ! -re "$gdb_prompt $" {fail "add print value tbreak command"} ! timeout {fail "(timeout) add print value tbreak command"} ! } send_gdb "cont\n" gdb_expect { -re ">" {pass "add cont tbreak command"} -re "$gdb_prompt $" {fail "add cont tbreak command"} ! timeout {fail "(timeout) add cont tbreak command"} ! } send_gdb "end\n" gdb_expect { -re "$gdb_prompt $" {pass "end tbreak commands"} timeout {fail "(timeout) end tbreak commands"} ! } gdb_run_cmd + # Note that we specifically don't check that the inferior printed any output + # since it is immaterial to the test results and we don't want to have to check + # whether or not "noinferiorio" is set. gdb_expect { ! -re ".*factorial tbreak commands executed.*\\$\[0-9\]* = 2\[ \r\n\]+.*Breakpoint \[0-9\]+, all_done.*$gdb_prompt $" { pass "run factorial until temporary breakpoint" + } + -re ".*$gdb_prompt $" { + fail "run factorial until temporary breakpoint" } + default { fail "(timeout) run factorial until temporary breakpoint" } timeout { fail "(timeout) run factorial until temporary breakpoint" } } } Index: gdb.base/run.c =================================================================== RCS file: /mips/newtools/fsf/gdb/gdb/testsuite/gdb.base/run.c,v retrieving revision 1.1.1.1 diff -c -p -r1.1.1.1 run.c *** gdb.base/run.c 2002/07/03 16:56:33 1.1.1.1 --- gdb.base/run.c 2002/09/07 15:12:05 *************** char *arg; *** 37,42 **** --- 37,45 ---- # include #endif /* ! vxworks */ + /* Someplace we can set a breakpoint to avoid running to completion when needed */ + void all_done () {}; + #ifdef PROTOTYPES int factorial (int); *************** char *argv[], **envp; *** 54,60 **** breakpoint(); #endif #ifdef FAKEARGV ! printf ("%d\n", factorial (1)); #else if (argc != 2) { printf ("usage: factorial \n"); --- 57,63 ---- breakpoint(); #endif #ifdef FAKEARGV ! printf ("%d\n", factorial (2)); #else if (argc != 2) { printf ("usage: factorial \n"); *************** char *argv[], **envp; *** 63,68 **** --- 66,72 ---- printf ("%d\n", factorial (atoi (argv[1]))); } #endif + all_done (); return 0; }