From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10055 invoked by alias); 6 Nov 2002 20:28:25 -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 10047 invoked from network); 6 Nov 2002 20:28:24 -0000 Received: from unknown (HELO zenia.red-bean.com) (66.244.67.22) by sources.redhat.com with SMTP; 6 Nov 2002 20:28:24 -0000 Received: (from jimb@localhost) by zenia.red-bean.com (8.11.6/8.11.6) id gA6KDXL21965; Wed, 6 Nov 2002 15:13:33 -0500 To: gdb-patches@sources.redhat.com Subject: RFA: add testsuite function for answering internal error questions From: Jim Blandy User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2.90 Date: Wed, 06 Nov 2002 12:28:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2002-11/txt/msg00118.txt.bz2 [re-posting: bad changelog entry.] 2002-11-06 Jim Blandy * lib/gdb.exp (gdb_internal_error_regexp): New variable. (gdb_internal_error_resync): New procedure. (gdb_test): If the command results in an internal error, answer GDB's questions until we get back to a prompt. Index: gdb/testsuite/lib/gdb.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v retrieving revision 1.27 diff -c -r1.27 gdb.exp *** gdb/testsuite/lib/gdb.exp 18 Sep 2002 15:34:10 -0000 1.27 --- gdb/testsuite/lib/gdb.exp 6 Nov 2002 20:21:58 -0000 *************** *** 370,375 **** --- 370,425 ---- } + # A regular expression matching the output GDB produces when it + # reports an internal error. + set gdb_internal_error_regexp ".*A problem internal to GDB has been detected" + + + # gdb_internal_error_resync TESTNAME + # + # Answer the questions GDB asks after it reports an internal error + # until we get back to a GDB prompt, as part of the test named + # TESTNAME. Decline to quit the debugging session, and decline to + # create a core file. + # + # This procedure just answers whatever questions come up until it sees + # a GDB prompt; it doesn't require you to have matched the input up to + # any specific point. However, it only answers questions it sees in + # the output itself, so if you've matched a question, you had better + # answer it yourself before calling this. + # + # The variable `gdb_internal_error_regexp' is set up to match the + # internal error message, but none of the questions that follow it, so + # you can write code like this: + # + # gdb_expect { + # ... + # -re $gdb_internal_error_regexp { + # gdb_internal_error_resync "$message (internal error)" + # } + # ... + # } + proc gdb_internal_error_resync {testname} { + global gdb_prompt + + gdb_expect { + -re "Quit this debugging session\\? \\(y or n\\) $" { + send_gdb "n\n" + exp_continue + } + -re "Create a core file of GDB\\? \\(y or n\\) $" { + send_gdb "n\n" + exp_continue + } + -re "$gdb_prompt $" { + # We're resynchronized. + } + timeout { + fail "$testname (internal error resync timeout)" + } + } + } + # gdb_test COMMAND PATTERN MESSAGE QUESTION RESPONSE # Send a command to gdb; test the result. *************** *** 395,400 **** --- 445,451 ---- global verbose global gdb_prompt global GDB + global gdb_internal_error_regexp upvar timeout timeout if [llength $args]>2 then { *************** *** 477,482 **** --- 528,537 ---- } } gdb_expect $tmt { + -re $gdb_internal_error_regexp { + fail "$message" + gdb_internal_error_resync "$message (internal error)" + } -re "\\*\\*\\* DOSEXIT code.*" { if { $message != "" } { fail "$message";