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