aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2020-04-03 09:11:55 -0600
committerTom Tromey <tromey@adacore.com>2020-04-03 09:15:41 -0600
commitd9e49b61691f384447242f54c996fe80ef9bf184 (patch)
treefb153a956ccb31fea078e280d952360fdd73ae38
parent492c3f03c701c911c9873eb4dd757fdb5fb13fd8 (diff)
downloadfsf-binutils-gdb-d9e49b61691f384447242f54c996fe80ef9bf184.zip
fsf-binutils-gdb-d9e49b61691f384447242f54c996fe80ef9bf184.tar.gz
fsf-binutils-gdb-d9e49b61691f384447242f54c996fe80ef9bf184.tar.bz2
Fix DWARF disassembly of DW_OP_const_type
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.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/dwarf2/loc.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e937251..86d949b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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.
diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c
index 6440335..fc54e16 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;