cpu: Introduce CPUClass::set_pc() for gdb_set_cpu_pc()
[sdk/emulator/qemu.git] / gdbstub.c
1 /*
2  * gdb server stub
3  *
4  * Copyright (c) 2003-2005 Fabrice Bellard
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18  */
19 #include "config.h"
20 #include "qemu-common.h"
21 #ifdef CONFIG_USER_ONLY
22 #include <stdlib.h>
23 #include <stdio.h>
24 #include <stdarg.h>
25 #include <string.h>
26 #include <errno.h>
27 #include <unistd.h>
28 #include <fcntl.h>
29
30 #include "qemu.h"
31 #else
32 #include "monitor/monitor.h"
33 #include "sysemu/char.h"
34 #include "sysemu/sysemu.h"
35 #include "exec/gdbstub.h"
36 #endif
37
38 #define MAX_PACKET_LENGTH 4096
39
40 #include "cpu.h"
41 #include "qemu/sockets.h"
42 #include "sysemu/kvm.h"
43 #include "qemu/bitops.h"
44
45 #ifndef TARGET_CPU_MEMORY_RW_DEBUG
46 static inline int target_memory_rw_debug(CPUArchState *env, target_ulong addr,
47                                          uint8_t *buf, int len, int is_write)
48 {
49     return cpu_memory_rw_debug(env, addr, buf, len, is_write);
50 }
51 #else
52 /* target_memory_rw_debug() defined in cpu.h */
53 #endif
54
55 enum {
56     GDB_SIGNAL_0 = 0,
57     GDB_SIGNAL_INT = 2,
58     GDB_SIGNAL_QUIT = 3,
59     GDB_SIGNAL_TRAP = 5,
60     GDB_SIGNAL_ABRT = 6,
61     GDB_SIGNAL_ALRM = 14,
62     GDB_SIGNAL_IO = 23,
63     GDB_SIGNAL_XCPU = 24,
64     GDB_SIGNAL_UNKNOWN = 143
65 };
66
67 #ifdef CONFIG_USER_ONLY
68
69 /* Map target signal numbers to GDB protocol signal numbers and vice
70  * versa.  For user emulation's currently supported systems, we can
71  * assume most signals are defined.
72  */
73
74 static int gdb_signal_table[] = {
75     0,
76     TARGET_SIGHUP,
77     TARGET_SIGINT,
78     TARGET_SIGQUIT,
79     TARGET_SIGILL,
80     TARGET_SIGTRAP,
81     TARGET_SIGABRT,
82     -1, /* SIGEMT */
83     TARGET_SIGFPE,
84     TARGET_SIGKILL,
85     TARGET_SIGBUS,
86     TARGET_SIGSEGV,
87     TARGET_SIGSYS,
88     TARGET_SIGPIPE,
89     TARGET_SIGALRM,
90     TARGET_SIGTERM,
91     TARGET_SIGURG,
92     TARGET_SIGSTOP,
93     TARGET_SIGTSTP,
94     TARGET_SIGCONT,
95     TARGET_SIGCHLD,
96     TARGET_SIGTTIN,
97     TARGET_SIGTTOU,
98     TARGET_SIGIO,
99     TARGET_SIGXCPU,
100     TARGET_SIGXFSZ,
101     TARGET_SIGVTALRM,
102     TARGET_SIGPROF,
103     TARGET_SIGWINCH,
104     -1, /* SIGLOST */
105     TARGET_SIGUSR1,
106     TARGET_SIGUSR2,
107 #ifdef TARGET_SIGPWR
108     TARGET_SIGPWR,
109 #else
110     -1,
111 #endif
112     -1, /* SIGPOLL */
113     -1,
114     -1,
115     -1,
116     -1,
117     -1,
118     -1,
119     -1,
120     -1,
121     -1,
122     -1,
123     -1,
124 #ifdef __SIGRTMIN
125     __SIGRTMIN + 1,
126     __SIGRTMIN + 2,
127     __SIGRTMIN + 3,
128     __SIGRTMIN + 4,
129     __SIGRTMIN + 5,
130     __SIGRTMIN + 6,
131     __SIGRTMIN + 7,
132     __SIGRTMIN + 8,
133     __SIGRTMIN + 9,
134     __SIGRTMIN + 10,
135     __SIGRTMIN + 11,
136     __SIGRTMIN + 12,
137     __SIGRTMIN + 13,
138     __SIGRTMIN + 14,
139     __SIGRTMIN + 15,
140     __SIGRTMIN + 16,
141     __SIGRTMIN + 17,
142     __SIGRTMIN + 18,
143     __SIGRTMIN + 19,
144     __SIGRTMIN + 20,
145     __SIGRTMIN + 21,
146     __SIGRTMIN + 22,
147     __SIGRTMIN + 23,
148     __SIGRTMIN + 24,
149     __SIGRTMIN + 25,
150     __SIGRTMIN + 26,
151     __SIGRTMIN + 27,
152     __SIGRTMIN + 28,
153     __SIGRTMIN + 29,
154     __SIGRTMIN + 30,
155     __SIGRTMIN + 31,
156     -1, /* SIGCANCEL */
157     __SIGRTMIN,
158     __SIGRTMIN + 32,
159     __SIGRTMIN + 33,
160     __SIGRTMIN + 34,
161     __SIGRTMIN + 35,
162     __SIGRTMIN + 36,
163     __SIGRTMIN + 37,
164     __SIGRTMIN + 38,
165     __SIGRTMIN + 39,
166     __SIGRTMIN + 40,
167     __SIGRTMIN + 41,
168     __SIGRTMIN + 42,
169     __SIGRTMIN + 43,
170     __SIGRTMIN + 44,
171     __SIGRTMIN + 45,
172     __SIGRTMIN + 46,
173     __SIGRTMIN + 47,
174     __SIGRTMIN + 48,
175     __SIGRTMIN + 49,
176     __SIGRTMIN + 50,
177     __SIGRTMIN + 51,
178     __SIGRTMIN + 52,
179     __SIGRTMIN + 53,
180     __SIGRTMIN + 54,
181     __SIGRTMIN + 55,
182     __SIGRTMIN + 56,
183     __SIGRTMIN + 57,
184     __SIGRTMIN + 58,
185     __SIGRTMIN + 59,
186     __SIGRTMIN + 60,
187     __SIGRTMIN + 61,
188     __SIGRTMIN + 62,
189     __SIGRTMIN + 63,
190     __SIGRTMIN + 64,
191     __SIGRTMIN + 65,
192     __SIGRTMIN + 66,
193     __SIGRTMIN + 67,
194     __SIGRTMIN + 68,
195     __SIGRTMIN + 69,
196     __SIGRTMIN + 70,
197     __SIGRTMIN + 71,
198     __SIGRTMIN + 72,
199     __SIGRTMIN + 73,
200     __SIGRTMIN + 74,
201     __SIGRTMIN + 75,
202     __SIGRTMIN + 76,
203     __SIGRTMIN + 77,
204     __SIGRTMIN + 78,
205     __SIGRTMIN + 79,
206     __SIGRTMIN + 80,
207     __SIGRTMIN + 81,
208     __SIGRTMIN + 82,
209     __SIGRTMIN + 83,
210     __SIGRTMIN + 84,
211     __SIGRTMIN + 85,
212     __SIGRTMIN + 86,
213     __SIGRTMIN + 87,
214     __SIGRTMIN + 88,
215     __SIGRTMIN + 89,
216     __SIGRTMIN + 90,
217     __SIGRTMIN + 91,
218     __SIGRTMIN + 92,
219     __SIGRTMIN + 93,
220     __SIGRTMIN + 94,
221     __SIGRTMIN + 95,
222     -1, /* SIGINFO */
223     -1, /* UNKNOWN */
224     -1, /* DEFAULT */
225     -1,
226     -1,
227     -1,
228     -1,
229     -1,
230     -1
231 #endif
232 };
233 #else
234 /* In system mode we only need SIGINT and SIGTRAP; other signals
235    are not yet supported.  */
236
237 enum {
238     TARGET_SIGINT = 2,
239     TARGET_SIGTRAP = 5
240 };
241
242 static int gdb_signal_table[] = {
243     -1,
244     -1,
245     TARGET_SIGINT,
246     -1,
247     -1,
248     TARGET_SIGTRAP
249 };
250 #endif
251
252 #ifdef CONFIG_USER_ONLY
253 static int target_signal_to_gdb (int sig)
254 {
255     int i;
256     for (i = 0; i < ARRAY_SIZE (gdb_signal_table); i++)
257         if (gdb_signal_table[i] == sig)
258             return i;
259     return GDB_SIGNAL_UNKNOWN;
260 }
261 #endif
262
263 static int gdb_signal_to_target (int sig)
264 {
265     if (sig < ARRAY_SIZE (gdb_signal_table))
266         return gdb_signal_table[sig];
267     else
268         return -1;
269 }
270
271 //#define DEBUG_GDB
272
273 typedef struct GDBRegisterState {
274     int base_reg;
275     int num_regs;
276     gdb_reg_cb get_reg;
277     gdb_reg_cb set_reg;
278     const char *xml;
279     struct GDBRegisterState *next;
280 } GDBRegisterState;
281
282 enum RSState {
283     RS_INACTIVE,
284     RS_IDLE,
285     RS_GETLINE,
286     RS_CHKSUM1,
287     RS_CHKSUM2,
288 };
289 typedef struct GDBState {
290     CPUArchState *c_cpu; /* current CPU for step/continue ops */
291     CPUArchState *g_cpu; /* current CPU for other ops */
292     CPUState *query_cpu; /* for q{f|s}ThreadInfo */
293     enum RSState state; /* parsing state */
294     char line_buf[MAX_PACKET_LENGTH];
295     int line_buf_index;
296     int line_csum;
297     uint8_t last_packet[MAX_PACKET_LENGTH + 4];
298     int last_packet_len;
299     int signal;
300 #ifdef CONFIG_USER_ONLY
301     int fd;
302     int running_state;
303 #else
304     CharDriverState *chr;
305     CharDriverState *mon_chr;
306 #endif
307     char syscall_buf[256];
308     gdb_syscall_complete_cb current_syscall_cb;
309 } GDBState;
310
311 /* By default use no IRQs and no timers while single stepping so as to
312  * make single stepping like an ICE HW step.
313  */
314 static int sstep_flags = SSTEP_ENABLE|SSTEP_NOIRQ|SSTEP_NOTIMER;
315
316 static GDBState *gdbserver_state;
317
318 /* This is an ugly hack to cope with both new and old gdb.
319    If gdb sends qXfer:features:read then assume we're talking to a newish
320    gdb that understands target descriptions.  */
321 static int gdb_has_xml;
322
323 #ifdef CONFIG_USER_ONLY
324 /* XXX: This is not thread safe.  Do we care?  */
325 static int gdbserver_fd = -1;
326
327 static int get_char(GDBState *s)
328 {
329     uint8_t ch;
330     int ret;
331
332     for(;;) {
333         ret = qemu_recv(s->fd, &ch, 1, 0);
334         if (ret < 0) {
335             if (errno == ECONNRESET)
336                 s->fd = -1;
337             if (errno != EINTR && errno != EAGAIN)
338                 return -1;
339         } else if (ret == 0) {
340             close(s->fd);
341             s->fd = -1;
342             return -1;
343         } else {
344             break;
345         }
346     }
347     return ch;
348 }
349 #endif
350
351 static enum {
352     GDB_SYS_UNKNOWN,
353     GDB_SYS_ENABLED,
354     GDB_SYS_DISABLED,
355 } gdb_syscall_mode;
356
357 /* If gdb is connected when the first semihosting syscall occurs then use
358    remote gdb syscalls.  Otherwise use native file IO.  */
359 int use_gdb_syscalls(void)
360 {
361     if (gdb_syscall_mode == GDB_SYS_UNKNOWN) {
362         gdb_syscall_mode = (gdbserver_state ? GDB_SYS_ENABLED
363                                             : GDB_SYS_DISABLED);
364     }
365     return gdb_syscall_mode == GDB_SYS_ENABLED;
366 }
367
368 /* Resume execution.  */
369 static inline void gdb_continue(GDBState *s)
370 {
371 #ifdef CONFIG_USER_ONLY
372     s->running_state = 1;
373 #else
374     if (runstate_check(RUN_STATE_GUEST_PANICKED)) {
375         runstate_set(RUN_STATE_DEBUG);
376     }
377     if (!runstate_needs_reset()) {
378         vm_start();
379     }
380 #endif
381 }
382
383 static void put_buffer(GDBState *s, const uint8_t *buf, int len)
384 {
385 #ifdef CONFIG_USER_ONLY
386     int ret;
387
388     while (len > 0) {
389         ret = send(s->fd, buf, len, 0);
390         if (ret < 0) {
391             if (errno != EINTR && errno != EAGAIN)
392                 return;
393         } else {
394             buf += ret;
395             len -= ret;
396         }
397     }
398 #else
399     qemu_chr_fe_write(s->chr, buf, len);
400 #endif
401 }
402
403 static inline int fromhex(int v)
404 {
405     if (v >= '0' && v <= '9')
406         return v - '0';
407     else if (v >= 'A' && v <= 'F')
408         return v - 'A' + 10;
409     else if (v >= 'a' && v <= 'f')
410         return v - 'a' + 10;
411     else
412         return 0;
413 }
414
415 static inline int tohex(int v)
416 {
417     if (v < 10)
418         return v + '0';
419     else
420         return v - 10 + 'a';
421 }
422
423 static void memtohex(char *buf, const uint8_t *mem, int len)
424 {
425     int i, c;
426     char *q;
427     q = buf;
428     for(i = 0; i < len; i++) {
429         c = mem[i];
430         *q++ = tohex(c >> 4);
431         *q++ = tohex(c & 0xf);
432     }
433     *q = '\0';
434 }
435
436 static void hextomem(uint8_t *mem, const char *buf, int len)
437 {
438     int i;
439
440     for(i = 0; i < len; i++) {
441         mem[i] = (fromhex(buf[0]) << 4) | fromhex(buf[1]);
442         buf += 2;
443     }
444 }
445
446 /* return -1 if error, 0 if OK */
447 static int put_packet_binary(GDBState *s, const char *buf, int len)
448 {
449     int csum, i;
450     uint8_t *p;
451
452     for(;;) {
453         p = s->last_packet;
454         *(p++) = '$';
455         memcpy(p, buf, len);
456         p += len;
457         csum = 0;
458         for(i = 0; i < len; i++) {
459             csum += buf[i];
460         }
461         *(p++) = '#';
462         *(p++) = tohex((csum >> 4) & 0xf);
463         *(p++) = tohex((csum) & 0xf);
464
465         s->last_packet_len = p - s->last_packet;
466         put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
467
468 #ifdef CONFIG_USER_ONLY
469         i = get_char(s);
470         if (i < 0)
471             return -1;
472         if (i == '+')
473             break;
474 #else
475         break;
476 #endif
477     }
478     return 0;
479 }
480
481 /* return -1 if error, 0 if OK */
482 static int put_packet(GDBState *s, const char *buf)
483 {
484 #ifdef DEBUG_GDB
485     printf("reply='%s'\n", buf);
486 #endif
487
488     return put_packet_binary(s, buf, strlen(buf));
489 }
490
491 /* The GDB remote protocol transfers values in target byte order.  This means
492    we can use the raw memory access routines to access the value buffer.
493    Conveniently, these also handle the case where the buffer is mis-aligned.
494  */
495 #define GET_REG8(val) do { \
496     stb_p(mem_buf, val); \
497     return 1; \
498     } while(0)
499 #define GET_REG16(val) do { \
500     stw_p(mem_buf, val); \
501     return 2; \
502     } while(0)
503 #define GET_REG32(val) do { \
504     stl_p(mem_buf, val); \
505     return 4; \
506     } while(0)
507 #define GET_REG64(val) do { \
508     stq_p(mem_buf, val); \
509     return 8; \
510     } while(0)
511
512 #if TARGET_LONG_BITS == 64
513 #define GET_REGL(val) GET_REG64(val)
514 #define ldtul_p(addr) ldq_p(addr)
515 #else
516 #define GET_REGL(val) GET_REG32(val)
517 #define ldtul_p(addr) ldl_p(addr)
518 #endif
519
520 #if defined(TARGET_I386)
521
522 #ifdef TARGET_X86_64
523 static const int gpr_map[16] = {
524     R_EAX, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI, R_EBP, R_ESP,
525     8, 9, 10, 11, 12, 13, 14, 15
526 };
527 #else
528 #define gpr_map gpr_map32
529 #endif
530 static const int gpr_map32[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
531
532 #define NUM_CORE_REGS (CPU_NB_REGS * 2 + 25)
533
534 #define IDX_IP_REG      CPU_NB_REGS
535 #define IDX_FLAGS_REG   (IDX_IP_REG + 1)
536 #define IDX_SEG_REGS    (IDX_FLAGS_REG + 1)
537 #define IDX_FP_REGS     (IDX_SEG_REGS + 6)
538 #define IDX_XMM_REGS    (IDX_FP_REGS + 16)
539 #define IDX_MXCSR_REG   (IDX_XMM_REGS + CPU_NB_REGS)
540
541 static int cpu_gdb_read_register(CPUX86State *env, uint8_t *mem_buf, int n)
542 {
543     if (n < CPU_NB_REGS) {
544         if (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK) {
545             GET_REG64(env->regs[gpr_map[n]]);
546         } else if (n < CPU_NB_REGS32) {
547             GET_REG32(env->regs[gpr_map32[n]]);
548         }
549     } else if (n >= IDX_FP_REGS && n < IDX_FP_REGS + 8) {
550 #ifdef USE_X86LDOUBLE
551         /* FIXME: byteswap float values - after fixing fpregs layout. */
552         memcpy(mem_buf, &env->fpregs[n - IDX_FP_REGS], 10);
553 #else
554         memset(mem_buf, 0, 10);
555 #endif
556         return 10;
557     } else if (n >= IDX_XMM_REGS && n < IDX_XMM_REGS + CPU_NB_REGS) {
558         n -= IDX_XMM_REGS;
559         if (n < CPU_NB_REGS32 ||
560             (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK)) {
561             stq_p(mem_buf, env->xmm_regs[n].XMM_Q(0));
562             stq_p(mem_buf + 8, env->xmm_regs[n].XMM_Q(1));
563             return 16;
564         }
565     } else {
566         switch (n) {
567         case IDX_IP_REG:
568             if (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK) {
569                 GET_REG64(env->eip);
570             } else {
571                 GET_REG32(env->eip);
572             }
573         case IDX_FLAGS_REG: GET_REG32(env->eflags);
574
575         case IDX_SEG_REGS:     GET_REG32(env->segs[R_CS].selector);
576         case IDX_SEG_REGS + 1: GET_REG32(env->segs[R_SS].selector);
577         case IDX_SEG_REGS + 2: GET_REG32(env->segs[R_DS].selector);
578         case IDX_SEG_REGS + 3: GET_REG32(env->segs[R_ES].selector);
579         case IDX_SEG_REGS + 4: GET_REG32(env->segs[R_FS].selector);
580         case IDX_SEG_REGS + 5: GET_REG32(env->segs[R_GS].selector);
581
582         case IDX_FP_REGS + 8:  GET_REG32(env->fpuc);
583         case IDX_FP_REGS + 9:  GET_REG32((env->fpus & ~0x3800) |
584                                          (env->fpstt & 0x7) << 11);
585         case IDX_FP_REGS + 10: GET_REG32(0); /* ftag */
586         case IDX_FP_REGS + 11: GET_REG32(0); /* fiseg */
587         case IDX_FP_REGS + 12: GET_REG32(0); /* fioff */
588         case IDX_FP_REGS + 13: GET_REG32(0); /* foseg */
589         case IDX_FP_REGS + 14: GET_REG32(0); /* fooff */
590         case IDX_FP_REGS + 15: GET_REG32(0); /* fop */
591
592         case IDX_MXCSR_REG: GET_REG32(env->mxcsr);
593         }
594     }
595     return 0;
596 }
597
598 static int cpu_x86_gdb_load_seg(CPUX86State *env, int sreg, uint8_t *mem_buf)
599 {
600     uint16_t selector = ldl_p(mem_buf);
601
602     if (selector != env->segs[sreg].selector) {
603 #if defined(CONFIG_USER_ONLY)
604         cpu_x86_load_seg(env, sreg, selector);
605 #else
606         unsigned int limit, flags;
607         target_ulong base;
608
609         if (!(env->cr[0] & CR0_PE_MASK) || (env->eflags & VM_MASK)) {
610             base = selector << 4;
611             limit = 0xffff;
612             flags = 0;
613         } else {
614             if (!cpu_x86_get_descr_debug(env, selector, &base, &limit, &flags))
615                 return 4;
616         }
617         cpu_x86_load_seg_cache(env, sreg, selector, base, limit, flags);
618 #endif
619     }
620     return 4;
621 }
622
623 static int cpu_gdb_write_register(CPUX86State *env, uint8_t *mem_buf, int n)
624 {
625     uint32_t tmp;
626
627     if (n < CPU_NB_REGS) {
628         if (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK) {
629             env->regs[gpr_map[n]] = ldtul_p(mem_buf);
630             return sizeof(target_ulong);
631         } else if (n < CPU_NB_REGS32) {
632             n = gpr_map32[n];
633             env->regs[n] &= ~0xffffffffUL;
634             env->regs[n] |= (uint32_t)ldl_p(mem_buf);
635             return 4;
636         }
637     } else if (n >= IDX_FP_REGS && n < IDX_FP_REGS + 8) {
638 #ifdef USE_X86LDOUBLE
639         /* FIXME: byteswap float values - after fixing fpregs layout. */
640         memcpy(&env->fpregs[n - IDX_FP_REGS], mem_buf, 10);
641 #endif
642         return 10;
643     } else if (n >= IDX_XMM_REGS && n < IDX_XMM_REGS + CPU_NB_REGS) {
644         n -= IDX_XMM_REGS;
645         if (n < CPU_NB_REGS32 ||
646             (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK)) {
647             env->xmm_regs[n].XMM_Q(0) = ldq_p(mem_buf);
648             env->xmm_regs[n].XMM_Q(1) = ldq_p(mem_buf + 8);
649             return 16;
650         }
651     } else {
652         switch (n) {
653         case IDX_IP_REG:
654             if (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK) {
655                 env->eip = ldq_p(mem_buf);
656                 return 8;
657             } else {
658                 env->eip &= ~0xffffffffUL;
659                 env->eip |= (uint32_t)ldl_p(mem_buf);
660                 return 4;
661             }
662         case IDX_FLAGS_REG:
663             env->eflags = ldl_p(mem_buf);
664             return 4;
665
666         case IDX_SEG_REGS:     return cpu_x86_gdb_load_seg(env, R_CS, mem_buf);
667         case IDX_SEG_REGS + 1: return cpu_x86_gdb_load_seg(env, R_SS, mem_buf);
668         case IDX_SEG_REGS + 2: return cpu_x86_gdb_load_seg(env, R_DS, mem_buf);
669         case IDX_SEG_REGS + 3: return cpu_x86_gdb_load_seg(env, R_ES, mem_buf);
670         case IDX_SEG_REGS + 4: return cpu_x86_gdb_load_seg(env, R_FS, mem_buf);
671         case IDX_SEG_REGS + 5: return cpu_x86_gdb_load_seg(env, R_GS, mem_buf);
672
673         case IDX_FP_REGS + 8:
674             env->fpuc = ldl_p(mem_buf);
675             return 4;
676         case IDX_FP_REGS + 9:
677             tmp = ldl_p(mem_buf);
678             env->fpstt = (tmp >> 11) & 7;
679             env->fpus = tmp & ~0x3800;
680             return 4;
681         case IDX_FP_REGS + 10: /* ftag */  return 4;
682         case IDX_FP_REGS + 11: /* fiseg */ return 4;
683         case IDX_FP_REGS + 12: /* fioff */ return 4;
684         case IDX_FP_REGS + 13: /* foseg */ return 4;
685         case IDX_FP_REGS + 14: /* fooff */ return 4;
686         case IDX_FP_REGS + 15: /* fop */   return 4;
687
688         case IDX_MXCSR_REG:
689             env->mxcsr = ldl_p(mem_buf);
690             return 4;
691         }
692     }
693     /* Unrecognised register.  */
694     return 0;
695 }
696
697 #elif defined (TARGET_PPC)
698
699 /* Old gdb always expects FP registers.  Newer (xml-aware) gdb only
700    expects whatever the target description contains.  Due to a
701    historical mishap the FP registers appear in between core integer
702    regs and PC, MSR, CR, and so forth.  We hack round this by giving the
703    FP regs zero size when talking to a newer gdb.  */
704 #define NUM_CORE_REGS 71
705 #if defined (TARGET_PPC64)
706 #define GDB_CORE_XML "power64-core.xml"
707 #else
708 #define GDB_CORE_XML "power-core.xml"
709 #endif
710
711 static int cpu_gdb_read_register(CPUPPCState *env, uint8_t *mem_buf, int n)
712 {
713     if (n < 32) {
714         /* gprs */
715         GET_REGL(env->gpr[n]);
716     } else if (n < 64) {
717         /* fprs */
718         if (gdb_has_xml)
719             return 0;
720         stfq_p(mem_buf, env->fpr[n-32]);
721         return 8;
722     } else {
723         switch (n) {
724         case 64: GET_REGL(env->nip);
725         case 65: GET_REGL(env->msr);
726         case 66:
727             {
728                 uint32_t cr = 0;
729                 int i;
730                 for (i = 0; i < 8; i++)
731                     cr |= env->crf[i] << (32 - ((i + 1) * 4));
732                 GET_REG32(cr);
733             }
734         case 67: GET_REGL(env->lr);
735         case 68: GET_REGL(env->ctr);
736         case 69: GET_REGL(env->xer);
737         case 70:
738             {
739                 if (gdb_has_xml)
740                     return 0;
741                 GET_REG32(env->fpscr);
742             }
743         }
744     }
745     return 0;
746 }
747
748 static int cpu_gdb_write_register(CPUPPCState *env, uint8_t *mem_buf, int n)
749 {
750     if (n < 32) {
751         /* gprs */
752         env->gpr[n] = ldtul_p(mem_buf);
753         return sizeof(target_ulong);
754     } else if (n < 64) {
755         /* fprs */
756         if (gdb_has_xml)
757             return 0;
758         env->fpr[n-32] = ldfq_p(mem_buf);
759         return 8;
760     } else {
761         switch (n) {
762         case 64:
763             env->nip = ldtul_p(mem_buf);
764             return sizeof(target_ulong);
765         case 65:
766             ppc_store_msr(env, ldtul_p(mem_buf));
767             return sizeof(target_ulong);
768         case 66:
769             {
770                 uint32_t cr = ldl_p(mem_buf);
771                 int i;
772                 for (i = 0; i < 8; i++)
773                     env->crf[i] = (cr >> (32 - ((i + 1) * 4))) & 0xF;
774                 return 4;
775             }
776         case 67:
777             env->lr = ldtul_p(mem_buf);
778             return sizeof(target_ulong);
779         case 68:
780             env->ctr = ldtul_p(mem_buf);
781             return sizeof(target_ulong);
782         case 69:
783             env->xer = ldtul_p(mem_buf);
784             return sizeof(target_ulong);
785         case 70:
786             /* fpscr */
787             if (gdb_has_xml)
788                 return 0;
789             store_fpscr(env, ldtul_p(mem_buf), 0xffffffff);
790             return sizeof(target_ulong);
791         }
792     }
793     return 0;
794 }
795
796 #elif defined (TARGET_SPARC)
797
798 #if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
799 #define NUM_CORE_REGS 86
800 #else
801 #define NUM_CORE_REGS 72
802 #endif
803
804 #ifdef TARGET_ABI32
805 #define GET_REGA(val) GET_REG32(val)
806 #else
807 #define GET_REGA(val) GET_REGL(val)
808 #endif
809
810 static int cpu_gdb_read_register(CPUSPARCState *env, uint8_t *mem_buf, int n)
811 {
812     if (n < 8) {
813         /* g0..g7 */
814         GET_REGA(env->gregs[n]);
815     }
816     if (n < 32) {
817         /* register window */
818         GET_REGA(env->regwptr[n - 8]);
819     }
820 #if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
821     if (n < 64) {
822         /* fprs */
823         if (n & 1) {
824             GET_REG32(env->fpr[(n - 32) / 2].l.lower);
825         } else {
826             GET_REG32(env->fpr[(n - 32) / 2].l.upper);
827         }
828     }
829     /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
830     switch (n) {
831     case 64: GET_REGA(env->y);
832     case 65: GET_REGA(cpu_get_psr(env));
833     case 66: GET_REGA(env->wim);
834     case 67: GET_REGA(env->tbr);
835     case 68: GET_REGA(env->pc);
836     case 69: GET_REGA(env->npc);
837     case 70: GET_REGA(env->fsr);
838     case 71: GET_REGA(0); /* csr */
839     default: GET_REGA(0);
840     }
841 #else
842     if (n < 64) {
843         /* f0-f31 */
844         if (n & 1) {
845             GET_REG32(env->fpr[(n - 32) / 2].l.lower);
846         } else {
847             GET_REG32(env->fpr[(n - 32) / 2].l.upper);
848         }
849     }
850     if (n < 80) {
851         /* f32-f62 (double width, even numbers only) */
852         GET_REG64(env->fpr[(n - 32) / 2].ll);
853     }
854     switch (n) {
855     case 80: GET_REGL(env->pc);
856     case 81: GET_REGL(env->npc);
857     case 82: GET_REGL((cpu_get_ccr(env) << 32) |
858                       ((env->asi & 0xff) << 24) |
859                       ((env->pstate & 0xfff) << 8) |
860                       cpu_get_cwp64(env));
861     case 83: GET_REGL(env->fsr);
862     case 84: GET_REGL(env->fprs);
863     case 85: GET_REGL(env->y);
864     }
865 #endif
866     return 0;
867 }
868
869 static int cpu_gdb_write_register(CPUSPARCState *env, uint8_t *mem_buf, int n)
870 {
871 #if defined(TARGET_ABI32)
872     abi_ulong tmp;
873
874     tmp = ldl_p(mem_buf);
875 #else
876     target_ulong tmp;
877
878     tmp = ldtul_p(mem_buf);
879 #endif
880
881     if (n < 8) {
882         /* g0..g7 */
883         env->gregs[n] = tmp;
884     } else if (n < 32) {
885         /* register window */
886         env->regwptr[n - 8] = tmp;
887     }
888 #if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
889     else if (n < 64) {
890         /* fprs */
891         /* f0-f31 */
892         if (n & 1) {
893             env->fpr[(n - 32) / 2].l.lower = tmp;
894         } else {
895             env->fpr[(n - 32) / 2].l.upper = tmp;
896         }
897     } else {
898         /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
899         switch (n) {
900         case 64: env->y = tmp; break;
901         case 65: cpu_put_psr(env, tmp); break;
902         case 66: env->wim = tmp; break;
903         case 67: env->tbr = tmp; break;
904         case 68: env->pc = tmp; break;
905         case 69: env->npc = tmp; break;
906         case 70: env->fsr = tmp; break;
907         default: return 0;
908         }
909     }
910     return 4;
911 #else
912     else if (n < 64) {
913         /* f0-f31 */
914         tmp = ldl_p(mem_buf);
915         if (n & 1) {
916             env->fpr[(n - 32) / 2].l.lower = tmp;
917         } else {
918             env->fpr[(n - 32) / 2].l.upper = tmp;
919         }
920         return 4;
921     } else if (n < 80) {
922         /* f32-f62 (double width, even numbers only) */
923         env->fpr[(n - 32) / 2].ll = tmp;
924     } else {
925         switch (n) {
926         case 80: env->pc = tmp; break;
927         case 81: env->npc = tmp; break;
928         case 82:
929             cpu_put_ccr(env, tmp >> 32);
930             env->asi = (tmp >> 24) & 0xff;
931             env->pstate = (tmp >> 8) & 0xfff;
932             cpu_put_cwp64(env, tmp & 0xff);
933             break;
934         case 83: env->fsr = tmp; break;
935         case 84: env->fprs = tmp; break;
936         case 85: env->y = tmp; break;
937         default: return 0;
938         }
939     }
940     return 8;
941 #endif
942 }
943 #elif defined (TARGET_ARM)
944
945 /* Old gdb always expect FPA registers.  Newer (xml-aware) gdb only expect
946    whatever the target description contains.  Due to a historical mishap
947    the FPA registers appear in between core integer regs and the CPSR.
948    We hack round this by giving the FPA regs zero size when talking to a
949    newer gdb.  */
950 #define NUM_CORE_REGS 26
951 #define GDB_CORE_XML "arm-core.xml"
952
953 static int cpu_gdb_read_register(CPUARMState *env, uint8_t *mem_buf, int n)
954 {
955     if (n < 16) {
956         /* Core integer register.  */
957         GET_REG32(env->regs[n]);
958     }
959     if (n < 24) {
960         /* FPA registers.  */
961         if (gdb_has_xml)
962             return 0;
963         memset(mem_buf, 0, 12);
964         return 12;
965     }
966     switch (n) {
967     case 24:
968         /* FPA status register.  */
969         if (gdb_has_xml)
970             return 0;
971         GET_REG32(0);
972     case 25:
973         /* CPSR */
974         GET_REG32(cpsr_read(env));
975     }
976     /* Unknown register.  */
977     return 0;
978 }
979
980 static int cpu_gdb_write_register(CPUARMState *env, uint8_t *mem_buf, int n)
981 {
982     uint32_t tmp;
983
984     tmp = ldl_p(mem_buf);
985
986     /* Mask out low bit of PC to workaround gdb bugs.  This will probably
987        cause problems if we ever implement the Jazelle DBX extensions.  */
988     if (n == 15)
989         tmp &= ~1;
990
991     if (n < 16) {
992         /* Core integer register.  */
993         env->regs[n] = tmp;
994         return 4;
995     }
996     if (n < 24) { /* 16-23 */
997         /* FPA registers (ignored).  */
998         if (gdb_has_xml)
999             return 0;
1000         return 12;
1001     }
1002     switch (n) {
1003     case 24:
1004         /* FPA status register (ignored).  */
1005         if (gdb_has_xml)
1006             return 0;
1007         return 4;
1008     case 25:
1009         /* CPSR */
1010         cpsr_write (env, tmp, 0xffffffff);
1011         return 4;
1012     }
1013     /* Unknown register.  */
1014     return 0;
1015 }
1016
1017 #elif defined (TARGET_M68K)
1018
1019 #define NUM_CORE_REGS 18
1020
1021 #define GDB_CORE_XML "cf-core.xml"
1022
1023 static int cpu_gdb_read_register(CPUM68KState *env, uint8_t *mem_buf, int n)
1024 {
1025     if (n < 8) {
1026         /* D0-D7 */
1027         GET_REG32(env->dregs[n]);
1028     } else if (n < 16) {
1029         /* A0-A7 */
1030         GET_REG32(env->aregs[n - 8]);
1031     } else {
1032         switch (n) {
1033         case 16: GET_REG32(env->sr);
1034         case 17: GET_REG32(env->pc);
1035         }
1036     }
1037     /* FP registers not included here because they vary between
1038        ColdFire and m68k.  Use XML bits for these.  */
1039     return 0;
1040 }
1041
1042 static int cpu_gdb_write_register(CPUM68KState *env, uint8_t *mem_buf, int n)
1043 {
1044     uint32_t tmp;
1045
1046     tmp = ldl_p(mem_buf);
1047
1048     if (n < 8) {
1049         /* D0-D7 */
1050         env->dregs[n] = tmp;
1051     } else if (n < 16) {
1052         /* A0-A7 */
1053         env->aregs[n - 8] = tmp;
1054     } else {
1055         switch (n) {
1056         case 16: env->sr = tmp; break;
1057         case 17: env->pc = tmp; break;
1058         default: return 0;
1059         }
1060     }
1061     return 4;
1062 }
1063 #elif defined (TARGET_MIPS)
1064
1065 #define NUM_CORE_REGS 73
1066
1067 static int cpu_gdb_read_register(CPUMIPSState *env, uint8_t *mem_buf, int n)
1068 {
1069     if (n < 32) {
1070         GET_REGL(env->active_tc.gpr[n]);
1071     }
1072     if (env->CP0_Config1 & (1 << CP0C1_FP)) {
1073         if (n >= 38 && n < 70) {
1074             if (env->CP0_Status & (1 << CP0St_FR))
1075                 GET_REGL(env->active_fpu.fpr[n - 38].d);
1076             else
1077                 GET_REGL(env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX]);
1078         }
1079         switch (n) {
1080         case 70: GET_REGL((int32_t)env->active_fpu.fcr31);
1081         case 71: GET_REGL((int32_t)env->active_fpu.fcr0);
1082         }
1083     }
1084     switch (n) {
1085     case 32: GET_REGL((int32_t)env->CP0_Status);
1086     case 33: GET_REGL(env->active_tc.LO[0]);
1087     case 34: GET_REGL(env->active_tc.HI[0]);
1088     case 35: GET_REGL(env->CP0_BadVAddr);
1089     case 36: GET_REGL((int32_t)env->CP0_Cause);
1090     case 37: GET_REGL(env->active_tc.PC | !!(env->hflags & MIPS_HFLAG_M16));
1091     case 72: GET_REGL(0); /* fp */
1092     case 89: GET_REGL((int32_t)env->CP0_PRid);
1093     }
1094     if (n >= 73 && n <= 88) {
1095         /* 16 embedded regs.  */
1096         GET_REGL(0);
1097     }
1098
1099     return 0;
1100 }
1101
1102 /* convert MIPS rounding mode in FCR31 to IEEE library */
1103 static unsigned int ieee_rm[] =
1104   {
1105     float_round_nearest_even,
1106     float_round_to_zero,
1107     float_round_up,
1108     float_round_down
1109   };
1110 #define RESTORE_ROUNDING_MODE \
1111     set_float_rounding_mode(ieee_rm[env->active_fpu.fcr31 & 3], &env->active_fpu.fp_status)
1112
1113 static int cpu_gdb_write_register(CPUMIPSState *env, uint8_t *mem_buf, int n)
1114 {
1115     target_ulong tmp;
1116
1117     tmp = ldtul_p(mem_buf);
1118
1119     if (n < 32) {
1120         env->active_tc.gpr[n] = tmp;
1121         return sizeof(target_ulong);
1122     }
1123     if (env->CP0_Config1 & (1 << CP0C1_FP)
1124             && n >= 38 && n < 73) {
1125         if (n < 70) {
1126             if (env->CP0_Status & (1 << CP0St_FR))
1127               env->active_fpu.fpr[n - 38].d = tmp;
1128             else
1129               env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX] = tmp;
1130         }
1131         switch (n) {
1132         case 70:
1133             env->active_fpu.fcr31 = tmp & 0xFF83FFFF;
1134             /* set rounding mode */
1135             RESTORE_ROUNDING_MODE;
1136             break;
1137         case 71: env->active_fpu.fcr0 = tmp; break;
1138         }
1139         return sizeof(target_ulong);
1140     }
1141     switch (n) {
1142     case 32: env->CP0_Status = tmp; break;
1143     case 33: env->active_tc.LO[0] = tmp; break;
1144     case 34: env->active_tc.HI[0] = tmp; break;
1145     case 35: env->CP0_BadVAddr = tmp; break;
1146     case 36: env->CP0_Cause = tmp; break;
1147     case 37:
1148         env->active_tc.PC = tmp & ~(target_ulong)1;
1149         if (tmp & 1) {
1150             env->hflags |= MIPS_HFLAG_M16;
1151         } else {
1152             env->hflags &= ~(MIPS_HFLAG_M16);
1153         }
1154         break;
1155     case 72: /* fp, ignored */ break;
1156     default: 
1157         if (n > 89)
1158             return 0;
1159         /* Other registers are readonly.  Ignore writes.  */
1160         break;
1161     }
1162
1163     return sizeof(target_ulong);
1164 }
1165 #elif defined(TARGET_OPENRISC)
1166
1167 #define NUM_CORE_REGS (32 + 3)
1168
1169 static int cpu_gdb_read_register(CPUOpenRISCState *env, uint8_t *mem_buf, int n)
1170 {
1171     if (n < 32) {
1172         GET_REG32(env->gpr[n]);
1173     } else {
1174         switch (n) {
1175         case 32:    /* PPC */
1176             GET_REG32(env->ppc);
1177             break;
1178
1179         case 33:    /* NPC */
1180             GET_REG32(env->npc);
1181             break;
1182
1183         case 34:    /* SR */
1184             GET_REG32(env->sr);
1185             break;
1186
1187         default:
1188             break;
1189         }
1190     }
1191     return 0;
1192 }
1193
1194 static int cpu_gdb_write_register(CPUOpenRISCState *env,
1195                                   uint8_t *mem_buf, int n)
1196 {
1197     uint32_t tmp;
1198
1199     if (n > NUM_CORE_REGS) {
1200         return 0;
1201     }
1202
1203     tmp = ldl_p(mem_buf);
1204
1205     if (n < 32) {
1206         env->gpr[n] = tmp;
1207     } else {
1208         switch (n) {
1209         case 32: /* PPC */
1210             env->ppc = tmp;
1211             break;
1212
1213         case 33: /* NPC */
1214             env->npc = tmp;
1215             break;
1216
1217         case 34: /* SR */
1218             env->sr = tmp;
1219             break;
1220
1221         default:
1222             break;
1223         }
1224     }
1225     return 4;
1226 }
1227 #elif defined (TARGET_SH4)
1228
1229 /* Hint: Use "set architecture sh4" in GDB to see fpu registers */
1230 /* FIXME: We should use XML for this.  */
1231
1232 #define NUM_CORE_REGS 59
1233
1234 static int cpu_gdb_read_register(CPUSH4State *env, uint8_t *mem_buf, int n)
1235 {
1236     switch (n) {
1237     case 0 ... 7:
1238         if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1239             GET_REGL(env->gregs[n + 16]);
1240         } else {
1241             GET_REGL(env->gregs[n]);
1242         }
1243     case 8 ... 15:
1244         GET_REGL(env->gregs[n]);
1245     case 16:
1246         GET_REGL(env->pc);
1247     case 17:
1248         GET_REGL(env->pr);
1249     case 18:
1250         GET_REGL(env->gbr);
1251     case 19:
1252         GET_REGL(env->vbr);
1253     case 20:
1254         GET_REGL(env->mach);
1255     case 21:
1256         GET_REGL(env->macl);
1257     case 22:
1258         GET_REGL(env->sr);
1259     case 23:
1260         GET_REGL(env->fpul);
1261     case 24:
1262         GET_REGL(env->fpscr);
1263     case 25 ... 40:
1264         if (env->fpscr & FPSCR_FR) {
1265             stfl_p(mem_buf, env->fregs[n - 9]);
1266         } else {
1267             stfl_p(mem_buf, env->fregs[n - 25]);
1268         }
1269         return 4;
1270     case 41:
1271         GET_REGL(env->ssr);
1272     case 42:
1273         GET_REGL(env->spc);
1274     case 43 ... 50:
1275         GET_REGL(env->gregs[n - 43]);
1276     case 51 ... 58:
1277         GET_REGL(env->gregs[n - (51 - 16)]);
1278     }
1279
1280     return 0;
1281 }
1282
1283 static int cpu_gdb_write_register(CPUSH4State *env, uint8_t *mem_buf, int n)
1284 {
1285     switch (n) {
1286     case 0 ... 7:
1287         if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1288             env->gregs[n + 16] = ldl_p(mem_buf);
1289         } else {
1290             env->gregs[n] = ldl_p(mem_buf);
1291         }
1292         break;
1293     case 8 ... 15:
1294         env->gregs[n] = ldl_p(mem_buf);
1295         break;
1296     case 16:
1297         env->pc = ldl_p(mem_buf);
1298         break;
1299     case 17:
1300         env->pr = ldl_p(mem_buf);
1301         break;
1302     case 18:
1303         env->gbr = ldl_p(mem_buf);
1304         break;
1305     case 19:
1306         env->vbr = ldl_p(mem_buf);
1307         break;
1308     case 20:
1309         env->mach = ldl_p(mem_buf);
1310         break;
1311     case 21:
1312         env->macl = ldl_p(mem_buf);
1313         break;
1314     case 22:
1315         env->sr = ldl_p(mem_buf);
1316         break;
1317     case 23:
1318         env->fpul = ldl_p(mem_buf);
1319         break;
1320     case 24:
1321         env->fpscr = ldl_p(mem_buf);
1322         break;
1323     case 25 ... 40:
1324         if (env->fpscr & FPSCR_FR) {
1325             env->fregs[n - 9] = ldfl_p(mem_buf);
1326         } else {
1327             env->fregs[n - 25] = ldfl_p(mem_buf);
1328         }
1329         break;
1330     case 41:
1331         env->ssr = ldl_p(mem_buf);
1332         break;
1333     case 42:
1334         env->spc = ldl_p(mem_buf);
1335         break;
1336     case 43 ... 50:
1337         env->gregs[n - 43] = ldl_p(mem_buf);
1338         break;
1339     case 51 ... 58:
1340         env->gregs[n - (51 - 16)] = ldl_p(mem_buf);
1341         break;
1342     default: return 0;
1343     }
1344
1345     return 4;
1346 }
1347 #elif defined (TARGET_MICROBLAZE)
1348
1349 #define NUM_CORE_REGS (32 + 5)
1350
1351 static int cpu_gdb_read_register(CPUMBState *env, uint8_t *mem_buf, int n)
1352 {
1353     if (n < 32) {
1354         GET_REG32(env->regs[n]);
1355     } else {
1356         GET_REG32(env->sregs[n - 32]);
1357     }
1358     return 0;
1359 }
1360
1361 static int cpu_gdb_write_register(CPUMBState *env, uint8_t *mem_buf, int n)
1362 {
1363     uint32_t tmp;
1364
1365     if (n > NUM_CORE_REGS)
1366         return 0;
1367
1368     tmp = ldl_p(mem_buf);
1369
1370     if (n < 32) {
1371         env->regs[n] = tmp;
1372     } else {
1373         env->sregs[n - 32] = tmp;
1374     }
1375     return 4;
1376 }
1377 #elif defined (TARGET_CRIS)
1378
1379 #define NUM_CORE_REGS 49
1380
1381 static int
1382 read_register_crisv10(CPUCRISState *env, uint8_t *mem_buf, int n)
1383 {
1384     if (n < 15) {
1385         GET_REG32(env->regs[n]);
1386     }
1387
1388     if (n == 15) {
1389         GET_REG32(env->pc);
1390     }
1391
1392     if (n < 32) {
1393         switch (n) {
1394         case 16:
1395             GET_REG8(env->pregs[n - 16]);
1396             break;
1397         case 17:
1398             GET_REG8(env->pregs[n - 16]);
1399             break;
1400         case 20:
1401         case 21:
1402             GET_REG16(env->pregs[n - 16]);
1403             break;
1404         default:
1405             if (n >= 23) {
1406                 GET_REG32(env->pregs[n - 16]);
1407             }
1408             break;
1409         }
1410     }
1411     return 0;
1412 }
1413
1414 static int cpu_gdb_read_register(CPUCRISState *env, uint8_t *mem_buf, int n)
1415 {
1416     uint8_t srs;
1417
1418     if (env->pregs[PR_VR] < 32)
1419         return read_register_crisv10(env, mem_buf, n);
1420
1421     srs = env->pregs[PR_SRS];
1422     if (n < 16) {
1423         GET_REG32(env->regs[n]);
1424     }
1425
1426     if (n >= 21 && n < 32) {
1427         GET_REG32(env->pregs[n - 16]);
1428     }
1429     if (n >= 33 && n < 49) {
1430         GET_REG32(env->sregs[srs][n - 33]);
1431     }
1432     switch (n) {
1433     case 16: GET_REG8(env->pregs[0]);
1434     case 17: GET_REG8(env->pregs[1]);
1435     case 18: GET_REG32(env->pregs[2]);
1436     case 19: GET_REG8(srs);
1437     case 20: GET_REG16(env->pregs[4]);
1438     case 32: GET_REG32(env->pc);
1439     }
1440
1441     return 0;
1442 }
1443
1444 static int cpu_gdb_write_register(CPUCRISState *env, uint8_t *mem_buf, int n)
1445 {
1446     uint32_t tmp;
1447
1448     if (n > 49)
1449         return 0;
1450
1451     tmp = ldl_p(mem_buf);
1452
1453     if (n < 16) {
1454         env->regs[n] = tmp;
1455     }
1456
1457     if (n >= 21 && n < 32) {
1458         env->pregs[n - 16] = tmp;
1459     }
1460
1461     /* FIXME: Should support function regs be writable?  */
1462     switch (n) {
1463     case 16: return 1;
1464     case 17: return 1;
1465     case 18: env->pregs[PR_PID] = tmp; break;
1466     case 19: return 1;
1467     case 20: return 2;
1468     case 32: env->pc = tmp; break;
1469     }
1470
1471     return 4;
1472 }
1473 #elif defined (TARGET_ALPHA)
1474
1475 #define NUM_CORE_REGS 67
1476
1477 static int cpu_gdb_read_register(CPUAlphaState *env, uint8_t *mem_buf, int n)
1478 {
1479     uint64_t val;
1480     CPU_DoubleU d;
1481
1482     switch (n) {
1483     case 0 ... 30:
1484         val = env->ir[n];
1485         break;
1486     case 32 ... 62:
1487         d.d = env->fir[n - 32];
1488         val = d.ll;
1489         break;
1490     case 63:
1491         val = cpu_alpha_load_fpcr(env);
1492         break;
1493     case 64:
1494         val = env->pc;
1495         break;
1496     case 66:
1497         val = env->unique;
1498         break;
1499     case 31:
1500     case 65:
1501         /* 31 really is the zero register; 65 is unassigned in the
1502            gdb protocol, but is still required to occupy 8 bytes. */
1503         val = 0;
1504         break;
1505     default:
1506         return 0;
1507     }
1508     GET_REGL(val);
1509 }
1510
1511 static int cpu_gdb_write_register(CPUAlphaState *env, uint8_t *mem_buf, int n)
1512 {
1513     target_ulong tmp = ldtul_p(mem_buf);
1514     CPU_DoubleU d;
1515
1516     switch (n) {
1517     case 0 ... 30:
1518         env->ir[n] = tmp;
1519         break;
1520     case 32 ... 62:
1521         d.ll = tmp;
1522         env->fir[n - 32] = d.d;
1523         break;
1524     case 63:
1525         cpu_alpha_store_fpcr(env, tmp);
1526         break;
1527     case 64:
1528         env->pc = tmp;
1529         break;
1530     case 66:
1531         env->unique = tmp;
1532         break;
1533     case 31:
1534     case 65:
1535         /* 31 really is the zero register; 65 is unassigned in the
1536            gdb protocol, but is still required to occupy 8 bytes. */
1537         break;
1538     default:
1539         return 0;
1540     }
1541     return 8;
1542 }
1543 #elif defined (TARGET_S390X)
1544
1545 #define NUM_CORE_REGS  S390_NUM_REGS
1546
1547 static int cpu_gdb_read_register(CPUS390XState *env, uint8_t *mem_buf, int n)
1548 {
1549     uint64_t val;
1550     int cc_op;
1551
1552     switch (n) {
1553     case S390_PSWM_REGNUM:
1554         cc_op = calc_cc(env, env->cc_op, env->cc_src, env->cc_dst, env->cc_vr);
1555         val = deposit64(env->psw.mask, 44, 2, cc_op);
1556         GET_REGL(val);
1557         break;
1558     case S390_PSWA_REGNUM:
1559         GET_REGL(env->psw.addr);
1560         break;
1561     case S390_R0_REGNUM ... S390_R15_REGNUM:
1562         GET_REGL(env->regs[n-S390_R0_REGNUM]);
1563         break;
1564     case S390_A0_REGNUM ... S390_A15_REGNUM:
1565         GET_REG32(env->aregs[n-S390_A0_REGNUM]);
1566         break;
1567     case S390_FPC_REGNUM:
1568         GET_REG32(env->fpc);
1569         break;
1570     case S390_F0_REGNUM ... S390_F15_REGNUM:
1571         GET_REG64(env->fregs[n-S390_F0_REGNUM].ll);
1572         break;
1573     }
1574
1575     return 0;
1576 }
1577
1578 static int cpu_gdb_write_register(CPUS390XState *env, uint8_t *mem_buf, int n)
1579 {
1580     target_ulong tmpl;
1581     uint32_t tmp32;
1582     int r = 8;
1583     tmpl = ldtul_p(mem_buf);
1584     tmp32 = ldl_p(mem_buf);
1585
1586     switch (n) {
1587     case S390_PSWM_REGNUM:
1588         env->psw.mask = tmpl;
1589         env->cc_op = extract64(tmpl, 44, 2);
1590         break;
1591     case S390_PSWA_REGNUM:
1592         env->psw.addr = tmpl;
1593         break;
1594     case S390_R0_REGNUM ... S390_R15_REGNUM:
1595         env->regs[n-S390_R0_REGNUM] = tmpl;
1596         break;
1597     case S390_A0_REGNUM ... S390_A15_REGNUM:
1598         env->aregs[n-S390_A0_REGNUM] = tmp32;
1599         r = 4;
1600         break;
1601     case S390_FPC_REGNUM:
1602         env->fpc = tmp32;
1603         r = 4;
1604         break;
1605     case S390_F0_REGNUM ... S390_F15_REGNUM:
1606         env->fregs[n-S390_F0_REGNUM].ll = tmpl;
1607         break;
1608     default:
1609         return 0;
1610     }
1611     return r;
1612 }
1613 #elif defined (TARGET_LM32)
1614
1615 #include "hw/lm32/lm32_pic.h"
1616 #define NUM_CORE_REGS (32 + 7)
1617
1618 static int cpu_gdb_read_register(CPULM32State *env, uint8_t *mem_buf, int n)
1619 {
1620     if (n < 32) {
1621         GET_REG32(env->regs[n]);
1622     } else {
1623         switch (n) {
1624         case 32:
1625             GET_REG32(env->pc);
1626             break;
1627         /* FIXME: put in right exception ID */
1628         case 33:
1629             GET_REG32(0);
1630             break;
1631         case 34:
1632             GET_REG32(env->eba);
1633             break;
1634         case 35:
1635             GET_REG32(env->deba);
1636             break;
1637         case 36:
1638             GET_REG32(env->ie);
1639             break;
1640         case 37:
1641             GET_REG32(lm32_pic_get_im(env->pic_state));
1642             break;
1643         case 38:
1644             GET_REG32(lm32_pic_get_ip(env->pic_state));
1645             break;
1646         }
1647     }
1648     return 0;
1649 }
1650
1651 static int cpu_gdb_write_register(CPULM32State *env, uint8_t *mem_buf, int n)
1652 {
1653     uint32_t tmp;
1654
1655     if (n > NUM_CORE_REGS) {
1656         return 0;
1657     }
1658
1659     tmp = ldl_p(mem_buf);
1660
1661     if (n < 32) {
1662         env->regs[n] = tmp;
1663     } else {
1664         switch (n) {
1665         case 32:
1666             env->pc = tmp;
1667             break;
1668         case 34:
1669             env->eba = tmp;
1670             break;
1671         case 35:
1672             env->deba = tmp;
1673             break;
1674         case 36:
1675             env->ie = tmp;
1676             break;
1677         case 37:
1678             lm32_pic_set_im(env->pic_state, tmp);
1679             break;
1680         case 38:
1681             lm32_pic_set_ip(env->pic_state, tmp);
1682             break;
1683         }
1684     }
1685     return 4;
1686 }
1687 #elif defined(TARGET_XTENSA)
1688
1689 /* Use num_core_regs to see only non-privileged registers in an unmodified gdb.
1690  * Use num_regs to see all registers. gdb modification is required for that:
1691  * reset bit 0 in the 'flags' field of the registers definitions in the
1692  * gdb/xtensa-config.c inside gdb source tree or inside gdb overlay.
1693  */
1694 #define NUM_CORE_REGS (env->config->gdb_regmap.num_regs)
1695 #define num_g_regs NUM_CORE_REGS
1696
1697 static int cpu_gdb_read_register(CPUXtensaState *env, uint8_t *mem_buf, int n)
1698 {
1699     const XtensaGdbReg *reg = env->config->gdb_regmap.reg + n;
1700
1701     if (n < 0 || n >= env->config->gdb_regmap.num_regs) {
1702         return 0;
1703     }
1704
1705     switch (reg->type) {
1706     case 9: /*pc*/
1707         GET_REG32(env->pc);
1708         break;
1709
1710     case 1: /*ar*/
1711         xtensa_sync_phys_from_window(env);
1712         GET_REG32(env->phys_regs[(reg->targno & 0xff) % env->config->nareg]);
1713         break;
1714
1715     case 2: /*SR*/
1716         GET_REG32(env->sregs[reg->targno & 0xff]);
1717         break;
1718
1719     case 3: /*UR*/
1720         GET_REG32(env->uregs[reg->targno & 0xff]);
1721         break;
1722
1723     case 4: /*f*/
1724         GET_REG32(float32_val(env->fregs[reg->targno & 0x0f]));
1725         break;
1726
1727     case 8: /*a*/
1728         GET_REG32(env->regs[reg->targno & 0x0f]);
1729         break;
1730
1731     default:
1732         qemu_log("%s from reg %d of unsupported type %d\n",
1733                 __func__, n, reg->type);
1734         return 0;
1735     }
1736 }
1737
1738 static int cpu_gdb_write_register(CPUXtensaState *env, uint8_t *mem_buf, int n)
1739 {
1740     uint32_t tmp;
1741     const XtensaGdbReg *reg = env->config->gdb_regmap.reg + n;
1742
1743     if (n < 0 || n >= env->config->gdb_regmap.num_regs) {
1744         return 0;
1745     }
1746
1747     tmp = ldl_p(mem_buf);
1748
1749     switch (reg->type) {
1750     case 9: /*pc*/
1751         env->pc = tmp;
1752         break;
1753
1754     case 1: /*ar*/
1755         env->phys_regs[(reg->targno & 0xff) % env->config->nareg] = tmp;
1756         xtensa_sync_window_from_phys(env);
1757         break;
1758
1759     case 2: /*SR*/
1760         env->sregs[reg->targno & 0xff] = tmp;
1761         break;
1762
1763     case 3: /*UR*/
1764         env->uregs[reg->targno & 0xff] = tmp;
1765         break;
1766
1767     case 4: /*f*/
1768         env->fregs[reg->targno & 0x0f] = make_float32(tmp);
1769         break;
1770
1771     case 8: /*a*/
1772         env->regs[reg->targno & 0x0f] = tmp;
1773         break;
1774
1775     default:
1776         qemu_log("%s to reg %d of unsupported type %d\n",
1777                 __func__, n, reg->type);
1778         return 0;
1779     }
1780
1781     return 4;
1782 }
1783 #else
1784
1785 #define NUM_CORE_REGS 0
1786
1787 static int cpu_gdb_read_register(CPUArchState *env, uint8_t *mem_buf, int n)
1788 {
1789     return 0;
1790 }
1791
1792 static int cpu_gdb_write_register(CPUArchState *env, uint8_t *mem_buf, int n)
1793 {
1794     return 0;
1795 }
1796
1797 #endif
1798
1799 #if !defined(TARGET_XTENSA)
1800 static int num_g_regs = NUM_CORE_REGS;
1801 #endif
1802
1803 #ifdef GDB_CORE_XML
1804 /* Encode data using the encoding for 'x' packets.  */
1805 static int memtox(char *buf, const char *mem, int len)
1806 {
1807     char *p = buf;
1808     char c;
1809
1810     while (len--) {
1811         c = *(mem++);
1812         switch (c) {
1813         case '#': case '$': case '*': case '}':
1814             *(p++) = '}';
1815             *(p++) = c ^ 0x20;
1816             break;
1817         default:
1818             *(p++) = c;
1819             break;
1820         }
1821     }
1822     return p - buf;
1823 }
1824
1825 static const char *get_feature_xml(const char *p, const char **newp)
1826 {
1827     size_t len;
1828     int i;
1829     const char *name;
1830     static char target_xml[1024];
1831
1832     len = 0;
1833     while (p[len] && p[len] != ':')
1834         len++;
1835     *newp = p + len;
1836
1837     name = NULL;
1838     if (strncmp(p, "target.xml", len) == 0) {
1839         /* Generate the XML description for this CPU.  */
1840         if (!target_xml[0]) {
1841             GDBRegisterState *r;
1842             CPUArchState *env = first_cpu->env_ptr;
1843
1844             snprintf(target_xml, sizeof(target_xml),
1845                      "<?xml version=\"1.0\"?>"
1846                      "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
1847                      "<target>"
1848                      "<xi:include href=\"%s\"/>",
1849                      GDB_CORE_XML);
1850
1851             for (r = env->gdb_regs; r; r = r->next) {
1852                 pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\"");
1853                 pstrcat(target_xml, sizeof(target_xml), r->xml);
1854                 pstrcat(target_xml, sizeof(target_xml), "\"/>");
1855             }
1856             pstrcat(target_xml, sizeof(target_xml), "</target>");
1857         }
1858         return target_xml;
1859     }
1860     for (i = 0; ; i++) {
1861         name = xml_builtin[i][0];
1862         if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
1863             break;
1864     }
1865     return name ? xml_builtin[i][1] : NULL;
1866 }
1867 #endif
1868
1869 static int gdb_read_register(CPUArchState *env, uint8_t *mem_buf, int reg)
1870 {
1871     GDBRegisterState *r;
1872
1873     if (reg < NUM_CORE_REGS)
1874         return cpu_gdb_read_register(env, mem_buf, reg);
1875
1876     for (r = env->gdb_regs; r; r = r->next) {
1877         if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1878             return r->get_reg(env, mem_buf, reg - r->base_reg);
1879         }
1880     }
1881     return 0;
1882 }
1883
1884 static int gdb_write_register(CPUArchState *env, uint8_t *mem_buf, int reg)
1885 {
1886     GDBRegisterState *r;
1887
1888     if (reg < NUM_CORE_REGS)
1889         return cpu_gdb_write_register(env, mem_buf, reg);
1890
1891     for (r = env->gdb_regs; r; r = r->next) {
1892         if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1893             return r->set_reg(env, mem_buf, reg - r->base_reg);
1894         }
1895     }
1896     return 0;
1897 }
1898
1899 #if !defined(TARGET_XTENSA)
1900 /* Register a supplemental set of CPU registers.  If g_pos is nonzero it
1901    specifies the first register number and these registers are included in
1902    a standard "g" packet.  Direction is relative to gdb, i.e. get_reg is
1903    gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
1904  */
1905
1906 void gdb_register_coprocessor(CPUArchState * env,
1907                              gdb_reg_cb get_reg, gdb_reg_cb set_reg,
1908                              int num_regs, const char *xml, int g_pos)
1909 {
1910     GDBRegisterState *s;
1911     GDBRegisterState **p;
1912     static int last_reg = NUM_CORE_REGS;
1913
1914     p = &env->gdb_regs;
1915     while (*p) {
1916         /* Check for duplicates.  */
1917         if (strcmp((*p)->xml, xml) == 0)
1918             return;
1919         p = &(*p)->next;
1920     }
1921
1922     s = g_new0(GDBRegisterState, 1);
1923     s->base_reg = last_reg;
1924     s->num_regs = num_regs;
1925     s->get_reg = get_reg;
1926     s->set_reg = set_reg;
1927     s->xml = xml;
1928
1929     /* Add to end of list.  */
1930     last_reg += num_regs;
1931     *p = s;
1932     if (g_pos) {
1933         if (g_pos != s->base_reg) {
1934             fprintf(stderr, "Error: Bad gdb register numbering for '%s'\n"
1935                     "Expected %d got %d\n", xml, g_pos, s->base_reg);
1936         } else {
1937             num_g_regs = last_reg;
1938         }
1939     }
1940 }
1941 #endif
1942
1943 #ifndef CONFIG_USER_ONLY
1944 static const int xlat_gdb_type[] = {
1945     [GDB_WATCHPOINT_WRITE]  = BP_GDB | BP_MEM_WRITE,
1946     [GDB_WATCHPOINT_READ]   = BP_GDB | BP_MEM_READ,
1947     [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
1948 };
1949 #endif
1950
1951 static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
1952 {
1953     CPUState *cpu;
1954     CPUArchState *env;
1955     int err = 0;
1956
1957     if (kvm_enabled())
1958         return kvm_insert_breakpoint(gdbserver_state->c_cpu, addr, len, type);
1959
1960     switch (type) {
1961     case GDB_BREAKPOINT_SW:
1962     case GDB_BREAKPOINT_HW:
1963         for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
1964             env = cpu->env_ptr;
1965             err = cpu_breakpoint_insert(env, addr, BP_GDB, NULL);
1966             if (err)
1967                 break;
1968         }
1969         return err;
1970 #ifndef CONFIG_USER_ONLY
1971     case GDB_WATCHPOINT_WRITE:
1972     case GDB_WATCHPOINT_READ:
1973     case GDB_WATCHPOINT_ACCESS:
1974         for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
1975             env = cpu->env_ptr;
1976             err = cpu_watchpoint_insert(env, addr, len, xlat_gdb_type[type],
1977                                         NULL);
1978             if (err)
1979                 break;
1980         }
1981         return err;
1982 #endif
1983     default:
1984         return -ENOSYS;
1985     }
1986 }
1987
1988 static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
1989 {
1990     CPUState *cpu;
1991     CPUArchState *env;
1992     int err = 0;
1993
1994     if (kvm_enabled())
1995         return kvm_remove_breakpoint(gdbserver_state->c_cpu, addr, len, type);
1996
1997     switch (type) {
1998     case GDB_BREAKPOINT_SW:
1999     case GDB_BREAKPOINT_HW:
2000         for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
2001             env = cpu->env_ptr;
2002             err = cpu_breakpoint_remove(env, addr, BP_GDB);
2003             if (err)
2004                 break;
2005         }
2006         return err;
2007 #ifndef CONFIG_USER_ONLY
2008     case GDB_WATCHPOINT_WRITE:
2009     case GDB_WATCHPOINT_READ:
2010     case GDB_WATCHPOINT_ACCESS:
2011         for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
2012             env = cpu->env_ptr;
2013             err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]);
2014             if (err)
2015                 break;
2016         }
2017         return err;
2018 #endif
2019     default:
2020         return -ENOSYS;
2021     }
2022 }
2023
2024 static void gdb_breakpoint_remove_all(void)
2025 {
2026     CPUState *cpu;
2027     CPUArchState *env;
2028
2029     if (kvm_enabled()) {
2030         kvm_remove_all_breakpoints(ENV_GET_CPU(gdbserver_state->c_cpu));
2031         return;
2032     }
2033
2034     for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
2035         env = cpu->env_ptr;
2036         cpu_breakpoint_remove_all(env, BP_GDB);
2037 #ifndef CONFIG_USER_ONLY
2038         cpu_watchpoint_remove_all(env, BP_GDB);
2039 #endif
2040     }
2041 }
2042
2043 static void gdb_set_cpu_pc(GDBState *s, target_ulong pc)
2044 {
2045     CPUState *cpu = ENV_GET_CPU(s->c_cpu);
2046     CPUClass *cc = CPU_GET_CLASS(cpu);
2047
2048     cpu_synchronize_state(cpu);
2049     if (cc->set_pc) {
2050         cc->set_pc(cpu, pc);
2051     }
2052 }
2053
2054 static CPUArchState *find_cpu(uint32_t thread_id)
2055 {
2056     CPUState *cpu;
2057
2058     for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
2059         if (cpu_index(cpu) == thread_id) {
2060             return cpu->env_ptr;
2061         }
2062     }
2063
2064     return NULL;
2065 }
2066
2067 static int gdb_handle_packet(GDBState *s, const char *line_buf)
2068 {
2069     CPUArchState *env;
2070     const char *p;
2071     uint32_t thread;
2072     int ch, reg_size, type, res;
2073     char buf[MAX_PACKET_LENGTH];
2074     uint8_t mem_buf[MAX_PACKET_LENGTH];
2075     uint8_t *registers;
2076     target_ulong addr, len;
2077
2078 #ifdef DEBUG_GDB
2079     printf("command='%s'\n", line_buf);
2080 #endif
2081     p = line_buf;
2082     ch = *p++;
2083     switch(ch) {
2084     case '?':
2085         /* TODO: Make this return the correct value for user-mode.  */
2086         snprintf(buf, sizeof(buf), "T%02xthread:%02x;", GDB_SIGNAL_TRAP,
2087                  cpu_index(ENV_GET_CPU(s->c_cpu)));
2088         put_packet(s, buf);
2089         /* Remove all the breakpoints when this query is issued,
2090          * because gdb is doing and initial connect and the state
2091          * should be cleaned up.
2092          */
2093         gdb_breakpoint_remove_all();
2094         break;
2095     case 'c':
2096         if (*p != '\0') {
2097             addr = strtoull(p, (char **)&p, 16);
2098             gdb_set_cpu_pc(s, addr);
2099         }
2100         s->signal = 0;
2101         gdb_continue(s);
2102         return RS_IDLE;
2103     case 'C':
2104         s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16));
2105         if (s->signal == -1)
2106             s->signal = 0;
2107         gdb_continue(s);
2108         return RS_IDLE;
2109     case 'v':
2110         if (strncmp(p, "Cont", 4) == 0) {
2111             int res_signal, res_thread;
2112
2113             p += 4;
2114             if (*p == '?') {
2115                 put_packet(s, "vCont;c;C;s;S");
2116                 break;
2117             }
2118             res = 0;
2119             res_signal = 0;
2120             res_thread = 0;
2121             while (*p) {
2122                 int action, signal;
2123
2124                 if (*p++ != ';') {
2125                     res = 0;
2126                     break;
2127                 }
2128                 action = *p++;
2129                 signal = 0;
2130                 if (action == 'C' || action == 'S') {
2131                     signal = strtoul(p, (char **)&p, 16);
2132                 } else if (action != 'c' && action != 's') {
2133                     res = 0;
2134                     break;
2135                 }
2136                 thread = 0;
2137                 if (*p == ':') {
2138                     thread = strtoull(p+1, (char **)&p, 16);
2139                 }
2140                 action = tolower(action);
2141                 if (res == 0 || (res == 'c' && action == 's')) {
2142                     res = action;
2143                     res_signal = signal;
2144                     res_thread = thread;
2145                 }
2146             }
2147             if (res) {
2148                 if (res_thread != -1 && res_thread != 0) {
2149                     env = find_cpu(res_thread);
2150                     if (env == NULL) {
2151                         put_packet(s, "E22");
2152                         break;
2153                     }
2154                     s->c_cpu = env;
2155                 }
2156                 if (res == 's') {
2157                     cpu_single_step(s->c_cpu, sstep_flags);
2158                 }
2159                 s->signal = res_signal;
2160                 gdb_continue(s);
2161                 return RS_IDLE;
2162             }
2163             break;
2164         } else {
2165             goto unknown_command;
2166         }
2167     case 'k':
2168 #ifdef CONFIG_USER_ONLY
2169         /* Kill the target */
2170         fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
2171         exit(0);
2172 #endif
2173     case 'D':
2174         /* Detach packet */
2175         gdb_breakpoint_remove_all();
2176         gdb_syscall_mode = GDB_SYS_DISABLED;
2177         gdb_continue(s);
2178         put_packet(s, "OK");
2179         break;
2180     case 's':
2181         if (*p != '\0') {
2182             addr = strtoull(p, (char **)&p, 16);
2183             gdb_set_cpu_pc(s, addr);
2184         }
2185         cpu_single_step(s->c_cpu, sstep_flags);
2186         gdb_continue(s);
2187         return RS_IDLE;
2188     case 'F':
2189         {
2190             target_ulong ret;
2191             target_ulong err;
2192
2193             ret = strtoull(p, (char **)&p, 16);
2194             if (*p == ',') {
2195                 p++;
2196                 err = strtoull(p, (char **)&p, 16);
2197             } else {
2198                 err = 0;
2199             }
2200             if (*p == ',')
2201                 p++;
2202             type = *p;
2203             if (s->current_syscall_cb) {
2204                 s->current_syscall_cb(s->c_cpu, ret, err);
2205                 s->current_syscall_cb = NULL;
2206             }
2207             if (type == 'C') {
2208                 put_packet(s, "T02");
2209             } else {
2210                 gdb_continue(s);
2211             }
2212         }
2213         break;
2214     case 'g':
2215         cpu_synchronize_state(ENV_GET_CPU(s->g_cpu));
2216         env = s->g_cpu;
2217         len = 0;
2218         for (addr = 0; addr < num_g_regs; addr++) {
2219             reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr);
2220             len += reg_size;
2221         }
2222         memtohex(buf, mem_buf, len);
2223         put_packet(s, buf);
2224         break;
2225     case 'G':
2226         cpu_synchronize_state(ENV_GET_CPU(s->g_cpu));
2227         env = s->g_cpu;
2228         registers = mem_buf;
2229         len = strlen(p) / 2;
2230         hextomem((uint8_t *)registers, p, len);
2231         for (addr = 0; addr < num_g_regs && len > 0; addr++) {
2232             reg_size = gdb_write_register(s->g_cpu, registers, addr);
2233             len -= reg_size;
2234             registers += reg_size;
2235         }
2236         put_packet(s, "OK");
2237         break;
2238     case 'm':
2239         addr = strtoull(p, (char **)&p, 16);
2240         if (*p == ',')
2241             p++;
2242         len = strtoull(p, NULL, 16);
2243         if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 0) != 0) {
2244             put_packet (s, "E14");
2245         } else {
2246             memtohex(buf, mem_buf, len);
2247             put_packet(s, buf);
2248         }
2249         break;
2250     case 'M':
2251         addr = strtoull(p, (char **)&p, 16);
2252         if (*p == ',')
2253             p++;
2254         len = strtoull(p, (char **)&p, 16);
2255         if (*p == ':')
2256             p++;
2257         hextomem(mem_buf, p, len);
2258         if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 1) != 0) {
2259             put_packet(s, "E14");
2260         } else {
2261             put_packet(s, "OK");
2262         }
2263         break;
2264     case 'p':
2265         /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
2266            This works, but can be very slow.  Anything new enough to
2267            understand XML also knows how to use this properly.  */
2268         if (!gdb_has_xml)
2269             goto unknown_command;
2270         addr = strtoull(p, (char **)&p, 16);
2271         reg_size = gdb_read_register(s->g_cpu, mem_buf, addr);
2272         if (reg_size) {
2273             memtohex(buf, mem_buf, reg_size);
2274             put_packet(s, buf);
2275         } else {
2276             put_packet(s, "E14");
2277         }
2278         break;
2279     case 'P':
2280         if (!gdb_has_xml)
2281             goto unknown_command;
2282         addr = strtoull(p, (char **)&p, 16);
2283         if (*p == '=')
2284             p++;
2285         reg_size = strlen(p) / 2;
2286         hextomem(mem_buf, p, reg_size);
2287         gdb_write_register(s->g_cpu, mem_buf, addr);
2288         put_packet(s, "OK");
2289         break;
2290     case 'Z':
2291     case 'z':
2292         type = strtoul(p, (char **)&p, 16);
2293         if (*p == ',')
2294             p++;
2295         addr = strtoull(p, (char **)&p, 16);
2296         if (*p == ',')
2297             p++;
2298         len = strtoull(p, (char **)&p, 16);
2299         if (ch == 'Z')
2300             res = gdb_breakpoint_insert(addr, len, type);
2301         else
2302             res = gdb_breakpoint_remove(addr, len, type);
2303         if (res >= 0)
2304              put_packet(s, "OK");
2305         else if (res == -ENOSYS)
2306             put_packet(s, "");
2307         else
2308             put_packet(s, "E22");
2309         break;
2310     case 'H':
2311         type = *p++;
2312         thread = strtoull(p, (char **)&p, 16);
2313         if (thread == -1 || thread == 0) {
2314             put_packet(s, "OK");
2315             break;
2316         }
2317         env = find_cpu(thread);
2318         if (env == NULL) {
2319             put_packet(s, "E22");
2320             break;
2321         }
2322         switch (type) {
2323         case 'c':
2324             s->c_cpu = env;
2325             put_packet(s, "OK");
2326             break;
2327         case 'g':
2328             s->g_cpu = env;
2329             put_packet(s, "OK");
2330             break;
2331         default:
2332              put_packet(s, "E22");
2333              break;
2334         }
2335         break;
2336     case 'T':
2337         thread = strtoull(p, (char **)&p, 16);
2338         env = find_cpu(thread);
2339
2340         if (env != NULL) {
2341             put_packet(s, "OK");
2342         } else {
2343             put_packet(s, "E22");
2344         }
2345         break;
2346     case 'q':
2347     case 'Q':
2348         /* parse any 'q' packets here */
2349         if (!strcmp(p,"qemu.sstepbits")) {
2350             /* Query Breakpoint bit definitions */
2351             snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
2352                      SSTEP_ENABLE,
2353                      SSTEP_NOIRQ,
2354                      SSTEP_NOTIMER);
2355             put_packet(s, buf);
2356             break;
2357         } else if (strncmp(p,"qemu.sstep",10) == 0) {
2358             /* Display or change the sstep_flags */
2359             p += 10;
2360             if (*p != '=') {
2361                 /* Display current setting */
2362                 snprintf(buf, sizeof(buf), "0x%x", sstep_flags);
2363                 put_packet(s, buf);
2364                 break;
2365             }
2366             p++;
2367             type = strtoul(p, (char **)&p, 16);
2368             sstep_flags = type;
2369             put_packet(s, "OK");
2370             break;
2371         } else if (strcmp(p,"C") == 0) {
2372             /* "Current thread" remains vague in the spec, so always return
2373              *  the first CPU (gdb returns the first thread). */
2374             put_packet(s, "QC1");
2375             break;
2376         } else if (strcmp(p,"fThreadInfo") == 0) {
2377             s->query_cpu = first_cpu;
2378             goto report_cpuinfo;
2379         } else if (strcmp(p,"sThreadInfo") == 0) {
2380         report_cpuinfo:
2381             if (s->query_cpu) {
2382                 snprintf(buf, sizeof(buf), "m%x", cpu_index(s->query_cpu));
2383                 put_packet(s, buf);
2384                 s->query_cpu = s->query_cpu->next_cpu;
2385             } else
2386                 put_packet(s, "l");
2387             break;
2388         } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) {
2389             thread = strtoull(p+16, (char **)&p, 16);
2390             env = find_cpu(thread);
2391             if (env != NULL) {
2392                 CPUState *cpu = ENV_GET_CPU(env);
2393                 cpu_synchronize_state(cpu);
2394                 len = snprintf((char *)mem_buf, sizeof(mem_buf),
2395                                "CPU#%d [%s]", cpu->cpu_index,
2396                                cpu->halted ? "halted " : "running");
2397                 memtohex(buf, mem_buf, len);
2398                 put_packet(s, buf);
2399             }
2400             break;
2401         }
2402 #ifdef CONFIG_USER_ONLY
2403         else if (strncmp(p, "Offsets", 7) == 0) {
2404             TaskState *ts = s->c_cpu->opaque;
2405
2406             snprintf(buf, sizeof(buf),
2407                      "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
2408                      ";Bss=" TARGET_ABI_FMT_lx,
2409                      ts->info->code_offset,
2410                      ts->info->data_offset,
2411                      ts->info->data_offset);
2412             put_packet(s, buf);
2413             break;
2414         }
2415 #else /* !CONFIG_USER_ONLY */
2416         else if (strncmp(p, "Rcmd,", 5) == 0) {
2417             int len = strlen(p + 5);
2418
2419             if ((len % 2) != 0) {
2420                 put_packet(s, "E01");
2421                 break;
2422             }
2423             hextomem(mem_buf, p + 5, len);
2424             len = len / 2;
2425             mem_buf[len++] = 0;
2426             qemu_chr_be_write(s->mon_chr, mem_buf, len);
2427             put_packet(s, "OK");
2428             break;
2429         }
2430 #endif /* !CONFIG_USER_ONLY */
2431         if (strncmp(p, "Supported", 9) == 0) {
2432             snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
2433 #ifdef GDB_CORE_XML
2434             pstrcat(buf, sizeof(buf), ";qXfer:features:read+");
2435 #endif
2436             put_packet(s, buf);
2437             break;
2438         }
2439 #ifdef GDB_CORE_XML
2440         if (strncmp(p, "Xfer:features:read:", 19) == 0) {
2441             const char *xml;
2442             target_ulong total_len;
2443
2444             gdb_has_xml = 1;
2445             p += 19;
2446             xml = get_feature_xml(p, &p);
2447             if (!xml) {
2448                 snprintf(buf, sizeof(buf), "E00");
2449                 put_packet(s, buf);
2450                 break;
2451             }
2452
2453             if (*p == ':')
2454                 p++;
2455             addr = strtoul(p, (char **)&p, 16);
2456             if (*p == ',')
2457                 p++;
2458             len = strtoul(p, (char **)&p, 16);
2459
2460             total_len = strlen(xml);
2461             if (addr > total_len) {
2462                 snprintf(buf, sizeof(buf), "E00");
2463                 put_packet(s, buf);
2464                 break;
2465             }
2466             if (len > (MAX_PACKET_LENGTH - 5) / 2)
2467                 len = (MAX_PACKET_LENGTH - 5) / 2;
2468             if (len < total_len - addr) {
2469                 buf[0] = 'm';
2470                 len = memtox(buf + 1, xml + addr, len);
2471             } else {
2472                 buf[0] = 'l';
2473                 len = memtox(buf + 1, xml + addr, total_len - addr);
2474             }
2475             put_packet_binary(s, buf, len + 1);
2476             break;
2477         }
2478 #endif
2479         /* Unrecognised 'q' command.  */
2480         goto unknown_command;
2481
2482     default:
2483     unknown_command:
2484         /* put empty packet */
2485         buf[0] = '\0';
2486         put_packet(s, buf);
2487         break;
2488     }
2489     return RS_IDLE;
2490 }
2491
2492 void gdb_set_stop_cpu(CPUState *cpu)
2493 {
2494     CPUArchState *env = cpu->env_ptr;
2495
2496     gdbserver_state->c_cpu = env;
2497     gdbserver_state->g_cpu = env;
2498 }
2499
2500 #ifndef CONFIG_USER_ONLY
2501 static void gdb_vm_state_change(void *opaque, int running, RunState state)
2502 {
2503     GDBState *s = gdbserver_state;
2504     CPUArchState *env = s->c_cpu;
2505     CPUState *cpu = ENV_GET_CPU(env);
2506     char buf[256];
2507     const char *type;
2508     int ret;
2509
2510     if (running || s->state == RS_INACTIVE) {
2511         return;
2512     }
2513     /* Is there a GDB syscall waiting to be sent?  */
2514     if (s->current_syscall_cb) {
2515         put_packet(s, s->syscall_buf);
2516         return;
2517     }
2518     switch (state) {
2519     case RUN_STATE_DEBUG:
2520         if (env->watchpoint_hit) {
2521             switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
2522             case BP_MEM_READ:
2523                 type = "r";
2524                 break;
2525             case BP_MEM_ACCESS:
2526                 type = "a";
2527                 break;
2528             default:
2529                 type = "";
2530                 break;
2531             }
2532             snprintf(buf, sizeof(buf),
2533                      "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
2534                      GDB_SIGNAL_TRAP, cpu_index(cpu), type,
2535                      env->watchpoint_hit->vaddr);
2536             env->watchpoint_hit = NULL;
2537             goto send_packet;
2538         }
2539         tb_flush(env);
2540         ret = GDB_SIGNAL_TRAP;
2541         break;
2542     case RUN_STATE_PAUSED:
2543         ret = GDB_SIGNAL_INT;
2544         break;
2545     case RUN_STATE_SHUTDOWN:
2546         ret = GDB_SIGNAL_QUIT;
2547         break;
2548     case RUN_STATE_IO_ERROR:
2549         ret = GDB_SIGNAL_IO;
2550         break;
2551     case RUN_STATE_WATCHDOG:
2552         ret = GDB_SIGNAL_ALRM;
2553         break;
2554     case RUN_STATE_INTERNAL_ERROR:
2555         ret = GDB_SIGNAL_ABRT;
2556         break;
2557     case RUN_STATE_SAVE_VM:
2558     case RUN_STATE_RESTORE_VM:
2559         return;
2560     case RUN_STATE_FINISH_MIGRATE:
2561         ret = GDB_SIGNAL_XCPU;
2562         break;
2563     default:
2564         ret = GDB_SIGNAL_UNKNOWN;
2565         break;
2566     }
2567     snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, cpu_index(cpu));
2568
2569 send_packet:
2570     put_packet(s, buf);
2571
2572     /* disable single step if it was enabled */
2573     cpu_single_step(env, 0);
2574 }
2575 #endif
2576
2577 /* Send a gdb syscall request.
2578    This accepts limited printf-style format specifiers, specifically:
2579     %x  - target_ulong argument printed in hex.
2580     %lx - 64-bit argument printed in hex.
2581     %s  - string pointer (target_ulong) and length (int) pair.  */
2582 void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
2583 {
2584     va_list va;
2585     char *p;
2586     char *p_end;
2587     target_ulong addr;
2588     uint64_t i64;
2589     GDBState *s;
2590
2591     s = gdbserver_state;
2592     if (!s)
2593         return;
2594     s->current_syscall_cb = cb;
2595 #ifndef CONFIG_USER_ONLY
2596     vm_stop(RUN_STATE_DEBUG);
2597 #endif
2598     va_start(va, fmt);
2599     p = s->syscall_buf;
2600     p_end = &s->syscall_buf[sizeof(s->syscall_buf)];
2601     *(p++) = 'F';
2602     while (*fmt) {
2603         if (*fmt == '%') {
2604             fmt++;
2605             switch (*fmt++) {
2606             case 'x':
2607                 addr = va_arg(va, target_ulong);
2608                 p += snprintf(p, p_end - p, TARGET_FMT_lx, addr);
2609                 break;
2610             case 'l':
2611                 if (*(fmt++) != 'x')
2612                     goto bad_format;
2613                 i64 = va_arg(va, uint64_t);
2614                 p += snprintf(p, p_end - p, "%" PRIx64, i64);
2615                 break;
2616             case 's':
2617                 addr = va_arg(va, target_ulong);
2618                 p += snprintf(p, p_end - p, TARGET_FMT_lx "/%x",
2619                               addr, va_arg(va, int));
2620                 break;
2621             default:
2622             bad_format:
2623                 fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
2624                         fmt - 1);
2625                 break;
2626             }
2627         } else {
2628             *(p++) = *(fmt++);
2629         }
2630     }
2631     *p = 0;
2632     va_end(va);
2633 #ifdef CONFIG_USER_ONLY
2634     put_packet(s, s->syscall_buf);
2635     gdb_handlesig(s->c_cpu, 0);
2636 #else
2637     /* In this case wait to send the syscall packet until notification that
2638        the CPU has stopped.  This must be done because if the packet is sent
2639        now the reply from the syscall request could be received while the CPU
2640        is still in the running state, which can cause packets to be dropped
2641        and state transition 'T' packets to be sent while the syscall is still
2642        being processed.  */
2643     cpu_exit(ENV_GET_CPU(s->c_cpu));
2644 #endif
2645 }
2646
2647 static void gdb_read_byte(GDBState *s, int ch)
2648 {
2649     int i, csum;
2650     uint8_t reply;
2651
2652 #ifndef CONFIG_USER_ONLY
2653     if (s->last_packet_len) {
2654         /* Waiting for a response to the last packet.  If we see the start
2655            of a new command then abandon the previous response.  */
2656         if (ch == '-') {
2657 #ifdef DEBUG_GDB
2658             printf("Got NACK, retransmitting\n");
2659 #endif
2660             put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
2661         }
2662 #ifdef DEBUG_GDB
2663         else if (ch == '+')
2664             printf("Got ACK\n");
2665         else
2666             printf("Got '%c' when expecting ACK/NACK\n", ch);
2667 #endif
2668         if (ch == '+' || ch == '$')
2669             s->last_packet_len = 0;
2670         if (ch != '$')
2671             return;
2672     }
2673     if (runstate_is_running()) {
2674         /* when the CPU is running, we cannot do anything except stop
2675            it when receiving a char */
2676         vm_stop(RUN_STATE_PAUSED);
2677     } else
2678 #endif
2679     {
2680         switch(s->state) {
2681         case RS_IDLE:
2682             if (ch == '$') {
2683                 s->line_buf_index = 0;
2684                 s->state = RS_GETLINE;
2685             }
2686             break;
2687         case RS_GETLINE:
2688             if (ch == '#') {
2689             s->state = RS_CHKSUM1;
2690             } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
2691                 s->state = RS_IDLE;
2692             } else {
2693             s->line_buf[s->line_buf_index++] = ch;
2694             }
2695             break;
2696         case RS_CHKSUM1:
2697             s->line_buf[s->line_buf_index] = '\0';
2698             s->line_csum = fromhex(ch) << 4;
2699             s->state = RS_CHKSUM2;
2700             break;
2701         case RS_CHKSUM2:
2702             s->line_csum |= fromhex(ch);
2703             csum = 0;
2704             for(i = 0; i < s->line_buf_index; i++) {
2705                 csum += s->line_buf[i];
2706             }
2707             if (s->line_csum != (csum & 0xff)) {
2708                 reply = '-';
2709                 put_buffer(s, &reply, 1);
2710                 s->state = RS_IDLE;
2711             } else {
2712                 reply = '+';
2713                 put_buffer(s, &reply, 1);
2714                 s->state = gdb_handle_packet(s, s->line_buf);
2715             }
2716             break;
2717         default:
2718             abort();
2719         }
2720     }
2721 }
2722
2723 /* Tell the remote gdb that the process has exited.  */
2724 void gdb_exit(CPUArchState *env, int code)
2725 {
2726   GDBState *s;
2727   char buf[4];
2728
2729   s = gdbserver_state;
2730   if (!s) {
2731       return;
2732   }
2733 #ifdef CONFIG_USER_ONLY
2734   if (gdbserver_fd < 0 || s->fd < 0) {
2735       return;
2736   }
2737 #endif
2738
2739   snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
2740   put_packet(s, buf);
2741
2742 #ifndef CONFIG_USER_ONLY
2743   if (s->chr) {
2744       qemu_chr_delete(s->chr);
2745   }
2746 #endif
2747 }
2748
2749 #ifdef CONFIG_USER_ONLY
2750 int
2751 gdb_queuesig (void)
2752 {
2753     GDBState *s;
2754
2755     s = gdbserver_state;
2756
2757     if (gdbserver_fd < 0 || s->fd < 0)
2758         return 0;
2759     else
2760         return 1;
2761 }
2762
2763 int
2764 gdb_handlesig (CPUArchState *env, int sig)
2765 {
2766   GDBState *s;
2767   char buf[256];
2768   int n;
2769
2770   s = gdbserver_state;
2771   if (gdbserver_fd < 0 || s->fd < 0)
2772     return sig;
2773
2774   /* disable single step if it was enabled */
2775   cpu_single_step(env, 0);
2776   tb_flush(env);
2777
2778   if (sig != 0)
2779     {
2780       snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb (sig));
2781       put_packet(s, buf);
2782     }
2783   /* put_packet() might have detected that the peer terminated the 
2784      connection.  */
2785   if (s->fd < 0)
2786       return sig;
2787
2788   sig = 0;
2789   s->state = RS_IDLE;
2790   s->running_state = 0;
2791   while (s->running_state == 0) {
2792       n = read (s->fd, buf, 256);
2793       if (n > 0)
2794         {
2795           int i;
2796
2797           for (i = 0; i < n; i++)
2798             gdb_read_byte (s, buf[i]);
2799         }
2800       else if (n == 0 || errno != EAGAIN)
2801         {
2802           /* XXX: Connection closed.  Should probably wait for another
2803              connection before continuing.  */
2804           return sig;
2805         }
2806   }
2807   sig = s->signal;
2808   s->signal = 0;
2809   return sig;
2810 }
2811
2812 /* Tell the remote gdb that the process has exited due to SIG.  */
2813 void gdb_signalled(CPUArchState *env, int sig)
2814 {
2815   GDBState *s;
2816   char buf[4];
2817
2818   s = gdbserver_state;
2819   if (gdbserver_fd < 0 || s->fd < 0)
2820     return;
2821
2822   snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb (sig));
2823   put_packet(s, buf);
2824 }
2825
2826 static void gdb_accept(void)
2827 {
2828     GDBState *s;
2829     struct sockaddr_in sockaddr;
2830     socklen_t len;
2831     int fd;
2832
2833     for(;;) {
2834         len = sizeof(sockaddr);
2835         fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
2836         if (fd < 0 && errno != EINTR) {
2837             perror("accept");
2838             return;
2839         } else if (fd >= 0) {
2840 #ifndef _WIN32
2841             fcntl(fd, F_SETFD, FD_CLOEXEC);
2842 #endif
2843             break;
2844         }
2845     }
2846
2847     /* set short latency */
2848     socket_set_nodelay(fd);
2849
2850     s = g_malloc0(sizeof(GDBState));
2851     s->c_cpu = first_cpu->env_ptr;
2852     s->g_cpu = first_cpu->env_ptr;
2853     s->fd = fd;
2854     gdb_has_xml = 0;
2855
2856     gdbserver_state = s;
2857
2858     fcntl(fd, F_SETFL, O_NONBLOCK);
2859 }
2860
2861 static int gdbserver_open(int port)
2862 {
2863     struct sockaddr_in sockaddr;
2864     int fd, val, ret;
2865
2866     fd = socket(PF_INET, SOCK_STREAM, 0);
2867     if (fd < 0) {
2868         perror("socket");
2869         return -1;
2870     }
2871 #ifndef _WIN32
2872     fcntl(fd, F_SETFD, FD_CLOEXEC);
2873 #endif
2874
2875     /* allow fast reuse */
2876     val = 1;
2877     qemu_setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
2878
2879     sockaddr.sin_family = AF_INET;
2880     sockaddr.sin_port = htons(port);
2881     sockaddr.sin_addr.s_addr = 0;
2882     ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
2883     if (ret < 0) {
2884         perror("bind");
2885         close(fd);
2886         return -1;
2887     }
2888     ret = listen(fd, 0);
2889     if (ret < 0) {
2890         perror("listen");
2891         close(fd);
2892         return -1;
2893     }
2894     return fd;
2895 }
2896
2897 int gdbserver_start(int port)
2898 {
2899     gdbserver_fd = gdbserver_open(port);
2900     if (gdbserver_fd < 0)
2901         return -1;
2902     /* accept connections */
2903     gdb_accept();
2904     return 0;
2905 }
2906
2907 /* Disable gdb stub for child processes.  */
2908 void gdbserver_fork(CPUArchState *env)
2909 {
2910     GDBState *s = gdbserver_state;
2911     if (gdbserver_fd < 0 || s->fd < 0)
2912       return;
2913     close(s->fd);
2914     s->fd = -1;
2915     cpu_breakpoint_remove_all(env, BP_GDB);
2916     cpu_watchpoint_remove_all(env, BP_GDB);
2917 }
2918 #else
2919 static int gdb_chr_can_receive(void *opaque)
2920 {
2921   /* We can handle an arbitrarily large amount of data.
2922    Pick the maximum packet size, which is as good as anything.  */
2923   return MAX_PACKET_LENGTH;
2924 }
2925
2926 static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
2927 {
2928     int i;
2929
2930     for (i = 0; i < size; i++) {
2931         gdb_read_byte(gdbserver_state, buf[i]);
2932     }
2933 }
2934
2935 static void gdb_chr_event(void *opaque, int event)
2936 {
2937     switch (event) {
2938     case CHR_EVENT_OPENED:
2939         vm_stop(RUN_STATE_PAUSED);
2940         gdb_has_xml = 0;
2941         break;
2942     default:
2943         break;
2944     }
2945 }
2946
2947 static void gdb_monitor_output(GDBState *s, const char *msg, int len)
2948 {
2949     char buf[MAX_PACKET_LENGTH];
2950
2951     buf[0] = 'O';
2952     if (len > (MAX_PACKET_LENGTH/2) - 1)
2953         len = (MAX_PACKET_LENGTH/2) - 1;
2954     memtohex(buf + 1, (uint8_t *)msg, len);
2955     put_packet(s, buf);
2956 }
2957
2958 static int gdb_monitor_write(CharDriverState *chr, const uint8_t *buf, int len)
2959 {
2960     const char *p = (const char *)buf;
2961     int max_sz;
2962
2963     max_sz = (sizeof(gdbserver_state->last_packet) - 2) / 2;
2964     for (;;) {
2965         if (len <= max_sz) {
2966             gdb_monitor_output(gdbserver_state, p, len);
2967             break;
2968         }
2969         gdb_monitor_output(gdbserver_state, p, max_sz);
2970         p += max_sz;
2971         len -= max_sz;
2972     }
2973     return len;
2974 }
2975
2976 #ifndef _WIN32
2977 static void gdb_sigterm_handler(int signal)
2978 {
2979     if (runstate_is_running()) {
2980         vm_stop(RUN_STATE_PAUSED);
2981     }
2982 }
2983 #endif
2984
2985 int gdbserver_start(const char *device)
2986 {
2987     GDBState *s;
2988     char gdbstub_device_name[128];
2989     CharDriverState *chr = NULL;
2990     CharDriverState *mon_chr;
2991
2992     if (!device)
2993         return -1;
2994     if (strcmp(device, "none") != 0) {
2995         if (strstart(device, "tcp:", NULL)) {
2996             /* enforce required TCP attributes */
2997             snprintf(gdbstub_device_name, sizeof(gdbstub_device_name),
2998                      "%s,nowait,nodelay,server", device);
2999             device = gdbstub_device_name;
3000         }
3001 #ifndef _WIN32
3002         else if (strcmp(device, "stdio") == 0) {
3003             struct sigaction act;
3004
3005             memset(&act, 0, sizeof(act));
3006             act.sa_handler = gdb_sigterm_handler;
3007             sigaction(SIGINT, &act, NULL);
3008         }
3009 #endif
3010         chr = qemu_chr_new("gdb", device, NULL);
3011         if (!chr)
3012             return -1;
3013
3014         qemu_chr_fe_claim_no_fail(chr);
3015         qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
3016                               gdb_chr_event, NULL);
3017     }
3018
3019     s = gdbserver_state;
3020     if (!s) {
3021         s = g_malloc0(sizeof(GDBState));
3022         gdbserver_state = s;
3023
3024         qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
3025
3026         /* Initialize a monitor terminal for gdb */
3027         mon_chr = g_malloc0(sizeof(*mon_chr));
3028         mon_chr->chr_write = gdb_monitor_write;
3029         monitor_init(mon_chr, 0);
3030     } else {
3031         if (s->chr)
3032             qemu_chr_delete(s->chr);
3033         mon_chr = s->mon_chr;
3034         memset(s, 0, sizeof(GDBState));
3035     }
3036     s->c_cpu = first_cpu->env_ptr;
3037     s->g_cpu = first_cpu->env_ptr;
3038     s->chr = chr;
3039     s->state = chr ? RS_IDLE : RS_INACTIVE;
3040     s->mon_chr = mon_chr;
3041     s->current_syscall_cb = NULL;
3042
3043     return 0;
3044 }
3045 #endif