aboutsummaryrefslogtreecommitdiff
path: root/gdb/expprint.c
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2021-01-11 15:40:18 +0000
committerAndrew Burgess <andrew.burgess@embecosm.com>2021-01-12 09:44:08 +0000
commitce38f5edf1de7edefa983fd0d71a25ea8d2140b8 (patch)
treeb8800fd6933cf89ac24948241b584a1aac23c144 /gdb/expprint.c
parent7c654b719d2c186bd645a560525dd3e9c86d15cd (diff)
downloadfsf-binutils-gdb-ce38f5edf1de7edefa983fd0d71a25ea8d2140b8.zip
fsf-binutils-gdb-ce38f5edf1de7edefa983fd0d71a25ea8d2140b8.tar.gz
fsf-binutils-gdb-ce38f5edf1de7edefa983fd0d71a25ea8d2140b8.tar.bz2
gdb: fix debug dump of OP_BOOL expressions
Consider this GDB session: (gdb) set language fortran (gdb) set debug expression 1 (gdb) p .TRUE. Dump of expression @ 0x4055d90, before conversion to prefix form: Language fortran, 3 elements, 16 bytes each. Index Opcode Hex Value String Value 0 OP_BOOL 79 O............... 1 BINOP_ADD 1 ................ 2 OP_BOOL 79 O............... Dump of expression @ 0x4055d90, after conversion to prefix form: Expression: `TRUE' Language fortran, 3 elements, 16 bytes each. 0 OP_BOOL Unknown format 1 BINOP_ADD 2 OP_BOOL Unknown format 3 OP_NULL Unknown format $1 = .TRUE. The final dump of the OP_BOOL is completely wrong. After this patch we now get: (gdb) set language fortran (gdb) set debug expression 1 (gdb) p .TRUE. Dump of expression @ 0x2d07470, before conversion to prefix form: Language fortran, 3 elements, 16 bytes each. Index Opcode Hex Value String Value 0 OP_BOOL 79 O............... 1 BINOP_ADD 1 ................ 2 OP_BOOL 79 O............... Dump of expression @ 0x2d07470, after conversion to prefix form: Expression: `TRUE' Language fortran, 3 elements, 16 bytes each. 0 OP_BOOL TRUE $1 = .TRUE. Much better. I added a test for this into the Fortran testsuite. gdb/ChangeLog: * expprint.c (dump_subexp_body_standard): Handle OP_BOOL. gdb/testsuite/ChangeLog: * gdb.fortran/debug-expr.exp: Add new tests.
Diffstat (limited to 'gdb/expprint.c')
-rw-r--r--gdb/expprint.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gdb/expprint.c b/gdb/expprint.c
index f75874b..d95835f 100644
--- a/gdb/expprint.c
+++ b/gdb/expprint.c
@@ -1121,11 +1121,18 @@ dump_subexp_body_standard (struct expression *exp,
}
break;
+ case OP_BOOL:
+ {
+ bool val = (bool) (exp->elts[elt].longconst);
+ fputs_filtered (val ? "TRUE" : "FALSE", stream);
+ elt += 2;
+ }
+ break;
+
default:
case OP_NULL:
case MULTI_SUBSCRIPT:
case OP_COMPLEX:
- case OP_BOOL:
case OP_M2_STRING:
case OP_THIS:
case OP_NAME: