Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* PATCH: Add x86 xml files
@ 2010-02-05  0:01 H.J. Lu
  2010-02-05  0:01 ` H.J. Lu
  0 siblings, 1 reply; 9+ messages in thread
From: H.J. Lu @ 2010-02-05  0:01 UTC (permalink / raw)
  To: GDB

Hi,

Here is the first patch to move x86 targets to xml. They aren't used
until the rest of x86 xml support is checked in.

OK to install?

Thanks.


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

	* features/Makefile (WHICH): Add i386/i386, i386/i386-linux,
	i386/x86-64 and i386/x86-64-linux.
	(i386/i386-expedite): New.
	(i386/i386-linux-expedite): Likewise.
	(i386/x86-64-expedite):Likewise.
	(i386/x86-64-linux-expedite): Likewise.
	(I386-XMLTOC): Likewise.
	(I386-CFILES): Likewise.
	(i386-cfiles): Likewise.
	($(outdir)/i386/i386.dat): New dependency.
	($(outdir)/i386/i386-linux.dat): Likewise.
	($(outdir)/i386/x86-64.dat): Likewise.
	($(outdir)/i386/x86-64-linux.dat): Likewise.

	* features/i386/32bit-core.xml: New.
	* features/i386/32bit-linux.xml: Likewise.
	* features/i386/32bit-sse.xml: Likewise.
	* features/i386/64bit-core.xml: Likewise.
	* features/i386/64bit-linux.xml: Likewise.
	* features/i386/64bit-sse.xml: Likewise.
	* features/i386/i386-linux.xml: Likewise.
	* features/i386/i386.xml: Likewise.
	* features/i386/x86-64-linux.xml: Likewise.
	* features/i386/x86-64.xml: Likewise.
	* features/i386/i386-linux.c: Likewise.
	* features/i386/i386.c: Likewise.
	* features/i386/x86-64-linux.c: Likewise.
	* features/i386/x86-64.c: Likewise.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: PATCH: Add x86 xml files
  2010-02-05  0:01 PATCH: Add x86 xml files H.J. Lu
@ 2010-02-05  0:01 ` H.J. Lu
  2010-02-07 21:29   ` Mark Kettenis
  2010-02-07 21:50   ` Daniel Jacobowitz
  0 siblings, 2 replies; 9+ messages in thread
From: H.J. Lu @ 2010-02-05  0:01 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GDB

On Thu, Feb 04, 2010 at 03:59:52PM -0800, H.J. Lu wrote:
> Hi,
> 
> Here is the first patch to move x86 targets to xml. They aren't used
> until the rest of x86 xml support is checked in.
> 
> OK to install?
> 
> Thanks.
> 
> 
> H.J.
> ---
> 2010-02-04  H.J. Lu  <hongjiu.lu@intel.com>
> 
> 	* features/Makefile (WHICH): Add i386/i386, i386/i386-linux,
> 	i386/x86-64 and i386/x86-64-linux.
> 	(i386/i386-expedite): New.
> 	(i386/i386-linux-expedite): Likewise.
> 	(i386/x86-64-expedite):Likewise.
> 	(i386/x86-64-linux-expedite): Likewise.
> 	(I386-XMLTOC): Likewise.
> 	(I386-CFILES): Likewise.
> 	(i386-cfiles): Likewise.
> 	($(outdir)/i386/i386.dat): New dependency.
> 	($(outdir)/i386/i386-linux.dat): Likewise.
> 	($(outdir)/i386/x86-64.dat): Likewise.
> 	($(outdir)/i386/x86-64-linux.dat): Likewise.
> 
> 	* features/i386/32bit-core.xml: New.
> 	* features/i386/32bit-linux.xml: Likewise.
> 	* features/i386/32bit-sse.xml: Likewise.
> 	* features/i386/64bit-core.xml: Likewise.
> 	* features/i386/64bit-linux.xml: Likewise.
> 	* features/i386/64bit-sse.xml: Likewise.
> 	* features/i386/i386-linux.xml: Likewise.
> 	* features/i386/i386.xml: Likewise.
> 	* features/i386/x86-64-linux.xml: Likewise.
> 	* features/i386/x86-64.xml: Likewise.
> 	* features/i386/i386-linux.c: Likewise.
> 	* features/i386/i386.c: Likewise.
> 	* features/i386/x86-64-linux.c: Likewise.
> 	* features/i386/x86-64.c: Likewise.

Here is the patch.


H.J.
---
diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index 8aa553e..c54df74 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -31,6 +31,8 @@
 #   make GDB=/path/to/gdb XMLTOC="xml files" cfiles
 
 WHICH = arm-with-iwmmxt arm-with-vfpv2 arm-with-vfpv3 arm-with-neon \
+	i386/i386 i386/i386-linux \
+	i386/x86-64 i386/x86-64-linux \
 	mips-linux mips64-linux \
 	rs6000/powerpc-32l rs6000/powerpc-altivec32l rs6000/powerpc-e500l \
 	rs6000/powerpc-64l rs6000/powerpc-altivec64l rs6000/powerpc-vsx32l \
