aboutsummaryrefslogtreecommitdiff
path: root/gdb/valprint.c
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2006-01-18 21:24:19 +0000
committerMark Kettenis <kettenis@gnu.org>2006-01-18 21:24:19 +0000
commit4f2aea11c7b01ee007960f6546b58846df591535 (patch)
tree3a757390fe50177c82e2e416d863290111fd3d58 /gdb/valprint.c
parent67a4f2b710581acc83afecff55424af285ecbc28 (diff)
downloadgdb-4f2aea11c7b01ee007960f6546b58846df591535.zip
gdb-4f2aea11c7b01ee007960f6546b58846df591535.tar.gz
gdb-4f2aea11c7b01ee007960f6546b58846df591535.tar.bz2
Based on a previous patch form Michal Ludvig:
* gdbtypes.c (append_flags_type_flag, init_flags_type): New functions. (is_integral_type, rank_one_type, recursive_dump_type): Add support for TYPE_CODE_FLAGS. * gdbtypes.h (enum type_code): Add TYPE_CODE_FLAGS. (append_flags_type_field, init_flags_type): New prototypes. * ada-valprint.c (ada_val_print_1): Add support for TYPE_CODE_FLAGS. * c-valprint.c (c_val_print): Likewise. * f-valprint.c (f_val_print): Likewise. * p-valprint.c (pascal_val_print): Likewise. * valprint.c (val_print_type_code_flags): New function. * valprint.h (val_print_type_code_flags): New prototype. * value.c (unpack_long, value_from_longest): Add support for TYPE_CODE_FLAGS.
Diffstat (limited to 'gdb/valprint.c')
-rw-r--r--gdb/valprint.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gdb/valprint.c b/gdb/valprint.c
index 0e1359a..b3a411a 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -326,6 +326,27 @@ val_print_type_code_int (struct type *type, const gdb_byte *valaddr,
}
}
+void
+val_print_type_code_flags (struct type *type, const gdb_byte *valaddr,
+ struct ui_file *stream)
+{
+ LONGEST 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_NAME (type, bitpos))
+ fprintf_filtered (stream, "%s ", TYPE_FIELD_NAME (type, bitpos));
+ else
+ fprintf_filtered (stream, "#%d ", bitpos);
+ }
+ }
+ fputs_filtered ("]", stream);
+}
+
/* Print a number according to FORMAT which is one of d,u,x,o,b,h,w,g.
The raison d'etre of this function is to consolidate printing of
LONG_LONG's into this one function. The format chars b,h,w,g are