On Sun, Feb 28, 2010 at 4:56 PM, H.J. Lu wrote: > On Sun, Feb 28, 2010 at 4:15 PM, H.J. Lu wrote: >> On Mon, Feb 22, 2010 at 8:45 AM, Daniel Jacobowitz wrote: >>> Hi H.J., >>> >>> This patch adds support to the XML language.  Could you try >>> using this to move the two x86 flags registers from out of >>> target-descriptions.c? >>> >>> The flags support is straightforward and covered by the manual. >>> It's not tested because I couldn't find a way to do so; you can't >>> ptype a flags register, and you can't add dummy registers whose value >>> you can get at, only for ptype. >>> >>> The patch also adds , which is a little more interesting. >>> It's got two forms: >>> >>> * Register containing integer bitfields.  Each field must be >>> explicitly positioned.  The size must be pre-declared - otherwise >>> the representation GDB uses for big-endian bitfields can't figure out >>> how far from the MSB edge of the register the field is. >>> >>> * Register containing typed non-bitfield structures.  Each field must >>> be implicitly positioned.  There's no support for padding. >>> >>> These are somewhat annoying limitations, but they suffice for >>> everything I've needed this for since I wrote the patch, which was >>> originally several years ago; it's been stuck in my submission queue >>> because it was tangled up with other local patches.  Since they are >>> "must" restrictions, they are easy to lift in the future; we can make >>> GDB more permissive. >>> >>> These I was able to type, although I'd have liked more exhaustive >>> tests... for that, I'd need typeof, which turns out to be annoyingly >>> hard to implement in GDB's parser :-( >>> >>> Eli, how's the documentation? >>> >>> -- >>> Daniel Jacobowitz >>> CodeSourcery >>> >>> 2010-02-22  Daniel Jacobowitz   >>> >>>        * gdbtypes.c (append_composite_type_field_raw): New. >>>        (append_composite_type_field_aligned): Use the new function. >>>        * gdbtypes.h (append_composite_type_field_raw): Declare. >>>        * target-descriptions.c (struct tdesc_type_field): Add start and end. >>>        (struct tdesc_type_flag): New type. >>>        (struct tdesc_type): Add TDESC_TYPE_STRUCT and TDESC_TYPE_FLAGS to >>>        kind.  Add size to u.u.  Add u.f for flags. >>>        (tdesc_gdb_type): Handle TDESC_TYPE_STRUCT and TDESC_TYPE_FLAGS. >>>        (tdesc_free_type): Likewise. >>>        (tdesc_create_struct, tdesc_set_struct_size, tdesc_create_flags): New. >>>        (tdesc_add_field): Handle TDESC_TYPE_STRUCT. >>>        (tdesc_add_bitfield, tdesc_add_flag): New. >>>        * target-descriptions.h (tdesc_create_struct, tdesc_set_struct_size) >>>        (tdesc_create_flags, tdesc_add_bitfield, tdesc_add_flag): Declare. >>>        * xml-tdesc.c (struct tdesc_parsing_data): Rename current_union to >>>        current_type.  Add current_type_size and current_type_is_flags. >>>        (tdesc_start_union): Clear the new fields. >>>        (tdesc_start_struct, tdesc_start_flags): New. >>>        (tdesc_start_field): Handle struct fields, including bitfields. >>>        (field_attributes): Make type optional.  Add start and end. >>>        (union_children): Rename to struct_union_children. >>>        (union_attributes): Rename to struct_union_attributes.  Add optional >>>        size. >>>        (flags_attributes): New. >>>        (feature_children): Add struct and flags. >>>        * features/gdb-target.dtd: Add flags and struct to features. >>>        Make field type optional.  Add field start and end. >>> >>>        * gdb.texinfo (Types): Describe and . >>> >>>        * gdb.xml/extra-regs.xml: Add struct1, struct2, and flags >>>        types.  Add structreg, bitfields, and flags registers. >>>        * gdb.xml/tdesc-regs.exp: Test structreg and bitfields >>>        registers. >>> >> >> It doesn't work. "case TDESC_TYPE_FLAGS:" is missing in >> maint_print_c_tdesc_cmd. >> >> > > This patch makes it to work. However, there is no equivalent of > > append_flags_type_flag (type, 1, NULL); > > I have > >   >     >     >     > .... > > I got > > (gdb) p $eflags > $1 = [  PF ZF IF ] >           ^ extra white space > (gdb) > > instead of > (gdb) p $eflags > $1 = [ PF ZF IF ] > (gdb) > Hi Daniel, This patch on top of yours works. Thanks. -- H.J.