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.
This commit is contained in:
parent
7c654b719d
commit
ce38f5edf1
4 changed files with 24 additions and 1 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
2021-01-12 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
|
* expprint.c (dump_subexp_body_standard): Handle OP_BOOL.
|
||||||
|
|
||||||
2021-01-12 Andrew Burgess <andrew.burgess@embecosm.com>
|
2021-01-12 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* f-exp.y (dot_ops): Rename to...
|
* f-exp.y (dot_ops): Rename to...
|
||||||
|
|
|
@ -1121,11 +1121,18 @@ dump_subexp_body_standard (struct expression *exp,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OP_BOOL:
|
||||||
|
{
|
||||||
|
bool val = (bool) (exp->elts[elt].longconst);
|
||||||
|
fputs_filtered (val ? "TRUE" : "FALSE", stream);
|
||||||
|
elt += 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
case OP_NULL:
|
case OP_NULL:
|
||||||
case MULTI_SUBSCRIPT:
|
case MULTI_SUBSCRIPT:
|
||||||
case OP_COMPLEX:
|
case OP_COMPLEX:
|
||||||
case OP_BOOL:
|
|
||||||
case OP_M2_STRING:
|
case OP_M2_STRING:
|
||||||
case OP_THIS:
|
case OP_THIS:
|
||||||
case OP_NAME:
|
case OP_NAME:
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2021-01-12 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
|
* gdb.fortran/debug-expr.exp: Add new tests.
|
||||||
|
|
||||||
2021-01-12 Andrew Burgess <andrew.burgess@embecosm.com>
|
2021-01-12 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* gdb.fortran/dot-ops.exp: Add new tests.
|
* gdb.fortran/dot-ops.exp: Add new tests.
|
||||||
|
|
|
@ -41,3 +41,11 @@ gdb_continue_to_breakpoint "Break Here"
|
||||||
|
|
||||||
gdb_test_no_output "set debug expression 1"
|
gdb_test_no_output "set debug expression 1"
|
||||||
gdb_test_debug_expr "print obj%three(1)%two(1)%one(1)%i" "\\\$$decimal = 1"
|
gdb_test_debug_expr "print obj%three(1)%two(1)%one(1)%i" "\\\$$decimal = 1"
|
||||||
|
gdb_test_debug_expr "print .TRUE." [multi_line \
|
||||||
|
"" \
|
||||||
|
"\\s+0\\s+OP_BOOL\\s+TRUE" \
|
||||||
|
"\\\$$decimal = \.TRUE\."]
|
||||||
|
gdb_test_debug_expr "print .FALSE." [multi_line \
|
||||||
|
"" \
|
||||||
|
"\\s+0\\s+OP_BOOL\\s+FALSE" \
|
||||||
|
"\\\$$decimal = \.FALSE\."]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue