gdb: print unknown part of flag enum in hex

When we print the "unknown" part of a flag enum, it is printed in
decimal.  I think it would be more useful if it was printed in hex, as
it helps to determine which bits are set more than a decimal value.

gdb/ChangeLog:

	* valprint.c (generic_val_print_enum_1): Print unknown part of
	flag enum in hex.

gdb/testsuite/ChangeLog:

	* gdb.base/printcmds.exp (test_print_enums): Expect hex values
	for "unknown".
This commit is contained in:
Simon Marchi 2020-02-18 17:30:21 -05:00
parent 6740f0cc3b
commit b29a2df000
4 changed files with 14 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2020-02-18 Simon Marchi <simon.marchi@efficios.com>
* valprint.c (generic_val_print_enum_1): Print unknown part of
flag enum in hex.
2020-02-18 Simon Marchi <simon.marchi@efficios.com>
* dwarf2/read.c (update_enumeration_type_from_children): Allow

View File

@ -1,3 +1,8 @@
2020-02-18 Simon Marchi <simon.marchi@efficios.com>
* gdb.base/printcmds.exp (test_print_enums): Expect hex values
for "unknown".
2020-02-18 Simon Marchi <simon.marchi@efficios.com>
* gdb.base/printcmds.c (enum flag_enum): Add FE_TWO_LEGACY

View File

@ -743,10 +743,10 @@ 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: 0)"]
gdb_test "print flag_enum_without_zero" [string_to_regexp " = (unknown: 0x0)"]
# Print a flag enum with unknown bits set.
gdb_test "print (enum flag_enum) 0xf1" [string_to_regexp " = (FE_ONE | unknown: 240)"]
gdb_test "print (enum flag_enum) 0xf1" [string_to_regexp " = (FE_ONE | unknown: 0xf0)"]
# Test printing an enum not considered a "flag enum" (because one of its
# enumerators has multiple bits set).

View File

@ -660,8 +660,8 @@ generic_val_print_enum_1 (struct type *type, LONGEST val,
{
if (!first)
fputs_filtered (" | ", stream);
fputs_filtered ("unknown: ", stream);
print_longest (stream, 'd', 0, val);
fputs_filtered ("unknown: 0x", stream);
print_longest (stream, 'x', 0, val);
}
fputs_filtered (")", stream);