From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19993 invoked by alias); 9 Apr 2003 23:21:28 -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 19985 invoked from network); 9 Apr 2003 23:21:27 -0000 Received: from unknown (HELO zenia.red-bean.com) (12.222.151.100) by sources.redhat.com with SMTP; 9 Apr 2003 23:21:27 -0000 Received: from zenia.red-bean.com (localhost.localdomain [127.0.0.1]) by zenia.red-bean.com (8.12.5/8.12.5) with ESMTP id h39NMNFq026216; Wed, 9 Apr 2003 18:22:23 -0500 Received: (from jimb@localhost) by zenia.red-bean.com (8.12.5/8.12.5/Submit) id h39NMMAx026212; Wed, 9 Apr 2003 18:22:22 -0500 To: David Carlton Cc: gdb-patches@sources.redhat.com Subject: Re: RFA: report failure to restore selected frame, but continue References: From: Jim Blandy Date: Wed, 09 Apr 2003 23:21:00 -0000 In-Reply-To: Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2.95 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2003-04/txt/msg00187.txt.bz2 David Carlton writes: > Basically fine, just a few comments. It might be nice if there were a > test for this somewhere appropriate in gdb.base, in which case the big > comment could go there: or is there a reason why this only manifests > itself in C++? No, it's not specific to C++ at all; if the architecture makes a bad choice of frame base, GDB may not preserve the selected frame across inferior calls. > Actually, I'm not convinced that all of the big > comment belongs in the test suite at all: why not put it some place in > the GDB source code and/or the bug database, with a reference to that > in the testsuite? The diagnosis of the problem should be in the place > where it people fixing the problem will be most likely to see it, > after all. My thought was, if you're working on a target that has this problem, one of the earliest places you'll visit is the test script itself, to see what the failing test is actually doing. The comments for 'struct frame_id' could be expanded to point out the subtleties, but that is less helpful for someone working from the failure: you only know where to look in the sources after you've partially debugged the problem. GDB PR 1155 has a decent enough explanation of it; I'll just put references to that in the .exp files. I've made the rest of the changes you suggest. Here's what I've committed: 2003-04-09 Jim Blandy * gdb.c++/derivation.exp, gdb.c++/overload.exp, gdb.c++/userdef.exp: If GDB fails to restore the selected frame after an inferior function call, report the failure, but allow the test to continue. Index: gdb/testsuite/gdb.c++/derivation.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.c++/derivation.exp,v retrieving revision 1.10 diff -c -r1.10 derivation.exp *** gdb/testsuite/gdb.c++/derivation.exp 20 Jan 2002 19:22:13 -0000 1.10 --- gdb/testsuite/gdb.c++/derivation.exp 9 Apr 2003 23:16:43 -0000 *************** *** 300,305 **** --- 300,323 ---- timeout { fail "(timeout) print value of g_instance.afoo()" } } + + # If GDB fails to restore the selected frame properly after the + # inferior function call above (see GDB PR 1155 for an explanation of + # why this might happen), all the subsequent tests will fail. We + # should detect report that failure, but let the marker call finish so + # that the rest of the tests can run undisturbed. + gdb_test_multiple "frame" "re-selected 'main' frame after inferior call" { + -re "#0 marker1.*$gdb_prompt $" { + setup_kfail "gdb/1155" s390-*-linux-gnu + fail "re-selected 'main' frame after inferior call" + gdb_test "finish" ".*main.*at .*derivation.cc:21\[79\].*" \ + "finish call to marker1" + } + -re "#1 ($hex in )?main.*$gdb_prompt $" { + pass "re-selected 'main' frame after inferior call" + } + } + send_gdb "print g_instance.bfoo()\n" gdb_expect { -re ".\[0-9\]* = 2.*$gdb_prompt $" { Index: gdb/testsuite/gdb.c++/overload.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.c++/overload.exp,v retrieving revision 1.10 diff -c -r1.10 overload.exp *** gdb/testsuite/gdb.c++/overload.exp 4 Feb 2003 21:19:27 -0000 1.10 --- gdb/testsuite/gdb.c++/overload.exp 9 Apr 2003 23:16:44 -0000 *************** *** 120,125 **** --- 120,143 ---- } + # If GDB fails to restore the selected frame properly after the + # inferior function call above (see GDB PR 1155 for an explanation of + # why this might happen), all the subsequent tests will fail. We + # should detect and report that failure, but let the marker call + # finish so that the rest of the tests can run undisturbed. + gdb_test_multiple "frame" "re-selected 'main' frame after inferior call" { + -re "#0 marker1.*$gdb_prompt $" { + setup_kfail "gdb/1155" s390-*-linux-gnu + fail "re-selected 'main' frame after inferior call" + gdb_test "finish" ".*main.*at .*overload.cc:7\[78\].*" \ + "finish call to marker1" + } + -re "#1 ($hex in )?main.*$gdb_prompt $" { + pass "re-selected 'main' frame after inferior call" + } + } + + send_gdb "print foo_instance1.overloadargs(1, 2)\n" gdb_expect { -re ".\[0-9\]* = 2\r\n$gdb_prompt $" { Index: gdb/testsuite/gdb.c++/userdef.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.c++/userdef.exp,v retrieving revision 1.6 diff -c -r1.6 userdef.exp *** gdb/testsuite/gdb.c++/userdef.exp 18 Feb 2002 19:07:29 -0000 1.6 --- gdb/testsuite/gdb.c++/userdef.exp 9 Apr 2003 23:16:44 -0000 *************** *** 66,71 **** --- 66,88 ---- gdb_test "print one + two" "\\\$\[0-9\]* = {x = 6, y = 8}" + # If GDB fails to restore the selected frame properly after the + # inferior function call above (see GDB PR 1155 for an explanation of + # why this might happen), all the subsequent tests will fail. We + # should detect report that failure, but let the marker call finish so + # that the rest of the tests can run undisturbed. + gdb_test_multiple "frame" "re-selected 'main' frame after inferior call" { + -re "#0 marker1.*$gdb_prompt $" { + setup_kfail "gdb/1155" s390-*-linux-gnu + fail "re-selected 'main' frame after inferior call" + gdb_test "finish" ".*main.*at .*userdef.cc:27\[67\].*" \ + "finish call to marker1" + } + -re "#1 ($hex in )?main.*$gdb_prompt $" { + pass "re-selected 'main' frame after inferior call" + } + } + gdb_test "print one - two" "\\\$\[0-9\]* = {x = -2, y = -2}" gdb_test "print one * two" "\\\$\[0-9\]* = {x = 8, y = 15}"