Fix DWARF disassembly of DW_OP_const_type
authorTom Tromey <tromey@adacore.com>
Fri, 3 Apr 2020 15:11:55 +0000 (09:11 -0600)
committerTom Tromey <tromey@adacore.com>
Fri, 3 Apr 2020 15:15:41 +0000 (09:15 -0600)
While debugging another issue, I noticed that disassembling a DWARF
expression using DW_OP_const_type did not work.
disassemble_dwarf_expression was not properly decoding this operation.

This patch fixes the problem.  Tested by re-debugging gdb.

I didn't write a test case because that seemed like overkill for
what's essentially a maintainer's helper.

The expression evaluator does decode this properly, so no other change
was needed.

gdb/ChangeLog
2020-04-03  Tom Tromey  <tromey@adacore.com>

* dwarf2/loc.c (disassemble_dwarf_expression) <DW_OP_const_type>:
Read constant block.

gdb/ChangeLog
gdb/dwarf2/loc.c

index e93725129d57caaac548883c05820e86e6de7f81..86d949b212c903c099c9345ecf85b8defaf6786a 100644 (file)
@@ -1,3 +1,8 @@
+2020-04-03  Tom Tromey  <tromey@adacore.com>
+
+       * dwarf2/loc.c (disassemble_dwarf_expression) <DW_OP_const_type>:
+       Read constant block.
+
 2020-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * gdb_bfd.h: Include gdbsupport/byte-vector.h.
index 6440335ccbde8e809d78753c020e1ba82f08920c..fc54e16ffdd1dd5a3312846d9eb8364a02692834 100644 (file)
@@ -4082,6 +4082,12 @@ disassemble_dwarf_expression (struct ui_file *stream,
            type_print (type, "", stream, -1);
            fprintf_filtered (stream, " [0x%s]>",
                              phex_nz (to_underlying (type_die), 0));
+
+           int n = *data++;
+           fprintf_filtered (stream, " %d byte block:", n);
+           for (int i = 0; i < n; ++i)
+             fprintf_filtered (stream, " %02x", data[i]);
+           data += n;
          }
          break;