+#endif
+
+#if defined(TARGET_I386)
+
+static void to_le32(uint8_t *p, int v)
+{
+ p[0] = v;
+ p[1] = v >> 8;
+ p[2] = v >> 16;
+ p[3] = v >> 24;
+}
+
+static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
+{
+ int i, fpus;
+
+ for(i = 0; i < 8; i++) {
+ to_le32(mem_buf + i * 4, env->regs[i]);
+ }
+ to_le32(mem_buf + 8 * 4, env->eip);
+ to_le32(mem_buf + 9 * 4, env->eflags);
+ to_le32(mem_buf + 10 * 4, env->segs[R_CS].selector);
+ to_le32(mem_buf + 11 * 4, env->segs[R_SS].selector);
+ to_le32(mem_buf + 12 * 4, env->segs[R_DS].selector);
+ to_le32(mem_buf + 13 * 4, env->segs[R_ES].selector);
+ to_le32(mem_buf + 14 * 4, env->segs[R_FS].selector);
+ to_le32(mem_buf + 15 * 4, env->segs[R_GS].selector);
+ /* XXX: convert floats */
+ for(i = 0; i < 8; i++) {
+ memcpy(mem_buf + 16 * 4 + i * 10, &env->fpregs[i], 10);
+ }
+ to_le32(mem_buf + 36 * 4, env->fpuc);
+ fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
+ to_le32(mem_buf + 37 * 4, fpus);
+ to_le32(mem_buf + 38 * 4, 0); /* XXX: convert tags */
+ to_le32(mem_buf + 39 * 4, 0); /* fiseg */
+ to_le32(mem_buf + 40 * 4, 0); /* fioff */
+ to_le32(mem_buf + 41 * 4, 0); /* foseg */
+ to_le32(mem_buf + 42 * 4, 0); /* fooff */
+ to_le32(mem_buf + 43 * 4, 0); /* fop */
+ return 44 * 4;
+}
+
+static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
+{
+ uint32_t *registers = (uint32_t *)mem_buf;
+ int i;
+
+ for(i = 0; i < 8; i++) {
+ env->regs[i] = tswapl(registers[i]);
+ }
+ env->eip = registers[8];
+ env->eflags = registers[9];
+#if defined(CONFIG_USER_ONLY)
+#define LOAD_SEG(index, sreg)\
+ if (tswapl(registers[index]) != env->segs[sreg].selector)\
+ cpu_x86_load_seg(env, sreg, tswapl(registers[index]));
+ LOAD_SEG(10, R_CS);
+ LOAD_SEG(11, R_SS);
+ LOAD_SEG(12, R_DS);
+ LOAD_SEG(13, R_ES);
+ LOAD_SEG(14, R_FS);
+ LOAD_SEG(15, R_GS);
+#endif
+}
+
+#else
+
+static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
+{
+ return 0;
+}
+
+static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
+{
+}
+
+#endif