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.
This commit is contained in:
parent
b29a2df000
commit
373d7ac0f1
|
@ -1,3 +1,9 @@
|
|||
2020-02-18 Simon Marchi <simon.marchi@efficios.com>
|
||||
|
||||
* 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)".
|
||||
|
||||
2020-02-18 Simon Marchi <simon.marchi@efficios.com>
|
||||
|
||||
* valprint.c (generic_val_print_enum_1): Print unknown part of
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2020-02-18 Simon Marchi <simon.marchi@efficios.com>
|
||||
|
||||
* gdb.base/printcmds.exp (test_print_enums): Update expected
|
||||
output.
|
||||
|
||||
2020-02-18 Simon Marchi <simon.marchi@efficios.com>
|
||||
|
||||
* gdb.base/printcmds.exp (test_print_enums): Expect hex values
|
||||
|
|
|
@ -743,7 +743,7 @@ proc test_print_enums {} {
|
|||
gdb_test "print (enum flag_enum) 0x0" [string_to_regexp " = FE_NONE"]
|
||||
|
||||
# Print a flag enum with value 0, where no enumerator has value 0.
|
||||
gdb_test "print flag_enum_without_zero" [string_to_regexp " = (unknown: 0x0)"]
|
||||
gdb_test "print flag_enum_without_zero" [string_to_regexp " = 0"]
|
||||
|
||||
# Print a flag enum with unknown bits set.
|
||||
gdb_test "print (enum flag_enum) 0xf1" [string_to_regexp " = (FE_ONE | unknown: 0xf0)"]
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue