aboutsummaryrefslogtreecommitdiff
path: root/gdb/valprint.c
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2020-02-18 17:30:51 -0500
committerSimon Marchi <simon.marchi@efficios.com>2020-02-18 17:33:04 -0500
commit373d7ac0f158764e32d621b4d311771189001f1c (patch)
treeb84c51bb2cf862f65a44d85abd3d8fe8d5f5b3cd /gdb/valprint.c
parentb29a2df0002f541b5408ee28f1f8e88c844d2ffc (diff)
downloadgdb-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.c31
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);