diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2021-01-11 15:40:18 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2021-01-12 09:44:08 +0000 |
commit | ce38f5edf1de7edefa983fd0d71a25ea8d2140b8 (patch) | |
tree | b8800fd6933cf89ac24948241b584a1aac23c144 /gdb | |
parent | 7c654b719d2c186bd645a560525dd3e9c86d15cd (diff) | |
download | binutils-ce38f5edf1de7edefa983fd0d71a25ea8d2140b8.zip binutils-ce38f5edf1de7edefa983fd0d71a25ea8d2140b8.tar.gz binutils-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')
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/expprint.c | 9 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.fortran/debug-expr.exp | 8 |
4 files changed, 24 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 720d3b2..d4a1b98 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,9 @@ 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> + * f-exp.y (dot_ops): Rename to... (fortran_operators): ...this. Add a header comment. Add symbol based operators. 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: diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e31b712..0cae318 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,9 @@ 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> + * gdb.fortran/dot-ops.exp: Add new tests. 2021-01-11 Tom de Vries <tdevries@suse.de> diff --git a/gdb/testsuite/gdb.fortran/debug-expr.exp b/gdb/testsuite/gdb.fortran/debug-expr.exp index 4111d8d..fd63ea7 100644 --- a/gdb/testsuite/gdb.fortran/debug-expr.exp +++ b/gdb/testsuite/gdb.fortran/debug-expr.exp @@ -41,3 +41,11 @@ gdb_continue_to_breakpoint "Break Here" 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 .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\."] |