@@ -39,6 +41,10 @@ WHICH = arm-with-iwmmxt arm-with-vfpv2 arm-with-vfpv3 arm-with-neon \
 
 # Record which registers should be sent to GDB by default after stop.
 arm-expedite = r11,sp,pc
+i386/i386-expedite = ebp,esp,eip
+i386/i386-linux-expedite = ebp,esp,eip
+i386/x86-64-expedite = rbp,rsp,rip
+i386/x86-64-linux-expedite = rbp,rsp,rip
 mips-expedite = r29,pc
 mips64-expedite = r29,pc
 powerpc-expedite = r1,pc
@@ -57,6 +63,9 @@ XMLTOC =
 CFILES = $(patsubst %.xml,%.c,$(XMLTOC))
 GDB = false
 
+I386-XMLTOC = $(addsuffix .xml, $(filter i386/%, $(WHICH)))
+I386-CFILES = $(patsubst %.xml,%.c,$(I386-XMLTOC))
+
 all: $(OUTPUTS)
 
 $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
@@ -71,6 +80,8 @@ $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
 	sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat
 
 cfiles: $(CFILES)
+i386-cfiles: $(I386-CFILES)
+
 %.c: %.xml
 	$(GDB) -nx -q -batch \
 	  -ex "set tdesc filename $<" -ex 'maint print c-tdesc' > $@.tmp
@@ -78,3 +89,9 @@ cfiles: $(CFILES)
 
 # Other dependencies.
 $(outdir)/arm-with-iwmmxt.dat: arm-core.xml xscale-iwmmxt.xml
