public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: Simon Marchi <simark@simark.ca>, gdb-patches@sourceware.org
Subject: Re: [PATCH 2/3] gdb: improve disassembler styling when Pygments raises an exception
Date: Mon, 10 Oct 2022 10:32:35 +0100	[thread overview]
Message-ID: <87tu4cdnws.fsf@redhat.com> (raw)
In-Reply-To: <9ea099ee-e984-63ad-0400-dd9a6f9fa6ef@simark.ca>

Simon Marchi <simark@simark.ca> writes:

> On 2022-10-08 12:00, Andrew Burgess wrote:
>> Simon Marchi <simark@simark.ca> writes:
>> 
>>>> +# Check that, if the user is using Python Pygments for disassembler
>>>> +# styling, then the styling correctly switches off when an error is
>>>> +# detected in the Python code.
>>>> +proc test_disassembler_error_handling { } {
>>>> +
>>>> +    # This test requires the Python Pygments module to be installed
>>>> +    # and used by GDB.
>>>> +    if { !$::python_disassembly_styling } {
>>>> +	return
>>>> +    }
>>>> +
>>>> +    save_vars { env(TERM) } {
>>>> +	# We need an ANSI-capable terminal to get the output.
>>>> +	setenv TERM ansi
>>>> +
>>>> +	# Restart GDB with the correct TERM variable setting, this
>>>> +	# means that GDB will enable styling.
>>>> +	clean_restart_and_disable "restart 4" $::binfile
>>>> +
>>>> +	# Disable use of libopcodes for styling.  As this function is
>>>> +	# only called when Python Pygments module is available, we
>>>> +	# should now be using that module to style the disassembler
>>>> +	# output.
>>>> +	gdb_test_no_output "maint set libopcodes-styling enabled off"
>>>> +
>>>> +	# Disassemble a single instruction and ensure that the output
>>>> +	# has styling markers in it.
>>>> +	set insn_before [get_single_disassembled_insn]
>>>> +	gdb_assert { [regexp "\033" $insn_before] } \
>>>> +	    "have style markers when Pygments is working fine"
>>>> +
>>>> +	# Now replace the standard function that colorizes the
>>>> +	# disassembler output, with a new function that always returns
>>>> +	# None, this should cause GDB to stop using the Pygments
>>>> +	# module for disassembler styling.
>>>> +	gdb_py_test_silent_cmd \
>>>> +	    [multi_line_input \
>>>> +		 "python" \
>>>> +		 "def replacement_colorize_disasm(content,gdbarch):" \
>>>> +		 "  return None" \
>>>> +		 "gdb.styling.colorize_disasm = replacement_colorize_disasm" \
>>>> +		 "\004"] \
>>>
>>> Any reason you are using \004 here, instead of end?  I don't quite
>>> understand why, but it seems to cause some random failures.  Running the
>>> test under `taskset -c 2` makes it fail most of the time.  Running it
>>> with check-read1 makes it fail consistently:
>>>
>>>   FAIL: gdb.base/style.exp: capture_command_output for x/1i *main
>>>
>>> When changing \004 for end, it passes.  I don't have an explanation why
>>> though.
>> 
>> It'll be a copy&paste.  There's a couple of other places in the
>> testsuite where this pattern is used.
>> 
>> The patch below changes all three to use 'end'.  How's this?
>> 
>> Thanks,
>> Andrew
>
> This is fine with me, but again, I didn't dig into it so I don't really
> know what sending a \004 was causing,

Hi,

Given you were seeing problems with the use of \004, and the tests
definitely were not about whether \004 could be used or not, I've pushed
the patch I proposed (exact version is below).

Thanks,
Andrew

---

commit f91822c2b9f9fed0c2717b17f380e5216502ea32
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Sat Oct 8 16:58:00 2022 +0100

    gdb/testsuite: use 'end' at the end of python blocks
    
    Within the testsuite, use the keyword 'end' to terminate blocks of
    Python code being sent to GDB, rather than sending \004.  I could only
    find three instances of this, all in tests that I originally wrote.  I
    have no memory of there being any special reason why I used \004
    instead of 'end' - I assume I copied this from somewhere else that has
    since changed.
    
    Non of the tests being changed here are specifically about whether
    \004 can be used to terminate a Python block, so I think switching to
    the more standard 'end' keyword is the right choice.

diff --git a/gdb/testsuite/gdb.base/style.exp b/gdb/testsuite/gdb.base/style.exp
index c6ed996c280..146e2b6d757 100644
--- a/gdb/testsuite/gdb.base/style.exp
+++ b/gdb/testsuite/gdb.base/style.exp
@@ -444,7 +444,7 @@ proc test_disassembler_error_handling { } {
 		 "def replacement_colorize_disasm(content,gdbarch):" \
 		 "  return None" \
 		 "gdb.styling.colorize_disasm = replacement_colorize_disasm" \
-		 "\004"] \
+		 "end"] \
 	    "setup replacement colorize_disasm function" \
 	    true
 
diff --git a/gdb/testsuite/gdb.python/py-arch-reg-groups.exp b/gdb/testsuite/gdb.python/py-arch-reg-groups.exp
index 9503e6c10f5..f2cf8b0e6ec 100644
--- a/gdb/testsuite/gdb.python/py-arch-reg-groups.exp
+++ b/gdb/testsuite/gdb.python/py-arch-reg-groups.exp
@@ -102,5 +102,5 @@ gdb_py_test_silent_cmd \
 	 "    raise gdb.GdbError (\"miss-matched names\")" \
 	 "  if (r1 != r2):" \
 	 "    raise gdb.GdbError (\"miss-matched objects\")" \
-	 "\004" ] \
+	 "end" ] \
     "check names and objects match" 1
diff --git a/gdb/testsuite/gdb.python/py-arch-reg-names.exp b/gdb/testsuite/gdb.python/py-arch-reg-names.exp
index d3c600ffc0f..62c47e8200e 100644
--- a/gdb/testsuite/gdb.python/py-arch-reg-names.exp
+++ b/gdb/testsuite/gdb.python/py-arch-reg-names.exp
@@ -102,7 +102,7 @@ gdb_py_test_silent_cmd \
 	 "    raise gdb.GdbError (\"miss-matched names\")" \
 	 "  if (r1 != r2):" \
 	 "    raise gdb.GdbError (\"miss-matched objects\")" \
-	 "\004" ] \
+	 "end" ] \
     "check names and objects match" 1
 
 # Ensure that the '.find' method on the iterator returns the same


  reply	other threads:[~2022-10-10  9:32 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-30 14:16 [PATCH 0/3] Improvements for Pygments based disassembly styling Andrew Burgess
2022-08-30 14:16 ` [PATCH 1/3] gdb/testsuite: extend styling test for libopcodes styling Andrew Burgess
2022-08-30 14:16 ` [PATCH 2/3] gdb: improve disassembler styling when Pygments raises an exception Andrew Burgess
2022-10-08  2:25   ` Simon Marchi
2022-10-08 16:00     ` Andrew Burgess
2022-10-08 16:01       ` Simon Marchi
2022-10-10  9:32         ` Andrew Burgess [this message]
2022-10-10 10:31           ` Tom de Vries
2022-10-10 11:16             ` Andrew Burgess
2022-10-10 13:22               ` Tom de Vries
2022-10-10 14:04                 ` Andrew Burgess
2022-10-10 11:03     ` Andrew Burgess
2022-08-30 14:16 ` [PATCH 3/3] gdb/disasm: better intel flavour disassembly styling with Pygments Andrew Burgess
2022-10-02 16:38 ` [PATCH 0/3] Improvements for Pygments based disassembly styling 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=87tu4cdnws.fsf@redhat.com \
    --to=aburgess@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=simark@simark.ca \
    /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).