Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "H.J. Lu" <hjl.tools@gmail.com>
To: gdb-patches@sourceware.org, Daniel Jacobowitz <dan@codesourcery.com>
Subject: Re: [patch] Add support for <struct> and <flags> in target  	descriptions
Date: Mon, 01 Mar 2010 02:20:00 -0000	[thread overview]
Message-ID: <6dc9ffc81002281820o4e297e49j4e611d46c76de736@mail.gmail.com> (raw)
In-Reply-To: <6dc9ffc81002281656s1662374etd945bc11626fa1f9@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 4650 bytes --]

On Sun, Feb 28, 2010 at 4:56 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Sun, Feb 28, 2010 at 4:15 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> On Mon, Feb 22, 2010 at 8:45 AM, Daniel Jacobowitz <dan@codesourcery.com> wrote:
>>> Hi H.J.,
>>>
>>> This patch adds <flags> 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 <struct>, 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  <dan@codesourcery.com>
>>>
>>>        * 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 <struct> and <flags>.
>>>
>>>        * 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
>
>  <flags id="i386_eflags" size="4">
>    <field name="CF" start="0" end="0"/>
>    <field name="" start="1" end="1"/>
>    <field name="PF" start="2" end="2"/>
> ....
>
> 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.

[-- Attachment #2: gdb-flag-2.patch --]
[-- Type: text/plain, Size: 18608 bytes --]

2010-02-28  H.J. Lu  <hongjiu.lu@intel.com>

	* target-descriptions.c (tdesc_type): Remove
	TDESC_TYPE_I386_EFLAGS and TDESC_TYPE_I386_MXCSR.
	(tdesc_predefined_types): Likewise.
	(tdesc_gdb_type): Likewise.  Pass NULL to append_flags_type_flag
	if flag name is empty.
	(maint_print_c_tdesc_cmd): Handle TDESC_TYPE_FLAGS.

	* features/i386/32bit-core.xml: Define i386_eflags.
	* features/i386/64bit-core.xml: Likewise.

	* features/i386/32bit-sse.xml: Define i386_mxcsr.
	* features/i386/64bit-sse.xml: Likewise.

	* features/i386/amd64-linux.c: Regenerated.
	* features/i386/amd64.c: Likewise.
	* features/i386/i386-linux.c: Likewise.
	* features/i386/i386.c: Likewise.

diff --git a/gdb/features/i386/32bit-core.xml b/gdb/features/i386/32bit-core.xml
index b047074..4d0377e 100644
--- a/gdb/features/i386/32bit-core.xml
+++ b/gdb/features/i386/32bit-core.xml
@@ -7,6 +7,26 @@
 
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.i386.core">
+  <flags id="i386_eflags" size="4">
+    <field name="CF" start="0" end="0"/>
+    <field name="" start="1" end="1"/>
+    <field name="PF" start="2" end="2"/>
+    <field name="AF" start="4" end="4"/>
+    <field name="ZF" start="6" end="6"/>
+    <field name="SF" start="7" end="7"/>
+    <field name="TF" start="8" end="8"/>
+    <field name="IF" start="9" end="9"/>
+    <field name="DF" start="10" end="10"/>
+    <field name="OF" start="11" end="11"/>
+    <field name="NT" start="14" end="14"/>
+    <field name="RF" start="16" end="16"/>
+    <field name="VM" start="17" end="17"/>
+    <field name="AC" start="18" end="18"/>
+    <field name="VIF" start="19" end="19"/>
+    <field name="VIP" start="20" end="20"/>
+    <field name="ID" start="21" end="21"/>
+  </flags>
+
   <reg name="eax" bitsize="32" type="int32"/>
   <reg name="ecx" bitsize="32" type="int32"/>
   <reg name="edx" bitsize="32" type="int32"/>
diff --git a/gdb/features/i386/32bit-sse.xml b/gdb/features/i386/32bit-sse.xml
index e849b8d..cca94b3 100644
--- a/gdb/features/i386/32bit-sse.xml
+++ b/gdb/features/i386/32bit-sse.xml
@@ -22,6 +22,22 @@
     <field name="v2_int64" type="v2i64"/>
     <field name="uint128" type="uint128"/>
   </union>
+  <flags id="i386_mxcsr" size="4">
+    <field name="IE" start="0" end="0"/>
+    <field name="DE" start="1" end="1"/>
+    <field name="ZE" start="2" end="2"/>
+    <field name="OE" start="3" end="3"/>
+    <field name="UE" start="4" end="4"/>
+    <field name="PE" start="5" end="5"/>
+    <field name="DAZ" start="6" end="6"/>
+    <field name="IM" start="7" end="7"/>
+    <field name="DM" start="8" end="8"/>
+    <field name="ZM" start="9" end="9"/>
+    <field name="OM" start="10" end="10"/>
+    <field name="UM" start="11" end="11"/>
+    <field name="PM" start="12" end="12"/>
+    <field name="FZ" start="15" end="15"/>
+  </flags>
 
   <reg name="xmm0" bitsize="128" type="vec128" regnum="32"/>
   <reg name="xmm1" bitsize="128" type="vec128"/>
diff --git a/gdb/features/i386/64bit-core.xml b/gdb/features/i386/64bit-core.xml
index ae41cf2..8cfe3fe 100644
--- a/gdb/features/i386/64bit-core.xml
+++ b/gdb/features/i386/64bit-core.xml
@@ -7,6 +7,26 @@
 
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.i386.core">
+  <flags id="i386_eflags" size="4">
+    <field name="CF" start="0" end="0"/>
+    <field name="" start="1" end="1"/>
+    <field name="PF" start="2" end="2"/>
+    <field name="AF" start="4" end="4"/>
+    <field name="ZF" start="6" end="6"/>
+    <field name="SF" start="7" end="7"/>
+    <field name="TF" start="8" end="8"/>
+    <field name="IF" start="9" end="9"/>
+    <field name="DF" start="10" end="10"/>
+    <field name="OF" start="11" end="11"/>
+    <field name="NT" start="14" end="14"/>
+    <field name="RF" start="16" end="16"/>
+    <field name="VM" start="17" end="17"/>
+    <field name="AC" start="18" end="18"/>
+    <field name="VIF" start="19" end="19"/>
+    <field name="VIP" start="20" end="20"/>
+    <field name="ID" start="21" end="21"/>
+  </flags>
+
   <reg name="rax" bitsize="64" type="int64"/>
   <reg name="rbx" bitsize="64" type="int64"/>
   <reg name="rcx" bitsize="64" type="int64"/>
diff --git a/gdb/features/i386/64bit-sse.xml b/gdb/features/i386/64bit-sse.xml
index a71fe78..d7f7925 100644
--- a/gdb/features/i386/64bit-sse.xml
+++ b/gdb/features/i386/64bit-sse.xml
@@ -22,6 +22,22 @@
     <field name="v2_int64" type="v2i64"/>
     <field name="uint128" type="uint128"/>
   </union>
+  <flags id="i386_mxcsr" size="4">
+    <field name="IE" start="0" end="0"/>
+    <field name="DE" start="1" end="1"/>
+    <field name="ZE" start="2" end="2"/>
+    <field name="OE" start="3" end="3"/>
+    <field name="UE" start="4" end="4"/>
+    <field name="PE" start="5" end="5"/>
+    <field name="DAZ" start="6" end="6"/>
+    <field name="IM" start="7" end="7"/>
+    <field name="DM" start="8" end="8"/>
+    <field name="ZM" start="9" end="9"/>
+    <field name="OM" start="10" end="10"/>
+    <field name="UM" start="11" end="11"/>
+    <field name="PM" start="12" end="12"/>
+    <field name="FZ" start="15" end="15"/>
+  </flags>
 
   <reg name="xmm0" bitsize="128" type="vec128" regnum="40"/>
   <reg name="xmm1" bitsize="128" type="vec128"/>
diff --git a/gdb/features/i386/amd64-linux.c b/gdb/features/i386/amd64-linux.c
index 64a29ce..71efcbe 100644
--- a/gdb/features/i386/amd64-linux.c
+++ b/gdb/features/i386/amd64-linux.c
@@ -17,6 +17,25 @@ initialize_tdesc_amd64_linux (void)
   set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  field_type = tdesc_create_flags (feature, "i386_eflags", 4);
+  tdesc_add_flag (field_type, 0, "CF");
+  tdesc_add_flag (field_type, 1, "");
+  tdesc_add_flag (field_type, 2, "PF");
+  tdesc_add_flag (field_type, 4, "AF");
+  tdesc_add_flag (field_type, 6, "ZF");
+  tdesc_add_flag (field_type, 7, "SF");
+  tdesc_add_flag (field_type, 8, "TF");
+  tdesc_add_flag (field_type, 9, "IF");
+  tdesc_add_flag (field_type, 10, "DF");
+  tdesc_add_flag (field_type, 11, "OF");
+  tdesc_add_flag (field_type, 14, "NT");
+  tdesc_add_flag (field_type, 16, "RF");
+  tdesc_add_flag (field_type, 17, "VM");
+  tdesc_add_flag (field_type, 18, "AC");
+  tdesc_add_flag (field_type, 19, "VIF");
+  tdesc_add_flag (field_type, 20, "VIP");
+  tdesc_add_flag (field_type, 21, "ID");
+
   tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
   tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
   tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
@@ -93,6 +112,22 @@ initialize_tdesc_amd64_linux (void)
   field_type = tdesc_named_type (feature, "uint128");
   tdesc_add_field (type, "uint128", field_type);
 
+  field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
+  tdesc_add_flag (field_type, 0, "IE");
+  tdesc_add_flag (field_type, 1, "DE");
+  tdesc_add_flag (field_type, 2, "ZE");
+  tdesc_add_flag (field_type, 3, "OE");
+  tdesc_add_flag (field_type, 4, "UE");
+  tdesc_add_flag (field_type, 5, "PE");
+  tdesc_add_flag (field_type, 6, "DAZ");
+  tdesc_add_flag (field_type, 7, "IM");
+  tdesc_add_flag (field_type, 8, "DM");
+  tdesc_add_flag (field_type, 9, "ZM");
+  tdesc_add_flag (field_type, 10, "OM");
+  tdesc_add_flag (field_type, 11, "UM");
+  tdesc_add_flag (field_type, 12, "PM");
+  tdesc_add_flag (field_type, 15, "FZ");
+
   tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
diff --git a/gdb/features/i386/amd64.c b/gdb/features/i386/amd64.c
index af7b729..154e8df 100644
--- a/gdb/features/i386/amd64.c
+++ b/gdb/features/i386/amd64.c
@@ -15,6 +15,25 @@ initialize_tdesc_amd64 (void)
   set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  field_type = tdesc_create_flags (feature, "i386_eflags", 4);
+  tdesc_add_flag (field_type, 0, "CF");
+  tdesc_add_flag (field_type, 1, "");
+  tdesc_add_flag (field_type, 2, "PF");
+  tdesc_add_flag (field_type, 4, "AF");
+  tdesc_add_flag (field_type, 6, "ZF");
+  tdesc_add_flag (field_type, 7, "SF");
+  tdesc_add_flag (field_type, 8, "TF");
+  tdesc_add_flag (field_type, 9, "IF");
+  tdesc_add_flag (field_type, 10, "DF");
+  tdesc_add_flag (field_type, 11, "OF");
+  tdesc_add_flag (field_type, 14, "NT");
+  tdesc_add_flag (field_type, 16, "RF");
+  tdesc_add_flag (field_type, 17, "VM");
+  tdesc_add_flag (field_type, 18, "AC");
+  tdesc_add_flag (field_type, 19, "VIF");
+  tdesc_add_flag (field_type, 20, "VIP");
+  tdesc_add_flag (field_type, 21, "ID");
+
   tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
   tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
   tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
@@ -91,6 +110,22 @@ initialize_tdesc_amd64 (void)
   field_type = tdesc_named_type (feature, "uint128");
   tdesc_add_field (type, "uint128", field_type);
 
+  field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
+  tdesc_add_flag (field_type, 0, "IE");
+  tdesc_add_flag (field_type, 1, "DE");
+  tdesc_add_flag (field_type, 2, "ZE");
+  tdesc_add_flag (field_type, 3, "OE");
+  tdesc_add_flag (field_type, 4, "UE");
+  tdesc_add_flag (field_type, 5, "PE");
+  tdesc_add_flag (field_type, 6, "DAZ");
+  tdesc_add_flag (field_type, 7, "IM");
+  tdesc_add_flag (field_type, 8, "DM");
+  tdesc_add_flag (field_type, 9, "ZM");
+  tdesc_add_flag (field_type, 10, "OM");
+  tdesc_add_flag (field_type, 11, "UM");
+  tdesc_add_flag (field_type, 12, "PM");
+  tdesc_add_flag (field_type, 15, "FZ");
+
   tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
diff --git a/gdb/features/i386/i386-linux.c b/gdb/features/i386/i386-linux.c
index 37447bd..cc1fb99 100644
--- a/gdb/features/i386/i386-linux.c
+++ b/gdb/features/i386/i386-linux.c
@@ -17,6 +17,25 @@ initialize_tdesc_i386_linux (void)
   set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  field_type = tdesc_create_flags (feature, "i386_eflags", 4);
+  tdesc_add_flag (field_type, 0, "CF");
+  tdesc_add_flag (field_type, 1, "");
+  tdesc_add_flag (field_type, 2, "PF");
+  tdesc_add_flag (field_type, 4, "AF");
+  tdesc_add_flag (field_type, 6, "ZF");
+  tdesc_add_flag (field_type, 7, "SF");
+  tdesc_add_flag (field_type, 8, "TF");
+  tdesc_add_flag (field_type, 9, "IF");
+  tdesc_add_flag (field_type, 10, "DF");
+  tdesc_add_flag (field_type, 11, "OF");
+  tdesc_add_flag (field_type, 14, "NT");
+  tdesc_add_flag (field_type, 16, "RF");
+  tdesc_add_flag (field_type, 17, "VM");
+  tdesc_add_flag (field_type, 18, "AC");
+  tdesc_add_flag (field_type, 19, "VIF");
+  tdesc_add_flag (field_type, 20, "VIP");
+  tdesc_add_flag (field_type, 21, "ID");
+
   tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
   tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
   tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
@@ -88,6 +107,22 @@ initialize_tdesc_i386_linux (void)
   field_type = tdesc_named_type (feature, "uint128");
   tdesc_add_field (type, "uint128", field_type);
 
+  field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
+  tdesc_add_flag (field_type, 0, "IE");
+  tdesc_add_flag (field_type, 1, "DE");
+  tdesc_add_flag (field_type, 2, "ZE");
+  tdesc_add_flag (field_type, 3, "OE");
+  tdesc_add_flag (field_type, 4, "UE");
+  tdesc_add_flag (field_type, 5, "PE");
+  tdesc_add_flag (field_type, 6, "DAZ");
+  tdesc_add_flag (field_type, 7, "IM");
+  tdesc_add_flag (field_type, 8, "DM");
+  tdesc_add_flag (field_type, 9, "ZM");
+  tdesc_add_flag (field_type, 10, "OM");
+  tdesc_add_flag (field_type, 11, "UM");
+  tdesc_add_flag (field_type, 12, "PM");
+  tdesc_add_flag (field_type, 15, "FZ");
+
   tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
diff --git a/gdb/features/i386/i386.c b/gdb/features/i386/i386.c
index 5ac9ad9..7f7beb3 100644
--- a/gdb/features/i386/i386.c
+++ b/gdb/features/i386/i386.c
@@ -15,6 +15,25 @@ initialize_tdesc_i386 (void)
   set_tdesc_architecture (result, bfd_scan_arch ("i386"));
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  field_type = tdesc_create_flags (feature, "i386_eflags", 4);
+  tdesc_add_flag (field_type, 0, "CF");
+  tdesc_add_flag (field_type, 1, "");
+  tdesc_add_flag (field_type, 2, "PF");
+  tdesc_add_flag (field_type, 4, "AF");
+  tdesc_add_flag (field_type, 6, "ZF");
+  tdesc_add_flag (field_type, 7, "SF");
+  tdesc_add_flag (field_type, 8, "TF");
+  tdesc_add_flag (field_type, 9, "IF");
+  tdesc_add_flag (field_type, 10, "DF");
+  tdesc_add_flag (field_type, 11, "OF");
+  tdesc_add_flag (field_type, 14, "NT");
+  tdesc_add_flag (field_type, 16, "RF");
+  tdesc_add_flag (field_type, 17, "VM");
+  tdesc_add_flag (field_type, 18, "AC");
+  tdesc_add_flag (field_type, 19, "VIF");
+  tdesc_add_flag (field_type, 20, "VIP");
+  tdesc_add_flag (field_type, 21, "ID");
+
   tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
   tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
   tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
@@ -83,6 +102,22 @@ initialize_tdesc_i386 (void)
   field_type = tdesc_named_type (feature, "uint128");
   tdesc_add_field (type, "uint128", field_type);
 
+  field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
+  tdesc_add_flag (field_type, 0, "IE");
+  tdesc_add_flag (field_type, 1, "DE");
+  tdesc_add_flag (field_type, 2, "ZE");
+  tdesc_add_flag (field_type, 3, "OE");
+  tdesc_add_flag (field_type, 4, "UE");
+  tdesc_add_flag (field_type, 5, "PE");
+  tdesc_add_flag (field_type, 6, "DAZ");
+  tdesc_add_flag (field_type, 7, "IM");
+  tdesc_add_flag (field_type, 8, "DM");
+  tdesc_add_flag (field_type, 9, "ZM");
+  tdesc_add_flag (field_type, 10, "OM");
+  tdesc_add_flag (field_type, 11, "UM");
+  tdesc_add_flag (field_type, 12, "PM");
+  tdesc_add_flag (field_type, 15, "FZ");
+
   tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index 77dd37b..86adc9d 100644
--- a/gdb/target-descriptions.c
+++ b/gdb/target-descriptions.c
@@ -126,8 +126,6 @@ typedef struct tdesc_type
     TDESC_TYPE_IEEE_DOUBLE,
     TDESC_TYPE_ARM_FPA_EXT,
     TDESC_TYPE_I387_EXT,
-    TDESC_TYPE_I386_EFLAGS,
-    TDESC_TYPE_I386_MXCSR,
 
     /* Types defined by a target feature.  */
     TDESC_TYPE_VECTOR,
@@ -483,9 +481,7 @@ static struct tdesc_type tdesc_predefined_types[] =
   { "ieee_single", TDESC_TYPE_IEEE_SINGLE },
   { "ieee_double", TDESC_TYPE_IEEE_DOUBLE },
   { "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT },
-  { "i387_ext", TDESC_TYPE_I387_EXT },
-  { "i386_eflags", TDESC_TYPE_I386_EFLAGS },
-  { "i386_mxcsr", TDESC_TYPE_I386_MXCSR }
+  { "i387_ext", TDESC_TYPE_I387_EXT }
 };
 
 /* Return the type associated with ID in the context of FEATURE, or
@@ -607,57 +603,6 @@ tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type)
       return arch_float_type (gdbarch, -1, "builtin_type_i387_ext",
 			      floatformats_i387_ext);
 
-    case TDESC_TYPE_I386_EFLAGS:
-      {
-	struct type *type;
-
-	type = arch_flags_type (gdbarch, "builtin_type_i386_eflags", 4);
-	append_flags_type_flag (type, 0, "CF");
-	append_flags_type_flag (type, 1, NULL);
-	append_flags_type_flag (type, 2, "PF");
-	append_flags_type_flag (type, 4, "AF");
-	append_flags_type_flag (type, 6, "ZF");
-	append_flags_type_flag (type, 7, "SF");
-	append_flags_type_flag (type, 8, "TF");
-	append_flags_type_flag (type, 9, "IF");
-	append_flags_type_flag (type, 10, "DF");
-	append_flags_type_flag (type, 11, "OF");
-	append_flags_type_flag (type, 14, "NT");
-	append_flags_type_flag (type, 16, "RF");
-	append_flags_type_flag (type, 17, "VM");
-	append_flags_type_flag (type, 18, "AC");
-	append_flags_type_flag (type, 19, "VIF");
-	append_flags_type_flag (type, 20, "VIP");
-	append_flags_type_flag (type, 21, "ID");
-
-	return type;
-      }
-    break;
-
-    case TDESC_TYPE_I386_MXCSR:
-      {
-	struct type *type;
-
-	type = arch_flags_type (gdbarch, "builtin_type_i386_mxcsr", 4);
-	append_flags_type_flag (type, 0, "IE");
-	append_flags_type_flag (type, 1, "DE");
-	append_flags_type_flag (type, 2, "ZE");
-	append_flags_type_flag (type, 3, "OE");
-	append_flags_type_flag (type, 4, "UE");
-	append_flags_type_flag (type, 5, "PE");
-	append_flags_type_flag (type, 6, "DAZ");
-	append_flags_type_flag (type, 7, "IM");
-	append_flags_type_flag (type, 8, "DM");
-	append_flags_type_flag (type, 9, "ZM");
-	append_flags_type_flag (type, 10, "OM");
-	append_flags_type_flag (type, 11, "UM");
-	append_flags_type_flag (type, 12, "PM");
-	append_flags_type_flag (type, 15, "FZ");
-
-	return type;
-      }
-    break;
-
     /* Types defined by a target feature.  */
     case TDESC_TYPE_VECTOR:
       {
@@ -769,7 +714,8 @@ tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type)
 	  /* Note that contrary to the function name, this call will
 	     just set the properties of an already-allocated
 	     field.  */
-	  append_flags_type_flag (type, f->start, f->name);
+	  append_flags_type_flag (type, f->start,
+				  *f->name ? f->name : NULL);
 
 	return type;
       }