+$(outdir)/i386/i386.dat: i386/32bit-core.xml i386/32bit-sse.xml
+$(outdir)/i386/i386-linux.dat: i386/32bit-core.xml i386/32bit-sse.xml \
+			       i386/32bit-linux.xml
+$(outdir)/i386/x86-64.dat: i386/64bit-core.xml i386/64bit-sse.xml
+$(outdir)/i386/x86-64-linux.dat: i386/64bit-core.xml i386/64bit-sse.xml \
+			         i386/64bit-linux.xml
diff --git a/gdb/features/i386/32bit-core.xml b/gdb/features/i386/32bit-core.xml
new file mode 100644
index 0000000..b047074
--- /dev/null
+++ b/gdb/features/i386/32bit-core.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.i386.core">
+  <reg name="eax" bitsize="32" type="int32"/>
+  <reg name="ecx" bitsize="32" type="int32"/>
+  <reg name="edx" bitsize="32" type="int32"/>
+  <reg name="ebx" bitsize="32" type="int32"/>
+  <reg name="esp" bitsize="32" type="data_ptr"/>
+  <reg name="ebp" bitsize="32" type="data_ptr"/>
+  <reg name="esi" bitsize="32" type="int32"/>
+  <reg name="edi" bitsize="32" type="int32"/>
+
+  <reg name="eip" bitsize="32" type="code_ptr"/>
+  <reg name="eflags" bitsize="32" type="i386_eflags"/>
+  <reg name="cs" bitsize="32" type="int32"/>
+  <reg name="ss" bitsize="32" type="int32"/>
+  <reg name="ds" bitsize="32" type="int32"/>
+  <reg name="es" bitsize="32" type="int32"/>
+  <reg name="fs" bitsize="32" type="int32"/>
+  <reg name="gs" bitsize="32" type="int32"/>
+
+  <reg name="st0" bitsize="80" type="i387_ext"/>
+  <reg name="st1" bitsize="80" type="i387_ext"/>
+  <reg name="st2" bitsize="80" type="i387_ext"/>
+  <reg name="st3" bitsize="80" type="i387_ext"/>
+  <reg name="st4" bitsize="80" type="i387_ext"/>
+  <reg name="st5" bitsize="80" type="i387_ext"/>
+  <reg name="st6" bitsize="80" type="i387_ext"/>
+  <reg name="st7" bitsize="80" type="i387_ext"/>
+
+  <reg name="fctrl" bitsize="32" type="int" group="float"/>
+  <reg name="fstat" bitsize="32" type="int" group="float"/>
+  <reg name="ftag" bitsize="32" type="int" group="float"/>
+  <reg name="fiseg" bitsize="32" type="int" group="float"/>
+  <reg name="fioff" bitsize="32" type="int" group="float"/>
+  <reg name="foseg" bitsize="32" type="int" group="float"/>
+  <reg name="fooff" bitsize="32" type="int" group="float"/>
+  <reg name="fop" bitsize="32" type="int" group="float"/>
+</feature>
diff --git a/gdb/features/i386/32bit-linux.xml b/gdb/features/i386/32bit-linux.xml
new file mode 100644
index 0000000..975daf9
--- /dev/null
+++ b/gdb/features/i386/32bit-linux.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.i386.linux">
+  <reg name="orig_eax" bitsize="32" type="int" regnum="41"/>
+</feature>
diff --git a/gdb/features/i386/32bit-sse.xml b/gdb/features/i386/32bit-sse.xml
new file mode 100644
index 0000000..e849b8d
--- /dev/null
+++ b/gdb/features/i386/32bit-sse.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.i386.sse">
+  <vector id="v4f" type="ieee_single" count="4"/>
+  <vector id="v2d" type="ieee_double" count="2"/>
+  <vector id="v16i8" type="int8" count="16"/>
+  <vector id="v8i16" type="int16" count="8"/>
+  <vector id="v4i32" type="int32" count="4"/>
+  <vector id="v2i64" type="int64" count="2"/>
+  <union id="vec128">
+    <field name="v4_float" type="v4f"/>
+    <field name="v2_double" type="v2d"/>
+    <field name="v16_int8" type="v16i8"/>
+    <field name="v8_int16" type="v8i16"/>
+    <field name="v4_int32" type="v4i32"/>
+    <field name="v2_int64" type="v2i64"/>
+    <field name="uint128" type="uint128"/>
+  </union>
+
+  <reg name="xmm0" bitsize="128" type="vec128" regnum="32"/>
+  <reg name="xmm1" bitsize="128" type="vec128"/>
+  <reg name="xmm2" bitsize="128" type="vec128"/>
+  <reg name="xmm3" bitsize="128" type="vec128"/>
+  <reg name="xmm4" bitsize="128" type="vec128"/>
+  <reg name="xmm5" bitsize="128" type="vec128"/>
+  <reg name="xmm6" bitsize="128" type="vec128"/>
+  <reg name="xmm7" bitsize="128" type="vec128"/>
+
+  <reg name="mxcsr" bitsize="32" type="i386_mxcsr" group="vector"/>
+</feature>
diff --git a/gdb/features/i386/64bit-core.xml b/gdb/features/i386/64bit-core.xml
new file mode 100644
index 0000000..ae41cf2
--- /dev/null
+++ b/gdb/features/i386/64bit-core.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.i386.core">
+  <reg name="rax" bitsize="64" type="int64"/>
+  <reg name="rbx" bitsize="64" type="int64"/>
+  <reg name="rcx" bitsize="64" type="int64"/>
+  <reg name="rdx" bitsize="64" type="int64"/>
+  <reg name="rsi" bitsize="64" type="int64"/>
+  <reg name="rdi" bitsize="64" type="int64"/>
+  <reg name="rbp" bitsize="64" type="data_ptr"/>
+  <reg name="rsp" bitsize="64" type="data_ptr"/>
+  <reg name="r8" bitsize="64" type="int64"/>
+  <reg name="r9" bitsize="64" type="int64"/>
+  <reg name="r10" bitsize="64" type="int64"/>
+  <reg name="r11" bitsize="64" type="int64"/>
+  <reg name="r12" bitsize="64" type="int64"/>
+  <reg name="r13" bitsize="64" type="int64"/>
+  <reg name="r14" bitsize="64" type="int64"/>
+  <reg name="r15" bitsize="64" type="int64"/>
+
+  <reg name="rip" bitsize="64" type="code_ptr"/>
+  <reg name="eflags" bitsize="32" type="i386_eflags"/>
+  <reg name="cs" bitsize="32" type="int32"/>
+  <reg name="ss" bitsize="32" type="int32"/>
+  <reg name="ds" bitsize="32" type="int32"/>
+  <reg name="es" bitsize="32" type="int32"/>
+  <reg name="fs" bitsize="32" type="int32"/>
+  <reg name="gs" bitsize="32" type="int32"/>
+
+  <reg name="st0" bitsize="80" type="i387_ext"/>
+  <reg name="st1" bitsize="80" type="i387_ext"/>
+  <reg name="st2" bitsize="80" type="i387_ext"/>
+  <reg name="st3" bitsize="80" type="i387_ext"/>
+  <reg name="st4" bitsize="80" type="i387_ext"/>
+  <reg name="st5" bitsize="80" type="i387_ext"/>
+  <reg name="st6" bitsize="80" type="i387_ext"/>
+  <reg name="st7" bitsize="80" type="i387_ext"/>
+
+  <reg name="fctrl" bitsize="32" type="int" group="float"/>
+  <reg name="fstat" bitsize="32" type="int" group="float"/>
+  <reg name="ftag" bitsize="32" type="int" group="float"/>
+  <reg name="fiseg" bitsize="32" type="int" group="float"/>
+  <reg name="fioff" bitsize="32" type="int" group="float"/>
+  <reg name="foseg" bitsize="32" type="int" group="float"/>
+  <reg name="fooff" bitsize="32" type="int" group="float"/>
+  <reg name="fop" bitsize="32" type="int" group="float"/>
+</feature>
diff --git a/gdb/features/i386/64bit-linux.xml b/gdb/features/i386/64bit-linux.xml
new file mode 100644
index 0000000..8609272
--- /dev/null
+++ b/gdb/features/i386/64bit-linux.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.i386.linux">
+  <reg name="orig_rax" bitsize="64" type="int" regnum="57"/>
+</feature>
diff --git a/gdb/features/i386/64bit-sse.xml b/gdb/features/i386/64bit-sse.xml
new file mode 100644
index 0000000..a71fe78
--- /dev/null
+++ b/gdb/features/i386/64bit-sse.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.i386.sse">
+  <vector id="v4f" type="ieee_single" count="4"/>
+  <vector id="v2d" type="ieee_double" count="2"/>
+  <vector id="v16i8" type="int8" count="16"/>
+  <vector id="v8i16" type="int16" count="8"/>
+  <vector id="v4i32" type="int32" count="4"/>
+  <vector id="v2i64" type="int64" count="2"/>
+  <union id="vec128">
+    <field name="v4_float" type="v4f"/>
+    <field name="v2_double" type="v2d"/>
+    <field name="v16_int8" type="v16i8"/>
+    <field name="v8_int16" type="v8i16"/>
+    <field name="v4_int32" type="v4i32"/>
+    <field name="v2_int64" type="v2i64"/>
+    <field name="uint128" type="uint128"/>
+  </union>
+
+  <reg name="xmm0" bitsize="128" type="vec128" regnum="40"/>
+  <reg name="xmm1" bitsize="128" type="vec128"/>
+  <reg name="xmm2" bitsize="128" type="vec128"/>
+  <reg name="xmm3" bitsize="128" type="vec128"/>
+  <reg name="xmm4" bitsize="128" type="vec128"/>
+  <reg name="xmm5" bitsize="128" type="vec128"/>
+  <reg name="xmm6" bitsize="128" type="vec128"/>
+  <reg name="xmm7" bitsize="128" type="vec128"/>
+  <reg name="xmm8" bitsize="128" type="vec128"/>
+  <reg name="xmm9" bitsize="128" type="vec128"/>
+  <reg name="xmm10" bitsize="128" type="vec128"/>
+  <reg name="xmm11" bitsize="128" type="vec128"/>
+  <reg name="xmm12" bitsize="128" type="vec128"/>
+  <reg name="xmm13" bitsize="128" type="vec128"/>
+  <reg name="xmm14" bitsize="128" type="vec128"/>
+  <reg name="xmm15" bitsize="128" type="vec128"/>
+
+  <reg name="mxcsr" bitsize="32" type="i386_mxcsr" group="vector"/>
+</feature>
diff --git a/gdb/features/i386/i386-linux.c b/gdb/features/i386/i386-linux.c
new file mode 100644
index 0000000..37447bd
--- /dev/null
+++ b/gdb/features/i386/i386-linux.c
@@ -0,0 +1,102 @@
+/* THIS FILE IS GENERATED.  Original: i386-linux.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_i386_linux;
+static void
+initialize_tdesc_i386_linux (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct tdesc_type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
+
+  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  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");
+  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
+  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
+  tdesc_create_reg (feature, "orig_eax", 41, 1, NULL, 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  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");
+  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
+
+  tdesc_i386_linux = result;
+}
diff --git a/gdb/features/i386/i386-linux.xml b/gdb/features/i386/i386-linux.xml
new file mode 100644
index 0000000..4511a4d
--- /dev/null
+++ b/gdb/features/i386/i386-linux.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- I386 with SSE - Includes Linux-only special "register".  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>i386</architecture>
+  <osabi>GNU/Linux</osabi>
+  <xi:include href="32bit-core.xml"/>
+  <xi:include href="32bit-linux.xml"/>
+  <xi:include href="32bit-sse.xml"/>
+</target>
diff --git a/gdb/features/i386/i386.c b/gdb/features/i386/i386.c
new file mode 100644
index 0000000..5ac9ad9
--- /dev/null
+++ b/gdb/features/i386/i386.c
@@ -0,0 +1,97 @@
+/* THIS FILE IS GENERATED.  Original: i386.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_i386;
+static void
+initialize_tdesc_i386 (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct tdesc_type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  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");
+  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
+  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  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");
+  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
+
+  tdesc_i386 = result;
+}
diff --git a/gdb/features/i386/i386.xml b/gdb/features/i386/i386.xml
new file mode 100644
index 0000000..fc07fb0
--- /dev/null
+++ b/gdb/features/i386/i386.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- I386 with SSE -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>i386</architecture>
+  <xi:include href="32bit-core.xml"/>
+  <xi:include href="32bit-sse.xml"/>
+</target>
diff --git a/gdb/features/i386/x86-64-linux.c b/gdb/features/i386/x86-64-linux.c
new file mode 100644
index 0000000..8081012
--- /dev/null
+++ b/gdb/features/i386/x86-64-linux.c
@@ -0,0 +1,118 @@
+/* THIS FILE IS GENERATED.  Original: x86-64-linux.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_x86_64_linux;
+static void
+initialize_tdesc_x86_64_linux (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct tdesc_type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
+
+  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  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");
+  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
+  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
+  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
+  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  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");
+  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
+  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
+
+  tdesc_x86_64_linux = result;
+}
diff --git a/gdb/features/i386/x86-64-linux.xml b/gdb/features/i386/x86-64-linux.xml
new file mode 100644
index 0000000..337d0a9
--- /dev/null
+++ b/gdb/features/i386/x86-64-linux.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- AMD64 - Includes Linux-only special "register".  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>i386:x86-64</architecture>
+  <osabi>GNU/Linux</osabi>
+  <xi:include href="64bit-core.xml"/>
+  <xi:include href="64bit-sse.xml"/>
+  <xi:include href="64bit-linux.xml"/>
+</target>
diff --git a/gdb/features/i386/x86-64.c b/gdb/features/i386/x86-64.c
new file mode 100644
index 0000000..eecfefd
--- /dev/null
+++ b/gdb/features/i386/x86-64.c
@@ -0,0 +1,113 @@
+/* THIS FILE IS GENERATED.  Original: x86-64.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_x86_64;
+static void
+initialize_tdesc_x86_64 (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct tdesc_type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  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");
+  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
+  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
+  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
+  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  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");
+  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
+
+  tdesc_x86_64 = result;
+}
diff --git a/gdb/features/i386/x86-64.xml b/gdb/features/i386/x86-64.xml
new file mode 100644
index 0000000..5429c94
--- /dev/null
+++ b/gdb/features/i386/x86-64.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- AMD64 -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>i386:x86-64</architecture>
+  <xi:include href="64bit-core.xml"/>
+  <xi:include href="64bit-sse.xml"/>
+</target>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: PATCH: Add x86 xml files
  2010-02-05  0:01 ` H.J. Lu
@ 2010-02-07 21:29   ` Mark Kettenis
  2010-02-07 21:50     ` H.J. Lu
  2010-02-07 21:50   ` Daniel Jacobowitz
  1 sibling, 1 reply; 9+ messages in thread
From: Mark Kettenis @ 2010-02-07 21:29 UTC (permalink / raw)
  To: hjl.tools; +Cc: hjl.tools, gdb-patches

> Date: Thu, 4 Feb 2010 16:00:52 -0800
> From: "H.J. Lu" <hongjiu.lu@intel.com>
> 
> On Thu, Feb 04, 2010 at 03:59:52PM -0800, H.J. Lu wrote:
> > Hi,
> > 
> > Here is the first patch to move x86 targets to xml. They aren't used
> > until the rest of x86 xml support is checked in.
> > 
> > OK to install?
> > 
> > Thanks.
> > 
> > 
> > H.J.
> > ---
> > 2010-02-04  H.J. Lu  <hongjiu.lu@intel.com>
> > 
> > 	* features/Makefile (WHICH): Add i386/i386, i386/i386-linux,
> > 	i386/x86-64 and i386/x86-64-linux.
> > 	(i386/i386-expedite): New.
> > 	(i386/i386-linux-expedite): Likewise.
> > 	(i386/x86-64-expedite):Likewise.
> > 	(i386/x86-64-linux-expedite): Likewise.
> > 	(I386-XMLTOC): Likewise.
> > 	(I386-CFILES): Likewise.
> > 	(i386-cfiles): Likewise.
> > 	($(outdir)/i386/i386.dat): New dependency.
> > 	($(outdir)/i386/i386-linux.dat): Likewise.
> > 	($(outdir)/i386/x86-64.dat): Likewise.
> > 	($(outdir)/i386/x86-64-linux.dat): Likewise.
> > 
> > 	* features/i386/32bit-core.xml: New.
> > 	* features/i386/32bit-linux.xml: Likewise.
> > 	* features/i386/32bit-sse.xml: Likewise.
> > 	* features/i386/64bit-core.xml: Likewise.
> > 	* features/i386/64bit-linux.xml: Likewise.
> > 	* features/i386/64bit-sse.xml: Likewise.
> > 	* features/i386/i386-linux.xml: Likewise.
> > 	* features/i386/i386.xml: Likewise.
> > 	* features/i386/x86-64-linux.xml: Likewise.
> > 	* features/i386/x86-64.xml: Likewise.
> > 	* features/i386/i386-linux.c: Likewise.
> > 	* features/i386/i386.c: Likewise.
> > 	* features/i386/x86-64-linux.c: Likewise.
> > 	* features/i386/x86-64.c: Likewise.
> 
> Here is the patch.
> 
> 
> H.J.
> ---
> diff --git a/gdb/features/Makefile b/gdb/features/Makefile
> index 8aa553e..c54df74 100644
> --- a/gdb/features/Makefile
> +++ b/gdb/features/Makefile
> @@ -31,6 +31,8 @@
>  #   make GDB=/path/to/gdb XMLTOC="xml files" cfiles
>  
>  WHICH = arm-with-iwmmxt arm-with-vfpv2 arm-with-vfpv3 arm-with-neon \
> +	i386/i386 i386/i386-linux \
> +	i386/x86-64 i386/x86-64-linux \
>  	mips-linux mips64-linux \
>  	rs6000/powerpc-32l rs6000/powerpc-altivec32l rs6000/powerpc-e500l \
>  	rs6000/powerpc-64l rs6000/powerpc-altivec64l rs6000/powerpc-vsx32l \
> @@ -39,6 +41,10 @@ WHICH = arm-with-iwmmxt arm-with-vfpv2 arm-with-vfpv3 arm-with-neon \
>  
>  # Record which registers should be sent to GDB by default after stop.
>  arm-expedite = r11,sp,pc
> +i386/i386-expedite = ebp,esp,eip
> +i386/i386-linux-expedite = ebp,esp,eip
> +i386/x86-64-expedite = rbp,rsp,rip
> +i386/x86-64-linux-expedite = rbp,rsp,rip
>  mips-expedite = r29,pc
>  mips64-expedite = r29,pc
>  powerpc-expedite = r1,pc
> @@ -57,6 +63,9 @@ XMLTOC =
>  CFILES = $(patsubst %.xml,%.c,$(XMLTOC))
>  GDB = false
>  
> +I386-XMLTOC = $(addsuffix .xml, $(filter i386/%, $(WHICH)))
> +I386-CFILES = $(patsubst %.xml,%.c,$(I386-XMLTOC))

Why are you introducing these variables?

>  all: $(OUTPUTS)
>  
>  $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
> @@ -71,6 +80,8 @@ $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
>  	sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat
>  
>  cfiles: $(CFILES)
> +i386-cfiles: $(I386-CFILES)

And this target?

Otherwise this diff looks reasonable to me.  However, I think it would
be good if Daniel had a look at this as well; I'm not too familiar
with the target description framework, and I think XML is a
consipiracy by the computer industry to make people buy more hardware
;).


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: PATCH: Add x86 xml files
  2010-02-07 21:29   ` Mark Kettenis
@ 2010-02-07 21:50     ` H.J. Lu
  2010-02-07 22:43       ` Mark Kettenis
  0 siblings, 1 reply; 9+ messages in thread
From: H.J. Lu @ 2010-02-07 21:50 UTC (permalink / raw)
  To: Mark Kettenis; +Cc: gdb-patches

On Sun, Feb 7, 2010 at 1:29 PM, Mark Kettenis <mark.kettenis@xs4all.nl> wrote:
>> Date: Thu, 4 Feb 2010 16:00:52 -0800
>> From: "H.J. Lu" <hongjiu.lu@intel.com>
>>
>> On Thu, Feb 04, 2010 at 03:59:52PM -0800, H.J. Lu wrote:
>> > Hi,
>> >
>> > Here is the first patch to move x86 targets to xml. They aren't used
>> > until the rest of x86 xml support is checked in.
>> >
>> > OK to install?
>> >
>> > Thanks.
>> >
>> >
>> > H.J.
>> > ---
>> > 2010-02-04  H.J. Lu  <hongjiu.lu@intel.com>
>> >
>> >     * features/Makefile (WHICH): Add i386/i386, i386/i386-linux,
>> >     i386/x86-64 and i386/x86-64-linux.
>> >     (i386/i386-expedite): New.
>> >     (i386/i386-linux-expedite): Likewise.
>> >     (i386/x86-64-expedite):Likewise.
>> >     (i386/x86-64-linux-expedite): Likewise.
>> >     (I386-XMLTOC): Likewise.
>> >     (I386-CFILES): Likewise.
>> >     (i386-cfiles): Likewise.
>> >     ($(outdir)/i386/i386.dat): New dependency.
>> >     ($(outdir)/i386/i386-linux.dat): Likewise.
>> >     ($(outdir)/i386/x86-64.dat): Likewise.
>> >     ($(outdir)/i386/x86-64-linux.dat): Likewise.
>> >
>> >     * features/i386/32bit-core.xml: New.
>> >     * features/i386/32bit-linux.xml: Likewise.
>> >     * features/i386/32bit-sse.xml: Likewise.
>> >     * features/i386/64bit-core.xml: Likewise.
>> >     * features/i386/64bit-linux.xml: Likewise.
>> >     * features/i386/64bit-sse.xml: Likewise.
>> >     * features/i386/i386-linux.xml: Likewise.
>> >     * features/i386/i386.xml: Likewise.
>> >     * features/i386/x86-64-linux.xml: Likewise.
>> >     * features/i386/x86-64.xml: Likewise.
>> >     * features/i386/i386-linux.c: Likewise.
>> >     * features/i386/i386.c: Likewise.
>> >     * features/i386/x86-64-linux.c: Likewise.
>> >     * features/i386/x86-64.c: Likewise.
>>
>> Here is the patch.
>>
>>
>> H.J.
>> ---
>> diff --git a/gdb/features/Makefile b/gdb/features/Makefile
>> index 8aa553e..c54df74 100644
>> --- a/gdb/features/Makefile
>> +++ b/gdb/features/Makefile
>> @@ -31,6 +31,8 @@
>>  #   make GDB=/path/to/gdb XMLTOC="xml files" cfiles
>>
>>  WHICH = arm-with-iwmmxt arm-with-vfpv2 arm-with-vfpv3 arm-with-neon \
>> +     i386/i386 i386/i386-linux \
>> +     i386/x86-64 i386/x86-64-linux \
>>       mips-linux mips64-linux \
>>       rs6000/powerpc-32l rs6000/powerpc-altivec32l rs6000/powerpc-e500l \
>>       rs6000/powerpc-64l rs6000/powerpc-altivec64l rs6000/powerpc-vsx32l \
>> @@ -39,6 +41,10 @@ WHICH = arm-with-iwmmxt arm-with-vfpv2 arm-with-vfpv3 arm-with-neon \
>>
>>  # Record which registers should be sent to GDB by default after stop.
>>  arm-expedite = r11,sp,pc
>> +i386/i386-expedite = ebp,esp,eip
>> +i386/i386-linux-expedite = ebp,esp,eip
>> +i386/x86-64-expedite = rbp,rsp,rip
>> +i386/x86-64-linux-expedite = rbp,rsp,rip
>>  mips-expedite = r29,pc
>>  mips64-expedite = r29,pc
>>  powerpc-expedite = r1,pc
>> @@ -57,6 +63,9 @@ XMLTOC =
>>  CFILES = $(patsubst %.xml,%.c,$(XMLTOC))
>>  GDB = false
>>
>> +I386-XMLTOC = $(addsuffix .xml, $(filter i386/%, $(WHICH)))
>> +I386-CFILES = $(patsubst %.xml,%.c,$(I386-XMLTOC))
>
> Why are you introducing these variables?

They are used by the new "i386-cfiles" target.

>>  all: $(OUTPUTS)
>>
>>  $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
>> @@ -71,6 +80,8 @@ $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
>>       sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat
>>
>>  cfiles: $(CFILES)
>> +i386-cfiles: $(I386-CFILES)
>
> And this target?

You need a working gdb for your target with XML support to generate
those C files for gdbserver. That is why XMLTOC is empty and GDB
is false. To generate those C files, you have to do

# make cfiles GDB="your new GDB" XMLTOC="your XML files"

I added this target so that I can do

# make i386-cfiles GDB="my new GDB"

to generate i386 C files for gdbserver without specifying XMLTOC at
command line. It is very convenience for maintenance.

> Otherwise this diff looks reasonable to me.  However, I think it would
> be good if Daniel had a look at this as well; I'm not too familiar
> with the target description framework, and I think XML is a
> consipiracy by the computer industry to make people buy more hardware
> ;).
>

Thanks.


-- 
H.J.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: PATCH: Add x86 xml files
  2010-02-05  0:01 ` H.J. Lu
  2010-02-07 21:29   ` Mark Kettenis
@ 2010-02-07 21:50   ` Daniel Jacobowitz
  2010-02-07 21:55     ` H.J. Lu
  2010-02-07 22:36     ` Mark Kettenis
  1 sibling, 2 replies; 9+ messages in thread
From: Daniel Jacobowitz @ 2010-02-07 21:50 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GDB

On Thu, Feb 04, 2010 at 04:00:52PM -0800, H.J. Lu wrote:
> +<!DOCTYPE feature SYSTEM "gdb-target.dtd">
> +<feature name="org.gnu.gdb.i386.core">

In addition to Mark's comments:

* The new features will need to be documented in the manual.  I'd
recommend doing that along with the XML files.

* I can't remember exactly why there are some previously existing
features with the same name and two possible contents.  It seems like
a better idea to call one of these org.gnu.gdb.x86_64.* (or x86-64 or
amd64 or whatever).

Otherwise, it seems fine to me.

-- 
Daniel Jacobowitz
CodeSourcery


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: PATCH: Add x86 xml files
  2010-02-07 21:50   ` Daniel Jacobowitz
@ 2010-02-07 21:55     ` H.J. Lu
  2010-02-07 22:23       ` Daniel Jacobowitz
  2010-02-07 22:36     ` Mark Kettenis
  1 sibling, 1 reply; 9+ messages in thread
From: H.J. Lu @ 2010-02-07 21:55 UTC (permalink / raw)
  To: H.J. Lu, GDB

On Sun, Feb 7, 2010 at 1:50 PM, Daniel Jacobowitz <dan@codesourcery.com> wrote:
> On Thu, Feb 04, 2010 at 04:00:52PM -0800, H.J. Lu wrote:
>> +<!DOCTYPE feature SYSTEM "gdb-target.dtd">
>> +<feature name="org.gnu.gdb.i386.core">
>
> In addition to Mark's comments:
>
> * The new features will need to be documented in the manual.  I'd
> recommend doing that along with the XML files.

I will do that.

> * I can't remember exactly why there are some previously existing
> features with the same name and two possible contents.  It seems like
> a better idea to call one of these org.gnu.gdb.x86_64.* (or x86-64 or
> amd64 or whatever).

That is done on purpose so that i386-tdep.c can have

---
  /* Get the x86 target description from INFO.  We support both
     32bit and 64bit if BFD64 is defined.  */
  tdesc = info.target_desc;
  if (! tdesc_has_registers (tdesc))
    {
      if (info.bfd_arch_info->bits_per_word == 32)
        tdesc = tdesc_i386;
      else
#ifdef BFD64
        tdesc = tdesc_x86_64;
#else
        return NULL;
#endif
    }

  gdb_assert (tdesc_has_registers (tdesc));

  /* Get core registers.  */
  feature_core = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.core");
  if (feature_core == NULL)
    return NULL;
