diff --git a/configure b/configure
index 48a9370cc681..ff2c81f2c7e5 100755
--- a/configure
+++ b/configure
@@ -6023,9 +6023,11 @@ TARGET_ABI_DIR=""
case "$target_name" in
i386)
+ gdb_xml_files="i386-32bit-core.xml"
;;
x86_64)
TARGET_BASE_ARCH=i386
+ gdb_xml_files="i386-64bit-core.xml"
;;
alpha)
mttcg="yes"
diff --git a/gdb-xml/i386-32bit-core.xml b/gdb-xml/i386-32bit-core.xml
new file mode 100644
index 000000000000..7aeeeca3b2c4
--- /dev/null
+++ b/gdb-xml/i386-32bit-core.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gdb-xml/i386-64bit-core.xml b/gdb-xml/i386-64bit-core.xml
new file mode 100644
index 000000000000..5088d84ceb13
--- /dev/null
+++ b/gdb-xml/i386-64bit-core.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 13c0985f110a..7e87031fade4 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -2577,6 +2577,15 @@ arch_query_cpu_model_expansion(CpuModelExpansionType type,
return ret;
}
+static gchar *x86_gdb_arch_name(CPUState *cs)
+{
+#ifdef TARGET_X86_64
+ return g_strdup("i386:x86-64");
+#else
+ return g_strdup("i386");
+#endif
+}
+
X86CPU *cpu_x86_init(const char *cpu_model)
{
return X86_CPU(cpu_generic_init(TYPE_X86_CPU, cpu_model));
@@ -4056,10 +4065,14 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
cc->write_elf32_qemunote = x86_cpu_write_elf32_qemunote;
cc->vmsd = &vmstate_x86_cpu;
#endif
- /* CPU_NB_REGS * 2 = general regs + xmm regs
- * 25 = eip, eflags, 6 seg regs, st[0-7], fctrl,...,fop, mxcsr.
- */
- cc->gdb_num_core_regs = CPU_NB_REGS * 2 + 25;
+ cc->gdb_arch_name = x86_gdb_arch_name;
+#ifdef TARGET_X86_64
+ cc->gdb_core_xml_file = "i386-64bit-core.xml";
+ cc->gdb_num_core_regs = 40;
+#else
+ cc->gdb_core_xml_file = "i386-32bit-core.xml";
+ cc->gdb_num_core_regs = 32;
+#endif
#ifndef CONFIG_USER_ONLY
cc->debug_excp_handler = breakpoint_handler;
#endif