@@ -1602,6 +1548,7 @@ maint_print_c_tdesc_cmd (char *args, int from_tty)
   struct tdesc_reg *reg;
   struct tdesc_type *type;
   struct tdesc_type_field *f;
+  struct tdesc_type_flag *flag;
   int ix, ix2, ix3;
 
   /* Use the global target-supplied description, not the current
@@ -1715,6 +1662,18 @@ maint_print_c_tdesc_cmd (char *args, int from_tty)
 		     f->name);
 		}
 	      break;
+	    case TDESC_TYPE_FLAGS:
+	      printf_unfiltered
+		("  field_type = tdesc_create_flags (feature, \"%s\", %d);\n",
+		 type->name, (int) type->u.f.size);
+	      for (ix3 = 0;
+		   VEC_iterate (tdesc_type_flag, type->u.f.flags, ix3,
+				flag);
+		   ix3++)
+		printf_unfiltered
+		  ("  tdesc_add_flag (field_type, %d, \"%s\");\n",
+		   flag->start, flag->name);
+	      break;
 	    default:
 	      error (_("C output is not supported type \"%s\"."), type->name);
 	    }

  reply	other threads:[~2010-03-01  2:20 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-22 16:45 Daniel Jacobowitz
2010-02-22 19:32 ` Eli Zaretskii
2010-03-01  0:15 ` H.J. Lu
2010-03-01  0:57   ` H.J. Lu
2010-03-01  2:20     ` H.J. Lu [this message]
2010-03-01 17:20       ` Daniel Jacobowitz
2010-03-01 17:26         ` H.J. Lu
2010-03-01  2:46     ` Daniel Jacobowitz
2010-03-01  3:06       ` H.J. Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6dc9ffc81002281820o4e297e49j4e611d46c76de736@mail.gmail.com \
    --to=hjl.tools@gmail.com \
    --cc=dan@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox