From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9956 invoked by alias); 16 Nov 2016 22:46:31 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 9941 invoked by uid 89); 16 Nov 2016 22:46:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.8 required=5.0 tests=BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=gdb-testers, gdbtesters, cls, Exception X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 16 Nov 2016 22:46:20 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2F23B3D94D; Wed, 16 Nov 2016 22:46:19 +0000 (UTC) Received: from localhost (unused-10-15-17-193.yyz.redhat.com [10.15.17.193]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id uAGMkIU7004456 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 16 Nov 2016 17:46:18 -0500 From: Sergio Durigan Junior To: Kevin Buettner Cc: Pedro Alves , gdb-patches@sourceware.org Subject: Re: [PATCH v2 1/5] Extend test gdb.python/py-recurse-unwind.exp References: <20161102151111.2462c806@pinnacle.lan> <20161102151428.11d1d20e@pinnacle.lan> <75c10343-bc79-42ff-5e8d-c6825dd89d22@redhat.com> <20161116115208.2f43483b@pinnacle.lan> X-URL: http://blog.sergiodj.net Date: Wed, 16 Nov 2016 22:46:00 -0000 In-Reply-To: <20161116115208.2f43483b@pinnacle.lan> (Kevin Buettner's message of "Wed, 16 Nov 2016 11:52:08 -0700") Message-ID: <8760nngi11.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2016-11/txt/msg00463.txt.bz2 On Wednesday, November 16 2016, Kevin Buettner wrote: >> Otherwise, LGTM. > > Thanks again for the review. > > This is what I've pushed... Heya, While checking some BuildBot logs, I noticed a few new FAILures introduced by this commit. You can see them at: Cheers, > commit 1a2f3d7ff1d79b1290704e48c71e905b987393a6 > Author: Kevin Buettner > Date: Mon Sep 26 15:00:37 2016 -0700 > > Extend test gdb.python/py-recurse-unwind.exp > > This patch modifies the unwinder (sniffer) defined in > py-recurse-unwind.py so that, depending upon the value of one of its > class variables, it will take different paths through the code, > testing different functionality. > > The original test attempted to obtain the value of an undefined > symbol. > > This somewhat expanded test checks to see if 'pc' can be read via > gdb.PendingFrame.read_register() and also via gdb.parse_and_eval(). > > gdb/testsuite/ChangeLog: > > * gdb.python/py-recurse-unwind.c (main): Add loop. > * gdb.python/py-recurse-unwind.py (TestUnwinder): Add calls > to read_register() and gdb.parse_and_eval(). Make each code > call a separate case that can be individually tested. > * gdb.python/py-recurse-unwind.exp (cont_and_backtrace): New > proc. Call cont_and_backtrace for each of the code paths that > we want to test in the unwinder. > --- > gdb/testsuite/ChangeLog | 10 ++++ > gdb/testsuite/gdb.python/py-recurse-unwind.c | 6 ++- > gdb/testsuite/gdb.python/py-recurse-unwind.exp | 63 ++++++++++++++++---------- > gdb/testsuite/gdb.python/py-recurse-unwind.py | 29 ++++++++++-- > 4 files changed, 79 insertions(+), 29 deletions(-) > > diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog > index d9e61f4..82126c0 100644 > --- a/gdb/testsuite/ChangeLog > +++ b/gdb/testsuite/ChangeLog > @@ -1,3 +1,13 @@ > +2016-11-16 Kevin Buettner > + > + * gdb.python/py-recurse-unwind.c (main): Add loop. > + * gdb.python/py-recurse-unwind.py (TestUnwinder): Add calls > + to read_register() and gdb.parse_and_eval(). Make each code > + call a separate case that can be individually tested. > + * gdb.python/py-recurse-unwind.exp (cont_and_backtrace): New > + proc. Call cont_and_backtrace for each of the code paths that > + we want to test in the unwinder. > + > 2016-11-15 Andreas Arnez > > * gdb.dwarf2/bitfield-parent-optimized-out.exp: Fix DWARF code for > diff --git a/gdb/testsuite/gdb.python/py-recurse-unwind.c b/gdb/testsuite/gdb.python/py-recurse-unwind.c > index 02a835a..77acec1 100644 > --- a/gdb/testsuite/gdb.python/py-recurse-unwind.c > +++ b/gdb/testsuite/gdb.python/py-recurse-unwind.c > @@ -37,6 +37,10 @@ aaa (int arg) > int > main () > { > - aaa (123); > + int i; > + > + for (i = 0; i < 10; i++) > + aaa (123); > + > return 0; > } > diff --git a/gdb/testsuite/gdb.python/py-recurse-unwind.exp b/gdb/testsuite/gdb.python/py-recurse-unwind.exp > index 9629a97..97c69f7 100644 > --- a/gdb/testsuite/gdb.python/py-recurse-unwind.exp > +++ b/gdb/testsuite/gdb.python/py-recurse-unwind.exp > @@ -45,29 +45,46 @@ if ![runto_main] then { > return 0 > } > > -gdb_breakpoint "ccc" > > -gdb_continue_to_breakpoint "ccc" > - > -# If the unwinder is active, the usage count will increment while > -# running to the breakpoint. Reset it prior to doing the backtrace. > -gdb_test_no_output "python TestUnwinder.reset_count()" > - > -# The python based unwinder should be called a number of times while > -# generating the backtrace, but its sniffer always returns None. So > -# it doesn't really contribute to generating any of the frames below. > -# > -# But that's okay. Our goal here is to make sure that GDB doesn't > -# get hung up in potentially infinite recursion when invoking the > -# Python-based unwinder. > - > -gdb_test_sequence "bt" "backtrace" { > - "\\r\\n#0 .* ccc \\(arg=789\\) at " > - "\\r\\n#1 .* bbb \\(arg=456\\) at " > - "\\r\\n#2 .* aaa \\(arg=123\\) at " > - "\\r\\n#3 .* main \\(.*\\) at" > +proc cont_and_backtrace { tst } { > + > + with_test_prefix $tst { > + gdb_breakpoint "ccc" > + > + # We're testing different code paths within the unwinder's sniffer. > + # Set the current path to be tested here. > + gdb_test_no_output "python TestUnwinder.set_test(\"$tst\")" \ > + "set code path within python unwinder to $tst" > + > + # If the unwinder is active, the usage count will increment while > + # running to the breakpoint. Reset it prior to doing the backtrace. > + gdb_test_no_output "python TestUnwinder.reset_count()" \ > + "reset count" > + > + gdb_continue_to_breakpoint "ccc" > + > + # The python based unwinder should be called a number of times while > + # generating the backtrace, but its sniffer always returns None. So > + # it doesn't really contribute to generating any of the frames below. > + # > + # But that's okay. Our goal here is to make sure that GDB doesn't > + # get hung up in potentially infinite recursion when invoking the > + # Python-based unwinder. > + > + gdb_test_sequence "bt" "backtrace" { > + "\\r\\n#0 .* ccc \\(arg=789\\) at " > + "\\r\\n#1 .* bbb \\(arg=456\\) at " > + "\\r\\n#2 .* aaa \\(arg=123\\) at " > + "\\r\\n#3 .* main \\(.*\\) at" > + } > + > + # Test that the python-based unwinder / sniffer was actually called > + # during generation of the backtrace. > + gdb_test "python print(TestUnwinder.count > 0)" "True" \ > + "python unwinder called" > + } > } > > -# Test that the python-based unwinder / sniffer was actually called > -# during generation of the backtrace. > -gdb_test "python print(TestUnwinder.count > 0)" "True" > +cont_and_backtrace "check_undefined_symbol" > +cont_and_backtrace "check_user_reg_pc" > +cont_and_backtrace "check_pae_pc" > diff --git a/gdb/testsuite/gdb.python/py-recurse-unwind.py b/gdb/testsuite/gdb.python/py-recurse-unwind.py > index 1da7aca..5eb87bb 100644 > --- a/gdb/testsuite/gdb.python/py-recurse-unwind.py > +++ b/gdb/testsuite/gdb.python/py-recurse-unwind.py > @@ -40,13 +40,18 @@ class TestUnwinder(Unwinder): > def inc_count (cls): > cls.count += 1 > > + test = 'check_undefined_symbol' > + > + @classmethod > + def set_test (cls, test) : > + cls.test = test > + > def __init__(self): > Unwinder.__init__(self, "test unwinder") > self.recurse_level = 0 > > def __call__(self, pending_frame): > > - > if self.recurse_level > 0: > gdb.write("TestUnwinder: Recursion detected - returning early.\n") > return None > @@ -54,11 +59,25 @@ class TestUnwinder(Unwinder): > self.recurse_level += 1 > TestUnwinder.inc_count() > > - try: > - val = gdb.parse_and_eval("undefined_symbol") > + if TestUnwinder.test == 'check_user_reg_pc' : > + > + pc = pending_frame.read_register('pc') > + pc_as_int = int(pc.cast(gdb.lookup_type('int'))) > + # gdb.write("In unwinder: pc=%x\n" % pc_as_int) > + > + elif TestUnwinder.test == 'check_pae_pc' : > + > + pc = gdb.parse_and_eval('$pc') > + pc_as_int = int(pc.cast(gdb.lookup_type('int'))) > + # gdb.write("In unwinder: pc=%x\n" % pc_as_int) > + > + elif TestUnwinder.test == 'check_undefined_symbol' : > + > + try: > + val = gdb.parse_and_eval("undefined_symbol") > > - except Exception as arg: > - pass > + except Exception as arg: > + pass > > self.recurse_level -= 1 -- Sergio GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36 Please send encrypted e-mail if possible http://sergiodj.net/