diff options
-rw-r--r-- | gdb/ChangeLog | 3 | ||||
-rw-r--r-- | gdb/valprint.c | 5 |
2 files changed, 6 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 618a1de..7ac7591 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,8 @@ 2006-08-22 Mark Kettenis <kettenis@gnu.org> + * valprint.c (val_print_type_code_flags): Fix for bitfields larger + than 32 bits. + * gdbtypes.c (init_flags_type): Set all fields to zero instead of just the first one. diff --git a/gdb/valprint.c b/gdb/valprint.c index d730917..4f834f2 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -341,13 +341,14 @@ void val_print_type_code_flags (struct type *type, const gdb_byte *valaddr, struct ui_file *stream) { - LONGEST val = unpack_long (type, valaddr); + ULONGEST val = unpack_long (type, valaddr); int bitpos, nfields = TYPE_NFIELDS (type); fputs_filtered ("[ ", stream); for (bitpos = 0; bitpos < nfields; bitpos++) { - if (TYPE_FIELD_BITPOS (type, bitpos) != -1 && (val & (1 << bitpos))) + if (TYPE_FIELD_BITPOS (type, bitpos) != -1 && + (val & ((ULONGEST)1 << bitpos))) { if (TYPE_FIELD_NAME (type, bitpos)) fprintf_filtered (stream, "%s ", TYPE_FIELD_NAME (type, bitpos)); |