public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: Tom de Vries <tdevries@suse.de>, gdb-patches@sourceware.org
Cc: Eli Zaretskii <eliz@gnu.org>
Subject: Re: [PATCHv3 2/2] gdb/python: extend the Python Disassembler API to allow for styling
Date: Wed, 17 May 2023 18:46:13 +0100	[thread overview]
Message-ID: <87lehmam1m.fsf@redhat.com> (raw)
In-Reply-To: <75aafd23-c764-84ec-29e0-d9aa624ac81a@suse.de>

Tom de Vries <tdevries@suse.de> 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 <class 'TypeError'>: 
> 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.  I guess you must be using an older (3.6.x or earlier)
version of Python?

The patch below should resolve the issues, I'll push this tomorrow.

Thanks,
Andrew

---

commit 416267af2e8272f677461fe9674bb10fcbd19098
Author: Andrew Burgess <aburgess@redhat.com>
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 <class 'TypeError'>: function missing required argument 'style' (pos 1)
    
    earlier versions of Python emit:
    
      Python Exception <class 'TypeError'>: 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 <class '$type'>: $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"
 


  reply	other threads:[~2023-05-17 17:46 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <id:87cz3na9jm.fsf@redhat.com>
2023-05-12 17:50 ` [PATCHv3 0/2] Disassembler Styling And The Python API Andrew Burgess
2023-05-12 17:50   ` [PATCHv3 1/2] gdb/python: rework how the disassembler API reads the result object Andrew Burgess
2023-05-12 17:50   ` [PATCHv3 2/2] gdb/python: extend the Python Disassembler API to allow for styling Andrew Burgess
2023-05-16 11:01     ` Andrew Burgess
2023-05-17  4:16     ` Tom de Vries
2023-05-17 17:46       ` Andrew Burgess [this message]
2023-05-17 19:36         ` Tom de Vries
2023-05-19  9:13           ` Andrew Burgess
2023-05-12 19:14   ` [PATCHv3 0/2] Disassembler Styling And The Python API Tom Tromey
2023-05-16  9:32     ` Andrew Burgess

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lehmam1m.fsf@redhat.com \
    --to=aburgess@redhat.com \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=tdevries@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).