Fix "maintenance selftest" printing stray instructions
authorPedro Alves <palves@redhat.com>
Thu, 2 Feb 2017 23:36:29 +0000 (23:36 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 2 Feb 2017 23:36:29 +0000 (23:36 +0000)
The "maintenance selftest" command is printing odd bits of stray
instructions like:

~~~
brkwarning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB.  Attempting to continue with the default HS settings.

brkmov  r0, #0mov       r0, #0mov       r0, #0mov       r0, #0mov       r0, #0mov       r0, #0mov       r0, #0mov       r0, #0mov       r0, #0mov       r0, #0mov       r0, #0mov   r0, #0mov       r0, #0mov       r0, #0mov       r0, #0breakbreakbreakbreakbreakbreakbreakbreakbreakbreakbreakbreakbreakbreakbreakbreakbreakbreakbreakM3.L = 0xffff;/* ( -1) M3=0x0xffff(65535) */break 8break 8warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB.  Attempting to continue with the default cris:common_v10_v32 settings.
~~~

etc.  Those appear because here:

  class gdb_disassembler_test : public gdb_disassembler
  {
  public:

    const bool verbose = false;

    explicit gdb_disassembler_test (struct gdbarch *gdbarch,
    const gdb_byte *insn,
    size_t len)
      : gdb_disassembler (gdbarch,
  (verbose ? gdb_stdout : &null_stream),
  gdb_disassembler_test::read_memory),

specifically in this line:

  (verbose ? gdb_stdout : &null_stream),

"verbose" has not been initialized yet, because the order of
initialization is base classes first, then members.  I.e. "verbose" is
only initialized after the base constructor is called.  Since the
gdb_disassembler_test object is created on the stack, "verbose" has
garbage at that point.  If the gargage is non-zero, then we end up
with the gdb_disassembler_test's stream incorrectly pointing to
gdb_stdout.

gdb/ChangeLog:
2017-02-02  Pedro Alves  <palves@redhat.com>

* disasm-selftests.c (print_one_insn_test): Move the "verbose"
field out of gdb_disassembler_test and make it static.

gdb/ChangeLog

index 95dfd00b0ac1f189bcc4d3dcde3ed4d4a738d763..202c90ce6a232fe78195a12bbb958b4f6de08699 100644 (file)
@@ -1,3 +1,8 @@
+2017-02-02  Pedro Alves  <palves@redhat.com>
+
+       * disasm-selftests.c (print_one_insn_test): Move the "verbose"
+       field out of gdb_disassembler_test and make it static.
+
 2017-02-02  Pedro Alves  <palves@redhat.com>
 
        * mi/mi-common.h (struct mi_interp): Delete the mi2_interp,