[gdb] Fix maint selftest -v print_one_insn
authorTom de Vries <tdevries@suse.de>
Mon, 6 Jun 2022 17:27:46 +0000 (19:27 +0200)
committerTom de Vries <tdevries@suse.de>
Mon, 6 Jun 2022 17:27:46 +0000 (19:27 +0200)
When running the print_one_insn selftests with -v, I get:
...
$ gdb -q -batch -ex "maint selftest -v print_one_insn"
Running selftest print_one_insn::A6.
.shor   0x783eRunning selftest print_one_insn::A7.
trap_s  0x1Running selftest print_one_insn::ARC600.
.shor   0x783eRunning selftest print_one_insn::ARC601.
Running selftest print_one_insn::ARC700.
trap_s  0x1Running selftest print_one_insn::ARCv2.
trap_s  0x1Running selftest print_one_insn::EM.
trap_s  0x1Running selftest print_one_insn::HS.
trap_s  0x1Running selftest print_one_insn::Loongarch32.
...

The insn is written to gdb_stdout, and there is code in the selftest to add a
newline after the insn, which writes to stream().

The stream() ui_file points into a string buffer, which the disassembler uses
before writing to gdb_stdout, so writing into it after the disassembler has
finished has no effect.

Fix this by using gdb_stdlog and debug_printf (which is what the unit test
infrastructure itself uses) instead, such that we have:
...
Running selftest print_one_insn::A6.
.shor   0x783e
Running selftest print_one_insn::A7.
trap_s  0x1
Running selftest print_one_insn::ARC600.
.shor   0x783e
Running selftest print_one_insn::ARC601.
Running selftest print_one_insn::ARC700.
trap_s  0x1
Running selftest print_one_insn::ARCv2.
trap_s  0x1
Running selftest print_one_insn::Loongarch32.
...

Note: I've also removed the printing of arch_name, which would give
us otherwise the redundant:
...
Running selftest print_one_insn::A6.
arc .shor       0x783e
Running selftest print_one_insn::A7.
arc trap_s      0x1
...

Tested on x86_64-linux.

gdb/disasm-selftests.c

index b3c5d997720427972c5a252b338d0910b9938a87..266745d01c7840d1d1447a8d79f24b80ba9405a7 100644 (file)
@@ -171,7 +171,7 @@ print_one_insn_test (struct gdbarch *gdbarch)
                                    const gdb_byte *insn,
                                    size_t len)
       : gdb_disassembler (gdbarch,
-                         (run_verbose () ? gdb_stdout : &null_stream),
+                         (run_verbose () ? gdb_stdlog : &null_stream),
                          gdb_disassembler_test::read_memory),
        m_insn (insn), m_len (len)
     {
@@ -180,16 +180,10 @@ print_one_insn_test (struct gdbarch *gdbarch)
     int
     print_insn (CORE_ADDR memaddr)
     {
-      if (run_verbose ())
-       {
-         gdb_printf (stream (), "%s ",
-                     gdbarch_bfd_arch_info (arch ())->arch_name);
-       }
-
       int len = gdb_disassembler::print_insn (memaddr);
 
       if (run_verbose ())
-       gdb_printf (stream (), "\n");
+       debug_printf ("\n");
 
       return len;
     }