From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) by sourceware.org (Postfix) with ESMTPS id B3BA23858C5E for ; Wed, 17 May 2023 19:36:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B3BA23858C5E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 4046E1F381; Wed, 17 May 2023 19:36:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1684352184; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=i02HjIlJvVT6g90iZEruXtca1ROkaTWW+flHXkZ2yxY=; b=Z+g+g6ydse5uJVbhlYYsUkNRvI5FkVRsfuYYe4r91WxyrbDkdWkaTOlOLSGdhUBOKrxbcX 0prrS51n4yk77G6Ts1IH0AvwSZZcnuUHFeIQyQyKmqWkMSZKFE1nHpz6z6WpqWLxnMvtZo Mvf3+LCdBF4Jsf/+fahkHm/qWg0PpFU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1684352184; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=i02HjIlJvVT6g90iZEruXtca1ROkaTWW+flHXkZ2yxY=; b=kge/kNzn79E3M8sfFKEiCW+/b3udFE/Gj3dMcBgRfCGLP18QmQ4nPB8gF/W0XVtPh8jB11 QkuquiYjRUUL2ZDA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 1B93E13358; Wed, 17 May 2023 19:36:24 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id DkFxBbgsZWSdcQAAMHmgww (envelope-from ); Wed, 17 May 2023 19:36:24 +0000 Message-ID: <7278f86e-3662-3e9f-a4c3-60259dafe4aa@suse.de> Date: Wed, 17 May 2023 21:36:24 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [PATCHv3 2/2] gdb/python: extend the Python Disassembler API to allow for styling To: Andrew Burgess , gdb-patches@sourceware.org Cc: Eli Zaretskii References: <7d8bfee6bf10b136f0d02e9a45ef47249fdcca0a.1683913563.git.aburgess@redhat.com> <75aafd23-c764-84ec-29e0-d9aa624ac81a@suse.de> <87lehmam1m.fsf@redhat.com> Content-Language: en-US From: Tom de Vries In-Reply-To: <87lehmam1m.fsf@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 5/17/23 19:46, Andrew Burgess wrote: > Tom de Vries writes: > >> On 5/12/23 19:50, Andrew Burgess via Gdb-patches wrote: >>> This commit extends the Python Disassembler API to allow for styling >>> of the instructions. >>> >> >> I'm running into: >> ... >> FAIL: gdb.python/py-disasm.exp: >> global_disassembler=ErrorCreatingTextPart_NoArgs: disassemble test >> FAIL: gdb.python/py-disasm.exp: >> global_disassembler=ErrorCreatingAddressPart_NoArgs: disassemble test >> FAIL: gdb.python/py-disasm.exp: >> global_disassembler=ErrorCreatingTextPart_NoString: disassemble test >> FAIL: gdb.python/py-disasm.exp: >> global_disassembler=ErrorCreatingTextPart_NoStyle: disassemble test >> FAIL: gdb.python/py-disasm.exp: try to create a DisassemblerResult >> without a length argument >> ... >> >> First in more detail: >> ... >> (gdb) disassemble test^M >> Dump of assembler code for function test:^M >> 0x00000000004004a7 <+0>: push %rbp^M >> 0x00000000004004a8 <+1>: mov %rsp,%rbp^M >> 0x00000000004004ab <+4>: nop^M >> => 0x00000000004004ac <+5>: Python Exception : >> Required argument 'style' (pos 1) not found^M >> ^M >> unknown disassembler error (error = -1)^M >> (gdb) FAIL: gdb.python/py-disasm.exp: >> global_disassembler=ErrorCreatingTextPart_NoArgs: disassemble test >> ... >> >> This seems to be due to the test-case expecting " function missing >> required argument ..." but getting "Required argument ..." > > Sorry for that. Np of course :) > I guess you must be using an older (3.6.x or earlier) > version of Python? > /me checks: ... $ python3 --version Python 3.6.15 ... Yes. > The patch below should resolve the issues, I'll push this tomorrow. > I've checked, it does, thanks. - Tom > Thanks, > Andrew > > --- > > commit 416267af2e8272f677461fe9674bb10fcbd19098 > Author: Andrew Burgess > Date: Wed May 17 18:39:26 2023 +0100 > > gdb/testsuite: handle older Python versions in gdb.python/py-disasm.exp > > It was pointed out on the mailing list that the new tests added in > this commit: > > commit 4de4e48514fc47aeb4ca95cd4091e2a333fbe9e1 > Date: Tue Jan 24 15:35:45 2023 +0000 > > gdb/python: extend the Python Disassembler API to allow for styling > > will fail when GDB is built with Python 3.6 or earlier. This is > because the error that is emitted when a function argument is missing > changed in Python 3.7, instead of an error like this: > > Python Exception : function missing required argument 'style' (pos 1) > > earlier versions of Python emit: > > Python Exception : Required argument 'style' (pos 1) not found > > and the new tests didn't allow for this. > > This commit fixes this by allowing either pattern. I've tested this > building GDB against Python 3.7.9 and 3.6.15, with this commit all > tests in gdb.python/py-disasm.exp now pass. > > diff --git a/gdb/testsuite/gdb.python/py-disasm.exp b/gdb/testsuite/gdb.python/py-disasm.exp > index 304393f71ab..f2f9225168a 100644 > --- a/gdb/testsuite/gdb.python/py-disasm.exp > +++ b/gdb/testsuite/gdb.python/py-disasm.exp > @@ -75,6 +75,16 @@ proc make_exception_pattern { type msg } { > return "${::addr_pattern}Python Exception : $msg\r\n\r\n${::unknown_error_pattern}" > } > > +# Helper proc to build a pattern for the text Python emits when a > +# function argument is missing. This string changed in Python 3.7 and > +# later. NAME is the parameter name, and POS is its integer position > +# in the argument list. > +proc missing_arg_pattern { name pos } { > + set pattern_1 "function missing required argument '$name' \\(pos $pos\\)" > + set pattern_2 "Required argument '$name' \\(pos $pos\\) not found" > + return "(?:${pattern_1}|${pattern_2})" > +} > + > set test_plans \ > [list \ > [list "" "${base_pattern}\r\n.*"] \ > @@ -113,16 +123,16 @@ set test_plans \ > "Result is not a DisassemblerResult."]] \ > [list "ErrorCreatingTextPart_NoArgs" \ > [make_exception_pattern "TypeError" \ > - "function missing required argument 'style' \\(pos 1\\)"]] \ > + [missing_arg_pattern "style" 1]]] \ > [list "ErrorCreatingAddressPart_NoArgs" \ > [make_exception_pattern "TypeError" \ > - "function missing required argument 'address' \\(pos 1\\)"]] \ > + [missing_arg_pattern "address" 1]]] \ > [list "ErrorCreatingTextPart_NoString" \ > [make_exception_pattern "TypeError" \ > - "function missing required argument 'string' \\(pos 2\\)"]] \ > + [missing_arg_pattern "string" 2]]] \ > [list "ErrorCreatingTextPart_NoStyle" \ > [make_exception_pattern "TypeError" \ > - "function missing required argument 'style' \\(pos 1\\)"]] \ > + [missing_arg_pattern "style" 1]]] \ > [list "All_Text_Part_Styles" "${addr_pattern}p1p2p3p4p5p6p7p8p9p10\r\n.*"] \ > [list "ErrorCreatingTextPart_StringAndParts" \ > [make_exception_pattern "ValueError" \ > @@ -273,7 +283,7 @@ with_test_prefix "check inheritance" { > # Test some error conditions when creating a DisassemblerResult object. > gdb_test "python result = gdb.disassembler.DisassemblerResult()" \ > [multi_line \ > - "TypeError: function missing required argument 'length' \\(pos 1\\)" \ > + "TypeError: [missing_arg_pattern length 1]" \ > "Error while executing Python code\\."] \ > "try to create a DisassemblerResult without a length argument" > >