On 10/10/22 13:16, Andrew Burgess wrote: > Tom de Vries writes: > >> On 10/10/22 11:32, Andrew Burgess via Gdb-patches wrote: >>> Simon Marchi writes: >>> >>>> On 2022-10-08 12:00, Andrew Burgess wrote: >>>>> Simon Marchi 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). >>> >> >> I found this independently and filed a PR ( >> https://sourceware.org/bugzilla/show_bug.cgi?id=29664 ) and wrote the >> same fix (in the same three test-cases), and was about to commit ... >> >> The FAIL is caused by using gdb_py_test_silent_cmd, which adds a "\n" at >> the end of the command in combination with "\004", causing a stray "\n" >> that generates an extra prompt, which makes the prompt matching >> unpredictable. > > Apologies for the duplicated effort. Also, thanks for the explanation, > which, if I'd spotted sooner would have saved me investigating the > problem. > > Again, thanks for picking up after me, and apologies for wasting your > time. > Hi Andrew, thanks for following up. Luckily most of my time went to investigating the root cause (which had me puzzled for quite a bit), so that's not effort wasted. Also, I forgot to check the mailing list to see if the FAIL was already noted there, so that's on me. Anyway, I propose to error out in gdb_test_multiple on this specific pattern. Dealing with ^C / ^D for now. Not tested yet (I'll start testing in now in combination with the proposed patch to fix the build). WDYT? Thanks, - Tom