---

to support both 32bit and 64bit, avoiding unnecessary complication and
code duplication. That is how it is done for PPC/RS6000.

> Otherwise, it seems fine to me.
>

Thanks.

-- 
H.J.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: PATCH: Add x86 xml files
  2010-02-07 21:55     ` H.J. Lu
@ 2010-02-07 22:23       ` Daniel Jacobowitz
  0 siblings, 0 replies; 9+ messages in thread
From: Daniel Jacobowitz @ 2010-02-07 22:23 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GDB

On Sun, Feb 07, 2010 at 01:55:40PM -0800, H.J. Lu wrote:
> to support both 32bit and 64bit, avoiding unnecessary complication and
> code duplication. That is how it is done for PPC/RS6000.

Either way, then, but be sure to validate the register set matches the
expected architecture.

-- 
Daniel Jacobowitz
CodeSourcery


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: PATCH: Add x86 xml files
  2010-02-07 21:50   ` Daniel Jacobowitz
  2010-02-07 21:55     ` H.J. Lu
@ 2010-02-07 22:36     ` Mark Kettenis
  1 sibling, 0 replies; 9+ messages in thread
From: Mark Kettenis @ 2010-02-07 22:36 UTC (permalink / raw)
  To: dan; +Cc: hjl.tools, gdb-patches

> Date: Sun, 7 Feb 2010 16:50:00 -0500
> From: Daniel Jacobowitz <dan@codesourcery.com>
> 
> On Thu, Feb 04, 2010 at 04:00:52PM -0800, H.J. Lu wrote:
> > +<!DOCTYPE feature SYSTEM "gdb-target.dtd">
> > +<feature name="org.gnu.gdb.i386.core">
> 
> In addition to Mark's comments:
> 
> * The new features will need to be documented in the manual.  I'd
> recommend doing that along with the XML files.
> 
> * I can't remember exactly why there are some previously existing
> features with the same name and two possible contents.  It seems like
> a better idea to call one of these org.gnu.gdb.x86_64.* (or x86-64 or
> amd64 or whatever).

Oh, wait, please use amd64 instead of x86-64 everywhere in GDB please.
That includes the filenames for the xml files.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: PATCH: Add x86 xml files
  2010-02-07 21:50     ` H.J. Lu
@ 2010-02-07 22:43       ` Mark Kettenis
  0 siblings, 0 replies; 9+ messages in thread
From: Mark Kettenis @ 2010-02-07 22:43 UTC (permalink / raw)
  To: hjl.tools; +Cc: gdb-patches

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1410 bytes --]

> Date: Sun, 7 Feb 2010 13:50:32 -0800
> From: "H.J. Lu" <hjl.tools@gmail.com>
>
> >> +I386-XMLTOC = $(addsuffix .xml, $(filter i386/%, $(WHICH)))
> >> +I386-CFILES = $(patsubst %.xml,%.c,$(I386-XMLTOC))
> >
> > Why are you introducing these variables?
> 
> They are used by the new "i386-cfiles" target.
> 
> >>  all: $(OUTPUTS)
> >>
> >>  $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
> >> @@ -71,6 +80,8 @@ $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
> >>       sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat
> >>
> >>  cfiles: $(CFILES)
> >> +i386-cfiles: $(I386-CFILES)
> >
> > And this target?
> 
> You need a working gdb for your target with XML support to generate
> those C files for gdbserver. That is why XMLTOC is empty and GDB
> is false. To generate those C files, you have to do
> 
> # make cfiles GDB="your new GDB" XMLTOC="your XML files"
> 
> I added this target so that I can do
> 
> # make i386-cfiles GDB="my new GDB"
> 
> to generate i386 C files for gdbserver without specifying XMLTOC at
> command line. It is very convenience for maintenance.

Well, given that none of the other architectures have such a target, I
think you shouldn't add this only for i386.

If you really think the convenience is important, it has to be added
for the other architectures as well.  But that's better done in a
seperarate patch.


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2010-02-07 22:43 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-02-05  0:01 PATCH: Add x86 xml files H.J. Lu
2010-02-05  0:01 ` H.J. Lu
2010-02-07 21:29   ` Mark Kettenis
2010-02-07 21:50     ` H.J. Lu
2010-02-07 22:43       ` Mark Kettenis
2010-02-07 21:50   ` Daniel Jacobowitz
2010-02-07 21:55     ` H.J. Lu
2010-02-07 22:23       ` Daniel Jacobowitz
2010-02-07 22:36     ` Mark Kettenis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox