diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2020-02-18 17:30:51 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2020-02-18 17:33:04 -0500 |
commit | 373d7ac0f158764e32d621b4d311771189001f1c (patch) | |
tree | b84c51bb2cf862f65a44d85abd3d8fe8d5f5b3cd /gdb/valprint.c | |
parent | b29a2df0002f541b5408ee28f1f8e88c844d2ffc (diff) | |
download | gdb-373d7ac0f158764e32d621b4d311771189001f1c.zip gdb-373d7ac0f158764e32d621b4d311771189001f1c.tar.gz gdb-373d7ac0f158764e32d621b4d311771189001f1c.tar.bz2 |
gdb: change print format of flag enums with value 0
If a flag enum has value 0 and the enumeration type does not have an
enumerator with value 0, we currently print:
$1 = (unknown: 0x0)
I don't like the display of "unknown" here, since for flags, 0 is a
an expected value. It just means that no flags are set. This patch
makes it so that we print it as a simple 0 in this situation:
$1 = 0
If there is an enumerator with value 0, it is still printed using that
enumerator, for example (from the test):
$1 = FE_NONE
gdb/ChangeLog:
* valprint.c (generic_val_print_enum_1): When printing a flag
enum with value 0 and there is no enumerator with value 0, print
just "0" instead of "(unknown: 0x0)".
gdb/testsuite/ChangeLog:
* gdb.base/printcmds.exp (test_print_enums): Update expected
output.
Diffstat (limited to 'gdb/valprint.c')
-rw-r--r-- | gdb/valprint.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/gdb/valprint.c b/gdb/valprint.c index 67049e7..ee37022 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -635,7 +635,6 @@ generic_val_print_enum_1 (struct type *type, LONGEST val, appropriate. The enum may have multiple enumerators representing the same bit, in which case we choose to only print the first one we find. */ - fputs_filtered ("(", stream); for (i = 0; i < len; ++i) { QUIT; @@ -647,24 +646,42 @@ generic_val_print_enum_1 (struct type *type, LONGEST val, if ((val & enumval) != 0) { - if (!first) + if (first) + { + fputs_filtered ("(", stream); + first = 0; + } + else fputs_filtered (" | ", stream); - first = 0; val &= ~TYPE_FIELD_ENUMVAL (type, i); fputs_filtered (TYPE_FIELD_NAME (type, i), stream); } } - if (first || val != 0) + if (val != 0) { - if (!first) + /* There are leftover bits, print them. */ + if (first) + fputs_filtered ("(", stream); + else fputs_filtered (" | ", stream); + fputs_filtered ("unknown: 0x", stream); print_longest (stream, 'x', 0, val); + fputs_filtered (")", stream); + } + else if (first) + { + /* Nothing has been printed and the value is 0, the enum value must + have been 0. */ + fputs_filtered ("0", stream); + } + else + { + /* Something has been printed, close the parenthesis. */ + fputs_filtered (")", stream); } - - fputs_filtered (")", stream); } else print_longest (stream, 'd', 0, val); |