[pushed] Fix DWARF disassembly of DW_OP_const_type

Message ID 20200403151613.11815-1-tromey@adacore.com
State New
Headers show
Series
  • [pushed] Fix DWARF disassembly of DW_OP_const_type
Related show

Commit Message

Tom Tromey April 3, 2020, 3:16 p.m.
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    | 5 +++++
 gdb/dwarf2/loc.c | 6 ++++++
 2 files changed, 11 insertions(+)

-- 
2.21.1

Patch

diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c
index 6440335ccbd..fc54e16ffdd 100644
--- a/gdb/dwarf2/loc.c
+++ b/gdb/dwarf2/loc.c
@@ -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;