This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 4/5] gdb: print unknown part of flag enum in hex


On 2/13/20 5:30 PM, Simon Marchi wrote:
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.


Would it be better to mention the offending bit position explicitly? The hex value could be displayed along with it as well.

I mean, in both decimal and hex you'd need to do some calculations to figure out the bit position anyway. Might as well make it easier for developers by displaying the information.

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".
---
  gdb/testsuite/gdb.base/printcmds.exp | 4 ++--
  gdb/valprint.c                       | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp
index 6afb965af066..d6f5c75650bf 100644
--- a/gdb/testsuite/gdb.base/printcmds.exp
+++ b/gdb/testsuite/gdb.base/printcmds.exp
@@ -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).
diff --git a/gdb/valprint.c b/gdb/valprint.c
index 77b9a4993d79..bd21be69e1bf 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -659,8 +659,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);



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]