22ab12c68cea3d6015a7d65da8fc7c2dc6f3b64c
[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 "char/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     CPUArchState *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     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(CPUX86State *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(CPUX86State *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(CPUX86State *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(CPUPPCState *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(CPUPPCState *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             store_fpscr(env, ldtul_p(mem_buf), 0xffffffff);
785             return sizeof(target_ulong);
786         }
787     }
788     return 0;
789 }
790
791 #elif defined (TARGET_SPARC)
792
793 #if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
794 #define NUM_CORE_REGS 86
795 #else
796 #define NUM_CORE_REGS 72
797 #endif
798
799 #ifdef TARGET_ABI32
800 #define GET_REGA(val) GET_REG32(val)
801 #else
802 #define GET_REGA(val) GET_REGL(val)
803 #endif
804
805 static int cpu_gdb_read_register(CPUSPARCState *env, uint8_t *mem_buf, int n)
806 {
807     if (n < 8) {
808         /* g0..g7 */
809         GET_REGA(env->gregs[n]);
810     }
811     if (n < 32) {
812         /* register window */
813         GET_REGA(env->regwptr[n - 8]);
814     }
815 #if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
816     if (n < 64) {
817         /* fprs */
818         if (n & 1) {
819             GET_REG32(env->fpr[(n - 32) / 2].l.lower);
820         } else {
821             GET_REG32(env->fpr[(n - 32) / 2].l.upper);
822         }
823     }
824     /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
825     switch (n) {
826     case 64: GET_REGA(env->y);
827     case 65: GET_REGA(cpu_get_psr(env));
828     case 66: GET_REGA(env->wim);
829     case 67: GET_REGA(env->tbr);
830     case 68: GET_REGA(env->pc);
831     case 69: GET_REGA(env->npc);
832     case 70: GET_REGA(env->fsr);
833     case 71: GET_REGA(0); /* csr */
834     default: GET_REGA(0);
835     }
836 #else
837     if (n < 64) {
838         /* f0-f31 */
839         if (n & 1) {
840             GET_REG32(env->fpr[(n - 32) / 2].l.lower);
841         } else {
842             GET_REG32(env->fpr[(n - 32) / 2].l.upper);
843         }
844     }
845     if (n < 80) {
846         /* f32-f62 (double width, even numbers only) */
847         GET_REG64(env->fpr[(n - 32) / 2].ll);
848     }
849     switch (n) {
850     case 80: GET_REGL(env->pc);
851     case 81: GET_REGL(env->npc);
852     case 82: GET_REGL((cpu_get_ccr(env) << 32) |
853                       ((env->asi & 0xff) << 24) |
854                       ((env->pstate & 0xfff) << 8) |
855                       cpu_get_cwp64(env));
856     case 83: GET_REGL(env->fsr);
857     case 84: GET_REGL(env->fprs);
858     case 85: GET_REGL(env->y);
859     }
860 #endif
861     return 0;
862 }
863
864 static int cpu_gdb_write_register(CPUSPARCState *env, uint8_t *mem_buf, int n)
865 {
866 #if defined(TARGET_ABI32)
867     abi_ulong tmp;
868
869     tmp = ldl_p(mem_buf);
870 #else
871     target_ulong tmp;
872
873     tmp = ldtul_p(mem_buf);
874 #endif
875
876     if (n < 8) {
877         /* g0..g7 */
878         env->gregs[n] = tmp;
879     } else if (n < 32) {
880         /* register window */
881         env->regwptr[n - 8] = tmp;
882     }
883 #if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
884     else if (n < 64) {
885         /* fprs */
886         /* f0-f31 */
887         if (n & 1) {
888             env->fpr[(n - 32) / 2].l.lower = tmp;
889         } else {
890             env->fpr[(n - 32) / 2].l.upper = tmp;
891         }
892     } else {
893         /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
894         switch (n) {
895         case 64: env->y = tmp; break;
896         case 65: cpu_put_psr(env, tmp); break;
897         case 66: env->wim = tmp; break;
898         case 67: env->tbr = tmp; break;
899         case 68: env->pc = tmp; break;
900         case 69: env->npc = tmp; break;
901         case 70: env->fsr = tmp; break;
902         default: return 0;
903         }
904     }
905     return 4;
906 #else
907     else if (n < 64) {
908         /* f0-f31 */
909         tmp = ldl_p(mem_buf);
910         if (n & 1) {
911             env->fpr[(n - 32) / 2].l.lower = tmp;
912         } else {
913             env->fpr[(n - 32) / 2].l.upper = tmp;
914         }
915         return 4;
916     } else if (n < 80) {
917         /* f32-f62 (double width, even numbers only) */
918         env->fpr[(n - 32) / 2].ll = tmp;
919     } else {
920         switch (n) {
921         case 80: env->pc = tmp; break;
922         case 81: env->npc = tmp; break;
923         case 82:
924             cpu_put_ccr(env, tmp >> 32);
925             env->asi = (tmp >> 24) & 0xff;
926             env->pstate = (tmp >> 8) & 0xfff;
927             cpu_put_cwp64(env, tmp & 0xff);
928             break;
929         case 83: env->fsr = tmp; break;
930         case 84: env->fprs = tmp; break;
931         case 85: env->y = tmp; break;
932         default: return 0;
933         }
934     }
935     return 8;
936 #endif
937 }
938 #elif defined (TARGET_ARM)
939
940 /* Old gdb always expect FPA registers.  Newer (xml-aware) gdb only expect
941    whatever the target description contains.  Due to a historical mishap
942    the FPA registers appear in between core integer regs and the CPSR.
943    We hack round this by giving the FPA regs zero size when talking to a
944    newer gdb.  */
945 #define NUM_CORE_REGS 26
946 #define GDB_CORE_XML "arm-core.xml"
947
948 static int cpu_gdb_read_register(CPUARMState *env, uint8_t *mem_buf, int n)
949 {
950     if (n < 16) {
951         /* Core integer register.  */
952         GET_REG32(env->regs[n]);
953     }
954     if (n < 24) {
955         /* FPA registers.  */
956         if (gdb_has_xml)
957             return 0;
958         memset(mem_buf, 0, 12);
959         return 12;
960     }
961     switch (n) {
962     case 24:
963         /* FPA status register.  */
964         if (gdb_has_xml)
965             return 0;
966         GET_REG32(0);
967     case 25:
968         /* CPSR */
969         GET_REG32(cpsr_read(env));
970     }
971     /* Unknown register.  */
972     return 0;
973 }
974
975 static int cpu_gdb_write_register(CPUARMState *env, uint8_t *mem_buf, int n)
976 {
977     uint32_t tmp;
978
979     tmp = ldl_p(mem_buf);
980
981     /* Mask out low bit of PC to workaround gdb bugs.  This will probably
982        cause problems if we ever implement the Jazelle DBX extensions.  */
983     if (n == 15)
984         tmp &= ~1;
985
986     if (n < 16) {
987         /* Core integer register.  */
988         env->regs[n] = tmp;
989         return 4;
990     }
991     if (n < 24) { /* 16-23 */
992         /* FPA registers (ignored).  */
993         if (gdb_has_xml)
994             return 0;
995         return 12;
996     }
997     switch (n) {
998     case 24:
999         /* FPA status register (ignored).  */
1000         if (gdb_has_xml)
1001             return 0;
1002         return 4;
1003     case 25:
1004         /* CPSR */
1005         cpsr_write (env, tmp, 0xffffffff);
1006         return 4;
1007     }
1008     /* Unknown register.  */
1009     return 0;
1010 }
1011
1012 #elif defined (TARGET_M68K)
1013
1014 #define NUM_CORE_REGS 18
1015
1016 #define GDB_CORE_XML "cf-core.xml"
1017
1018 static int cpu_gdb_read_register(CPUM68KState *env, uint8_t *mem_buf, int n)
1019 {
1020     if (n < 8) {
1021         /* D0-D7 */
1022         GET_REG32(env->dregs[n]);
1023     } else if (n < 16) {
1024         /* A0-A7 */
1025         GET_REG32(env->aregs[n - 8]);
1026     } else {
1027         switch (n) {
1028         case 16: GET_REG32(env->sr);
1029         case 17: GET_REG32(env->pc);
1030         }
1031     }
1032     /* FP registers not included here because they vary between
1033        ColdFire and m68k.  Use XML bits for these.  */
1034     return 0;
1035 }
1036
1037 static int cpu_gdb_write_register(CPUM68KState *env, uint8_t *mem_buf, int n)
1038 {
1039     uint32_t tmp;
1040
1041     tmp = ldl_p(mem_buf);
1042
1043     if (n < 8) {
1044         /* D0-D7 */
1045         env->dregs[n] = tmp;
1046     } else if (n < 16) {
1047         /* A0-A7 */
1048         env->aregs[n - 8] = tmp;
1049     } else {
1050         switch (n) {
1051         case 16: env->sr = tmp; break;
1052         case 17: env->pc = tmp; break;
1053         default: return 0;
1054         }
1055     }
1056     return 4;
1057 }
1058 #elif defined (TARGET_MIPS)
1059
1060 #define NUM_CORE_REGS 73
1061
1062 static int cpu_gdb_read_register(CPUMIPSState *env, uint8_t *mem_buf, int n)
1063 {
1064     if (n < 32) {
1065         GET_REGL(env->active_tc.gpr[n]);
1066     }
1067     if (env->CP0_Config1 & (1 << CP0C1_FP)) {
1068         if (n >= 38 && n < 70) {
1069             if (env->CP0_Status & (1 << CP0St_FR))
1070                 GET_REGL(env->active_fpu.fpr[n - 38].d);
1071             else
1072                 GET_REGL(env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX]);
1073         }
1074         switch (n) {
1075         case 70: GET_REGL((int32_t)env->active_fpu.fcr31);
1076         case 71: GET_REGL((int32_t)env->active_fpu.fcr0);
1077         }
1078     }
1079     switch (n) {
1080     case 32: GET_REGL((int32_t)env->CP0_Status);
1081     case 33: GET_REGL(env->active_tc.LO[0]);
1082     case 34: GET_REGL(env->active_tc.HI[0]);
1083     case 35: GET_REGL(env->CP0_BadVAddr);
1084     case 36: GET_REGL((int32_t)env->CP0_Cause);
1085     case 37: GET_REGL(env->active_tc.PC | !!(env->hflags & MIPS_HFLAG_M16));
1086     case 72: GET_REGL(0); /* fp */
1087     case 89: GET_REGL((int32_t)env->CP0_PRid);
1088     }
1089     if (n >= 73 && n <= 88) {
1090         /* 16 embedded regs.  */
1091         GET_REGL(0);
1092     }
1093
1094     return 0;
1095 }
1096
1097 /* convert MIPS rounding mode in FCR31 to IEEE library */
1098 static unsigned int ieee_rm[] =
1099   {
1100     float_round_nearest_even,
1101     float_round_to_zero,
1102     float_round_up,
1103     float_round_down
1104   };
1105 #define RESTORE_ROUNDING_MODE \
1106     set_float_rounding_mode(ieee_rm[env->active_fpu.fcr31 & 3], &env->active_fpu.fp_status)
1107
1108 static int cpu_gdb_write_register(CPUMIPSState *env, uint8_t *mem_buf, int n)
1109 {
1110     target_ulong tmp;
1111
1112     tmp = ldtul_p(mem_buf);
1113
1114     if (n < 32) {
1115         env->active_tc.gpr[n] = tmp;
1116         return sizeof(target_ulong);
1117     }
1118     if (env->CP0_Config1 & (1 << CP0C1_FP)
1119             && n >= 38 && n < 73) {
1120         if (n < 70) {
1121             if (env->CP0_Status & (1 << CP0St_FR))
1122               env->active_fpu.fpr[n - 38].d = tmp;
1123             else
1124               env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX] = tmp;
1125         }
1126         switch (n) {
1127         case 70:
1128             env->active_fpu.fcr31 = tmp & 0xFF83FFFF;
1129             /* set rounding mode */
1130             RESTORE_ROUNDING_MODE;
1131             break;
1132         case 71: env->active_fpu.fcr0 = tmp; break;
1133         }
1134         return sizeof(target_ulong);
1135     }
1136     switch (n) {
1137     case 32: env->CP0_Status = tmp; break;
1138     case 33: env->active_tc.LO[0] = tmp; break;
1139     case 34: env->active_tc.HI[0] = tmp; break;
1140     case 35: env->CP0_BadVAddr = tmp; break;
1141     case 36: env->CP0_Cause = tmp; break;
1142     case 37:
1143         env->active_tc.PC = tmp & ~(target_ulong)1;
1144         if (tmp & 1) {
1145             env->hflags |= MIPS_HFLAG_M16;
1146         } else {
1147             env->hflags &= ~(MIPS_HFLAG_M16);
1148         }
1149         break;
1150     case 72: /* fp, ignored */ break;
1151     default: 
1152         if (n > 89)
1153             return 0;
1154         /* Other registers are readonly.  Ignore writes.  */
1155         break;
1156     }
1157
1158     return sizeof(target_ulong);
1159 }
1160 #elif defined(TARGET_OPENRISC)
1161
1162 #define NUM_CORE_REGS (32 + 3)
1163
1164 static int cpu_gdb_read_register(CPUOpenRISCState *env, uint8_t *mem_buf, int n)
1165 {
1166     if (n < 32) {
1167         GET_REG32(env->gpr[n]);
1168     } else {
1169         switch (n) {
1170         case 32:    /* PPC */
1171             GET_REG32(env->ppc);
1172             break;
1173
1174         case 33:    /* NPC */
1175             GET_REG32(env->npc);
1176             break;
1177
1178         case 34:    /* SR */
1179             GET_REG32(env->sr);
1180             break;
1181
1182         default:
1183             break;
1184         }
1185     }
1186     return 0;
1187 }
1188
1189 static int cpu_gdb_write_register(CPUOpenRISCState *env,
1190                                   uint8_t *mem_buf, int n)
1191 {
1192     uint32_t tmp;
1193
1194     if (n > NUM_CORE_REGS) {
1195         return 0;
1196     }
1197
1198     tmp = ldl_p(mem_buf);
1199
1200     if (n < 32) {
1201         env->gpr[n] = tmp;
1202     } else {
1203         switch (n) {
1204         case 32: /* PPC */
1205             env->ppc = tmp;
1206             break;
1207
1208         case 33: /* NPC */
1209             env->npc = tmp;
1210             break;
1211
1212         case 34: /* SR */
1213             env->sr = tmp;
1214             break;
1215
1216         default:
1217             break;
1218         }
1219     }
1220     return 4;
1221 }
1222 #elif defined (TARGET_SH4)
1223
1224 /* Hint: Use "set architecture sh4" in GDB to see fpu registers */
1225 /* FIXME: We should use XML for this.  */
1226
1227 #define NUM_CORE_REGS 59
1228
1229 static int cpu_gdb_read_register(CPUSH4State *env, uint8_t *mem_buf, int n)
1230 {
1231     switch (n) {
1232     case 0 ... 7:
1233         if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1234             GET_REGL(env->gregs[n + 16]);
1235         } else {
1236             GET_REGL(env->gregs[n]);
1237         }
1238     case 8 ... 15:
1239         GET_REGL(env->gregs[n]);
1240     case 16:
1241         GET_REGL(env->pc);
1242     case 17:
1243         GET_REGL(env->pr);
1244     case 18:
1245         GET_REGL(env->gbr);
1246     case 19:
1247         GET_REGL(env->vbr);
1248     case 20:
1249         GET_REGL(env->mach);
1250     case 21:
1251         GET_REGL(env->macl);
1252     case 22:
1253         GET_REGL(env->sr);
1254     case 23:
1255         GET_REGL(env->fpul);
1256     case 24:
1257         GET_REGL(env->fpscr);
1258     case 25 ... 40:
1259         if (env->fpscr & FPSCR_FR) {
1260             stfl_p(mem_buf, env->fregs[n - 9]);
1261         } else {
1262             stfl_p(mem_buf, env->fregs[n - 25]);
1263         }
1264         return 4;
1265     case 41:
1266         GET_REGL(env->ssr);
1267     case 42:
1268         GET_REGL(env->spc);
1269     case 43 ... 50:
1270         GET_REGL(env->gregs[n - 43]);
1271     case 51 ... 58:
1272         GET_REGL(env->gregs[n - (51 - 16)]);
1273     }
1274
1275     return 0;
1276 }
1277
1278 static int cpu_gdb_write_register(CPUSH4State *env, uint8_t *mem_buf, int n)
1279 {
1280     switch (n) {
1281     case 0 ... 7:
1282         if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1283             env->gregs[n + 16] = ldl_p(mem_buf);
1284         } else {
1285             env->gregs[n] = ldl_p(mem_buf);
1286         }
1287         break;
1288     case 8 ... 15:
1289         env->gregs[n] = ldl_p(mem_buf);
1290         break;
1291     case 16:
1292         env->pc = ldl_p(mem_buf);
1293         break;
1294     case 17:
1295         env->pr = ldl_p(mem_buf);
1296         break;
1297     case 18:
1298         env->gbr = ldl_p(mem_buf);
1299         break;
1300     case 19:
1301         env->vbr = ldl_p(mem_buf);
1302         break;
1303     case 20:
1304         env->mach = ldl_p(mem_buf);
1305         break;
1306     case 21:
1307         env->macl = ldl_p(mem_buf);
1308         break;
1309     case 22:
1310         env->sr = ldl_p(mem_buf);
1311         break;
1312     case 23:
1313         env->fpul = ldl_p(mem_buf);
1314         break;
1315     case 24:
1316         env->fpscr = ldl_p(mem_buf);
1317         break;
1318     case 25 ... 40:
1319         if (env->fpscr & FPSCR_FR) {
1320             env->fregs[n - 9] = ldfl_p(mem_buf);
1321         } else {
1322             env->fregs[n - 25] = ldfl_p(mem_buf);
1323         }
1324         break;
1325     case 41:
1326         env->ssr = ldl_p(mem_buf);
1327         break;
1328     case 42:
1329         env->spc = ldl_p(mem_buf);
1330         break;
1331     case 43 ... 50:
1332         env->gregs[n - 43] = ldl_p(mem_buf);
1333         break;
1334     case 51 ... 58:
1335         env->gregs[n - (51 - 16)] = ldl_p(mem_buf);
1336         break;
1337     default: return 0;
1338     }
1339
1340     return 4;
1341 }
1342 #elif defined (TARGET_MICROBLAZE)
1343
1344 #define NUM_CORE_REGS (32 + 5)
1345
1346 static int cpu_gdb_read_register(CPUMBState *env, uint8_t *mem_buf, int n)
1347 {
1348     if (n < 32) {
1349         GET_REG32(env->regs[n]);
1350     } else {
1351         GET_REG32(env->sregs[n - 32]);
1352     }
1353     return 0;
1354 }
1355
1356 static int cpu_gdb_write_register(CPUMBState *env, uint8_t *mem_buf, int n)
1357 {
1358     uint32_t tmp;
1359
1360     if (n > NUM_CORE_REGS)
1361         return 0;
1362
1363     tmp = ldl_p(mem_buf);
1364
1365     if (n < 32) {
1366         env->regs[n] = tmp;
1367     } else {
1368         env->sregs[n - 32] = tmp;
1369     }
1370     return 4;
1371 }
1372 #elif defined (TARGET_CRIS)
1373
1374 #define NUM_CORE_REGS 49
1375
1376 static int
1377 read_register_crisv10(CPUCRISState *env, uint8_t *mem_buf, int n)
1378 {
1379     if (n < 15) {
1380         GET_REG32(env->regs[n]);
1381     }
1382
1383     if (n == 15) {
1384         GET_REG32(env->pc);
1385     }
1386
1387     if (n < 32) {
1388         switch (n) {
1389         case 16:
1390             GET_REG8(env->pregs[n - 16]);
1391             break;
1392         case 17:
1393             GET_REG8(env->pregs[n - 16]);
1394             break;
1395         case 20:
1396         case 21:
1397             GET_REG16(env->pregs[n - 16]);
1398             break;
1399         default:
1400             if (n >= 23) {
1401                 GET_REG32(env->pregs[n - 16]);
1402             }
1403             break;
1404         }
1405     }
1406     return 0;
1407 }
1408
1409 static int cpu_gdb_read_register(CPUCRISState *env, uint8_t *mem_buf, int n)
1410 {
1411     uint8_t srs;
1412
1413     if (env->pregs[PR_VR] < 32)
1414         return read_register_crisv10(env, mem_buf, n);
1415
1416     srs = env->pregs[PR_SRS];
1417     if (n < 16) {
1418         GET_REG32(env->regs[n]);
1419     }
1420
1421     if (n >= 21 && n < 32) {
1422         GET_REG32(env->pregs[n - 16]);
1423     }
1424     if (n >= 33 && n < 49) {
1425         GET_REG32(env->sregs[srs][n - 33]);
1426     }
1427     switch (n) {
1428     case 16: GET_REG8(env->pregs[0]);
1429     case 17: GET_REG8(env->pregs[1]);
1430     case 18: GET_REG32(env->pregs[2]);
1431     case 19: GET_REG8(srs);
1432     case 20: GET_REG16(env->pregs[4]);
1433     case 32: GET_REG32(env->pc);
1434     }
1435
1436     return 0;
1437 }
1438
1439 static int cpu_gdb_write_register(CPUCRISState *env, uint8_t *mem_buf, int n)
1440 {
1441     uint32_t tmp;
1442
1443     if (n > 49)
1444         return 0;
1445
1446     tmp = ldl_p(mem_buf);
1447
1448     if (n < 16) {
1449         env->regs[n] = tmp;
1450     }
1451
1452     if (n >= 21 && n < 32) {
1453         env->pregs[n - 16] = tmp;
1454     }
1455
1456     /* FIXME: Should support function regs be writable?  */
1457     switch (n) {
1458     case 16: return 1;
1459     case 17: return 1;
1460     case 18: env->pregs[PR_PID] = tmp; break;
1461     case 19: return 1;
1462     case 20: return 2;
1463     case 32: env->pc = tmp; break;
1464     }
1465
1466     return 4;
1467 }
1468 #elif defined (TARGET_ALPHA)
1469
1470 #define NUM_CORE_REGS 67
1471
1472 static int cpu_gdb_read_register(CPUAlphaState *env, uint8_t *mem_buf, int n)
1473 {
1474     uint64_t val;
1475     CPU_DoubleU d;
1476
1477     switch (n) {
1478     case 0 ... 30:
1479         val = env->ir[n];
1480         break;
1481     case 32 ... 62:
1482         d.d = env->fir[n - 32];
1483         val = d.ll;
1484         break;
1485     case 63:
1486         val = cpu_alpha_load_fpcr(env);
1487         break;
1488     case 64:
1489         val = env->pc;
1490         break;
1491     case 66:
1492         val = env->unique;
1493         break;
1494     case 31:
1495     case 65:
1496         /* 31 really is the zero register; 65 is unassigned in the
1497            gdb protocol, but is still required to occupy 8 bytes. */
1498         val = 0;
1499         break;
1500     default:
1501         return 0;
1502     }
1503     GET_REGL(val);
1504 }
1505
1506 static int cpu_gdb_write_register(CPUAlphaState *env, uint8_t *mem_buf, int n)
1507 {
1508     target_ulong tmp = ldtul_p(mem_buf);
1509     CPU_DoubleU d;
1510
1511     switch (n) {
1512     case 0 ... 30:
1513         env->ir[n] = tmp;
1514         break;
1515     case 32 ... 62:
1516         d.ll = tmp;
1517         env->fir[n - 32] = d.d;
1518         break;
1519     case 63:
1520         cpu_alpha_store_fpcr(env, tmp);
1521         break;
1522     case 64:
1523         env->pc = tmp;
1524         break;
1525     case 66:
1526         env->unique = tmp;
1527         break;
1528     case 31:
1529     case 65:
1530         /* 31 really is the zero register; 65 is unassigned in the
1531            gdb protocol, but is still required to occupy 8 bytes. */
1532         break;
1533     default:
1534         return 0;
1535     }
1536     return 8;
1537 }
1538 #elif defined (TARGET_S390X)
1539
1540 #define NUM_CORE_REGS  S390_NUM_REGS
1541
1542 static int cpu_gdb_read_register(CPUS390XState *env, uint8_t *mem_buf, int n)
1543 {
1544     uint64_t val;
1545     int cc_op;
1546
1547     switch (n) {
1548     case S390_PSWM_REGNUM:
1549         cc_op = calc_cc(env, env->cc_op, env->cc_src, env->cc_dst, env->cc_vr);
1550         val = deposit64(env->psw.mask, 44, 2, cc_op);
1551         GET_REGL(val);
1552         break;
1553     case S390_PSWA_REGNUM:
1554         GET_REGL(env->psw.addr);
1555         break;
1556     case S390_R0_REGNUM ... S390_R15_REGNUM:
1557         GET_REGL(env->regs[n-S390_R0_REGNUM]);
1558         break;
1559     case S390_A0_REGNUM ... S390_A15_REGNUM:
1560         GET_REG32(env->aregs[n-S390_A0_REGNUM]);
1561         break;
1562     case S390_FPC_REGNUM:
1563         GET_REG32(env->fpc);
1564         break;
1565     case S390_F0_REGNUM ... S390_F15_REGNUM:
1566         GET_REG64(env->fregs[n-S390_F0_REGNUM].ll);
1567         break;
1568     }
1569
1570     return 0;
1571 }
1572
1573 static int cpu_gdb_write_register(CPUS390XState *env, uint8_t *mem_buf, int n)
1574 {
1575     target_ulong tmpl;
1576     uint32_t tmp32;
1577     int r = 8;
1578     tmpl = ldtul_p(mem_buf);
1579     tmp32 = ldl_p(mem_buf);
1580
1581     switch (n) {
1582     case S390_PSWM_REGNUM:
1583         env->psw.mask = tmpl;
1584         env->cc_op = extract64(tmpl, 44, 2);
1585         break;
1586     case S390_PSWA_REGNUM:
1587         env->psw.addr = tmpl;
1588         break;
1589     case S390_R0_REGNUM ... S390_R15_REGNUM:
1590         env->regs[n-S390_R0_REGNUM] = tmpl;
1591         break;
1592     case S390_A0_REGNUM ... S390_A15_REGNUM:
1593         env->aregs[n-S390_A0_REGNUM] = tmp32;
1594         r = 4;
1595         break;
1596     case S390_FPC_REGNUM:
1597         env->fpc = tmp32;
1598         r = 4;
1599         break;
1600     case S390_F0_REGNUM ... S390_F15_REGNUM:
1601         env->fregs[n-S390_F0_REGNUM].ll = tmpl;
1602         break;
1603     default:
1604         return 0;
1605     }
1606     return r;
1607 }
1608 #elif defined (TARGET_LM32)
1609
1610 #include "hw/lm32/lm32_pic.h"
1611 #define NUM_CORE_REGS (32 + 7)
1612
1613 static int cpu_gdb_read_register(CPULM32State *env, uint8_t *mem_buf, int n)
1614 {
1615     if (n < 32) {
1616         GET_REG32(env->regs[n]);
1617     } else {
1618         switch (n) {
1619         case 32:
1620             GET_REG32(env->pc);
1621             break;
1622         /* FIXME: put in right exception ID */
1623         case 33:
1624             GET_REG32(0);
1625             break;
1626         case 34:
1627             GET_REG32(env->eba);
1628             break;
1629         case 35:
1630             GET_REG32(env->deba);
1631             break;
1632         case 36:
1633             GET_REG32(env->ie);
1634             break;
1635         case 37:
1636             GET_REG32(lm32_pic_get_im(env->pic_state));
1637             break;
1638         case 38:
1639             GET_REG32(lm32_pic_get_ip(env->pic_state));
1640             break;
1641         }
1642     }
1643     return 0;
1644 }
1645
1646 static int cpu_gdb_write_register(CPULM32State *env, uint8_t *mem_buf, int n)
1647 {
1648     uint32_t tmp;
1649
1650     if (n > NUM_CORE_REGS) {
1651         return 0;
1652     }
1653
1654     tmp = ldl_p(mem_buf);
1655
1656     if (n < 32) {
1657         env->regs[n] = tmp;
1658     } else {
1659         switch (n) {
1660         case 32:
1661             env->pc = tmp;
1662             break;
1663         case 34:
1664             env->eba = tmp;
1665             break;
1666         case 35:
1667             env->deba = tmp;
1668             break;
1669         case 36:
1670             env->ie = tmp;
1671             break;
1672         case 37:
1673             lm32_pic_set_im(env->pic_state, tmp);
1674             break;
1675         case 38:
1676             lm32_pic_set_ip(env->pic_state, tmp);
1677             break;
1678         }
1679     }
1680     return 4;
1681 }
1682 #elif defined(TARGET_XTENSA)
1683
1684 /* Use num_core_regs to see only non-privileged registers in an unmodified gdb.
1685  * Use num_regs to see all registers. gdb modification is required for that:
1686  * reset bit 0 in the 'flags' field of the registers definitions in the
1687  * gdb/xtensa-config.c inside gdb source tree or inside gdb overlay.
1688  */
1689 #define NUM_CORE_REGS (env->config->gdb_regmap.num_regs)
1690 #define num_g_regs NUM_CORE_REGS
1691
1692 static int cpu_gdb_read_register(CPUXtensaState *env, uint8_t *mem_buf, int n)
1693 {
1694     const XtensaGdbReg *reg = env->config->gdb_regmap.reg + n;
1695
1696     if (n < 0 || n >= env->config->gdb_regmap.num_regs) {
1697         return 0;
1698     }
1699
1700     switch (reg->type) {
1701     case 9: /*pc*/
1702         GET_REG32(env->pc);
1703         break;
1704
1705     case 1: /*ar*/
1706         xtensa_sync_phys_from_window(env);
1707         GET_REG32(env->phys_regs[(reg->targno & 0xff) % env->config->nareg]);
1708         break;
1709
1710     case 2: /*SR*/
1711         GET_REG32(env->sregs[reg->targno & 0xff]);
1712         break;
1713
1714     case 3: /*UR*/
1715         GET_REG32(env->uregs[reg->targno & 0xff]);
1716         break;
1717
1718     case 4: /*f*/
1719         GET_REG32(float32_val(env->fregs[reg->targno & 0x0f]));
1720         break;
1721
1722     case 8: /*a*/
1723         GET_REG32(env->regs[reg->targno & 0x0f]);
1724         break;
1725
1726     default:
1727         qemu_log("%s from reg %d of unsupported type %d\n",
1728                 __func__, n, reg->type);
1729         return 0;
1730     }
1731 }
1732
1733 static int cpu_gdb_write_register(CPUXtensaState *env, uint8_t *mem_buf, int n)
1734 {
1735     uint32_t tmp;
1736     const XtensaGdbReg *reg = env->config->gdb_regmap.reg + n;
1737
1738     if (n < 0 || n >= env->config->gdb_regmap.num_regs) {
1739         return 0;
1740     }
1741
1742     tmp = ldl_p(mem_buf);
1743
1744     switch (reg->type) {
1745     case 9: /*pc*/
1746         env->pc = tmp;
1747         break;
1748
1749     case 1: /*ar*/
1750         env->phys_regs[(reg->targno & 0xff) % env->config->nareg] = tmp;
1751         xtensa_sync_window_from_phys(env);
1752         break;
1753
1754     case 2: /*SR*/
1755         env->sregs[reg->targno & 0xff] = tmp;
1756         break;
1757
1758     case 3: /*UR*/
1759         env->uregs[reg->targno & 0xff] = tmp;
1760         break;
1761
1762     case 4: /*f*/
1763         env->fregs[reg->targno & 0x0f] = make_float32(tmp);
1764         break;
1765
1766     case 8: /*a*/
1767         env->regs[reg->targno & 0x0f] = tmp;
1768         break;
1769
1770     default:
1771         qemu_log("%s to reg %d of unsupported type %d\n",
1772                 __func__, n, reg->type);
1773         return 0;
1774     }
1775
1776     return 4;
1777 }
1778 #else
1779
1780 #define NUM_CORE_REGS 0
1781
1782 static int cpu_gdb_read_register(CPUArchState *env, uint8_t *mem_buf, int n)
1783 {
1784     return 0;
1785 }
1786
1787 static int cpu_gdb_write_register(CPUArchState *env, uint8_t *mem_buf, int n)
1788 {
1789     return 0;
1790 }
1791
1792 #endif
1793
1794 #if !defined(TARGET_XTENSA)
1795 static int num_g_regs = NUM_CORE_REGS;
1796 #endif
1797
1798 #ifdef GDB_CORE_XML
1799 /* Encode data using the encoding for 'x' packets.  */
1800 static int memtox(char *buf, const char *mem, int len)
1801 {
1802     char *p = buf;
1803     char c;
1804
1805     while (len--) {
1806         c = *(mem++);
1807         switch (c) {
1808         case '#': case '$': case '*': case '}':
1809             *(p++) = '}';
1810             *(p++) = c ^ 0x20;
1811             break;
1812         default:
1813             *(p++) = c;
1814             break;
1815         }
1816     }
1817     return p - buf;
1818 }
1819
1820 static const char *get_feature_xml(const char *p, const char **newp)
1821 {
1822     size_t len;
1823     int i;
1824     const char *name;
1825     static char target_xml[1024];
1826
1827     len = 0;
1828     while (p[len] && p[len] != ':')
1829         len++;
1830     *newp = p + len;
1831
1832     name = NULL;
1833     if (strncmp(p, "target.xml", len) == 0) {
1834         /* Generate the XML description for this CPU.  */
1835         if (!target_xml[0]) {
1836             GDBRegisterState *r;
1837
1838             snprintf(target_xml, sizeof(target_xml),
1839                      "<?xml version=\"1.0\"?>"
1840                      "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
1841                      "<target>"
1842                      "<xi:include href=\"%s\"/>",
1843                      GDB_CORE_XML);
1844
1845             for (r = first_cpu->gdb_regs; r; r = r->next) {
1846                 pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\"");
1847                 pstrcat(target_xml, sizeof(target_xml), r->xml);
1848                 pstrcat(target_xml, sizeof(target_xml), "\"/>");
1849             }
1850             pstrcat(target_xml, sizeof(target_xml), "</target>");
1851         }
1852         return target_xml;
1853     }
1854     for (i = 0; ; i++) {
1855         name = xml_builtin[i][0];
1856         if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
1857             break;
1858     }
1859     return name ? xml_builtin[i][1] : NULL;
1860 }
1861 #endif
1862
1863 static int gdb_read_register(CPUArchState *env, uint8_t *mem_buf, int reg)
1864 {
1865     GDBRegisterState *r;
1866
1867     if (reg < NUM_CORE_REGS)
1868         return cpu_gdb_read_register(env, mem_buf, reg);
1869
1870     for (r = env->gdb_regs; r; r = r->next) {
1871         if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1872             return r->get_reg(env, mem_buf, reg - r->base_reg);
1873         }
1874     }
1875     return 0;
1876 }
1877
1878 static int gdb_write_register(CPUArchState *env, uint8_t *mem_buf, int reg)
1879 {
1880     GDBRegisterState *r;
1881
1882     if (reg < NUM_CORE_REGS)
1883         return cpu_gdb_write_register(env, mem_buf, reg);
1884
1885     for (r = env->gdb_regs; r; r = r->next) {
1886         if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1887             return r->set_reg(env, mem_buf, reg - r->base_reg);
1888         }
1889     }
1890     return 0;
1891 }
1892
1893 #if !defined(TARGET_XTENSA)
1894 /* Register a supplemental set of CPU registers.  If g_pos is nonzero it
1895    specifies the first register number and these registers are included in
1896    a standard "g" packet.  Direction is relative to gdb, i.e. get_reg is
1897    gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
1898  */
1899
1900 void gdb_register_coprocessor(CPUArchState * env,
1901                              gdb_reg_cb get_reg, gdb_reg_cb set_reg,
1902                              int num_regs, const char *xml, int g_pos)
1903 {
1904     GDBRegisterState *s;
1905     GDBRegisterState **p;
1906     static int last_reg = NUM_CORE_REGS;
1907
1908     p = &env->gdb_regs;
1909     while (*p) {
1910         /* Check for duplicates.  */
1911         if (strcmp((*p)->xml, xml) == 0)
1912             return;
1913         p = &(*p)->next;
1914     }
1915
1916     s = g_new0(GDBRegisterState, 1);
1917     s->base_reg = last_reg;
1918     s->num_regs = num_regs;
1919     s->get_reg = get_reg;
1920     s->set_reg = set_reg;
1921     s->xml = xml;
1922
1923     /* Add to end of list.  */
1924     last_reg += num_regs;
1925     *p = s;
1926     if (g_pos) {
1927         if (g_pos != s->base_reg) {
1928             fprintf(stderr, "Error: Bad gdb register numbering for '%s'\n"
1929                     "Expected %d got %d\n", xml, g_pos, s->base_reg);
1930         } else {
1931             num_g_regs = last_reg;
1932         }
1933     }
1934 }
1935 #endif
1936
1937 #ifndef CONFIG_USER_ONLY
1938 static const int xlat_gdb_type[] = {
1939     [GDB_WATCHPOINT_WRITE]  = BP_GDB | BP_MEM_WRITE,
1940     [GDB_WATCHPOINT_READ]   = BP_GDB | BP_MEM_READ,
1941     [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
1942 };
1943 #endif
1944
1945 static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
1946 {
1947     CPUArchState *env;
1948     int err = 0;
1949
1950     if (kvm_enabled())
1951         return kvm_insert_breakpoint(gdbserver_state->c_cpu, addr, len, type);
1952
1953     switch (type) {
1954     case GDB_BREAKPOINT_SW:
1955     case GDB_BREAKPOINT_HW:
1956         for (env = first_cpu; env != NULL; env = env->next_cpu) {
1957             err = cpu_breakpoint_insert(env, addr, BP_GDB, NULL);
1958             if (err)
1959                 break;
1960         }
1961         return err;
1962 #ifndef CONFIG_USER_ONLY
1963     case GDB_WATCHPOINT_WRITE:
1964     case GDB_WATCHPOINT_READ:
1965     case GDB_WATCHPOINT_ACCESS:
1966         for (env = first_cpu; env != NULL; env = env->next_cpu) {
1967             err = cpu_watchpoint_insert(env, addr, len, xlat_gdb_type[type],
1968                                         NULL);
1969             if (err)
1970                 break;
1971         }
1972         return err;
1973 #endif
1974     default:
1975         return -ENOSYS;
1976     }
1977 }
1978
1979 static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
1980 {
1981     CPUArchState *env;
1982     int err = 0;
1983
1984     if (kvm_enabled())
1985         return kvm_remove_breakpoint(gdbserver_state->c_cpu, addr, len, type);
1986
1987     switch (type) {
1988     case GDB_BREAKPOINT_SW:
1989     case GDB_BREAKPOINT_HW:
1990         for (env = first_cpu; env != NULL; env = env->next_cpu) {
1991             err = cpu_breakpoint_remove(env, addr, BP_GDB);
1992             if (err)
1993                 break;
1994         }
1995         return err;
1996 #ifndef CONFIG_USER_ONLY
1997     case GDB_WATCHPOINT_WRITE:
1998     case GDB_WATCHPOINT_READ:
1999     case GDB_WATCHPOINT_ACCESS:
2000         for (env = first_cpu; env != NULL; env = env->next_cpu) {
2001             err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]);
2002             if (err)
2003                 break;
2004         }
2005         return err;
2006 #endif
2007     default:
2008         return -ENOSYS;
2009     }
2010 }
2011
2012 static void gdb_breakpoint_remove_all(void)
2013 {
2014     CPUArchState *env;
2015
2016     if (kvm_enabled()) {
2017         kvm_remove_all_breakpoints(gdbserver_state->c_cpu);
2018         return;
2019     }
2020
2021     for (env = first_cpu; env != NULL; env = env->next_cpu) {
2022         cpu_breakpoint_remove_all(env, BP_GDB);
2023 #ifndef CONFIG_USER_ONLY
2024         cpu_watchpoint_remove_all(env, BP_GDB);
2025 #endif
2026     }
2027 }
2028
2029 static void gdb_set_cpu_pc(GDBState *s, target_ulong pc)
2030 {
2031     cpu_synchronize_state(s->c_cpu);
2032 #if defined(TARGET_I386)
2033     s->c_cpu->eip = pc;
2034 #elif defined (TARGET_PPC)
2035     s->c_cpu->nip = pc;
2036 #elif defined (TARGET_SPARC)
2037     s->c_cpu->pc = pc;
2038     s->c_cpu->npc = pc + 4;
2039 #elif defined (TARGET_ARM)
2040     s->c_cpu->regs[15] = pc;
2041 #elif defined (TARGET_SH4)
2042     s->c_cpu->pc = pc;
2043 #elif defined (TARGET_MIPS)
2044     s->c_cpu->active_tc.PC = pc & ~(target_ulong)1;
2045     if (pc & 1) {
2046         s->c_cpu->hflags |= MIPS_HFLAG_M16;
2047     } else {
2048         s->c_cpu->hflags &= ~(MIPS_HFLAG_M16);
2049     }
2050 #elif defined (TARGET_MICROBLAZE)
2051     s->c_cpu->sregs[SR_PC] = pc;
2052 #elif defined(TARGET_OPENRISC)
2053     s->c_cpu->pc = pc;
2054 #elif defined (TARGET_CRIS)
2055     s->c_cpu->pc = pc;
2056 #elif defined (TARGET_ALPHA)
2057     s->c_cpu->pc = pc;
2058 #elif defined (TARGET_S390X)
2059     s->c_cpu->psw.addr = pc;
2060 #elif defined (TARGET_LM32)
2061     s->c_cpu->pc = pc;
2062 #elif defined(TARGET_XTENSA)
2063     s->c_cpu->pc = pc;
2064 #endif
2065 }
2066
2067 static CPUArchState *find_cpu(uint32_t thread_id)
2068 {
2069     CPUArchState *env;
2070     CPUState *cpu;
2071
2072     for (env = first_cpu; env != NULL; env = env->next_cpu) {
2073         cpu = ENV_GET_CPU(env);
2074         if (cpu_index(cpu) == thread_id) {
2075             return env;
2076         }
2077     }
2078
2079     return NULL;
2080 }
2081
2082 static int gdb_handle_packet(GDBState *s, const char *line_buf)
2083 {
2084     CPUArchState *env;
2085     const char *p;
2086     uint32_t thread;
2087     int ch, reg_size, type, res;
2088     char buf[MAX_PACKET_LENGTH];
2089     uint8_t mem_buf[MAX_PACKET_LENGTH];
2090     uint8_t *registers;
2091     target_ulong addr, len;
2092
2093 #ifdef DEBUG_GDB
2094     printf("command='%s'\n", line_buf);
2095 #endif
2096     p = line_buf;
2097     ch = *p++;
2098     switch(ch) {
2099     case '?':
2100         /* TODO: Make this return the correct value for user-mode.  */
2101         snprintf(buf, sizeof(buf), "T%02xthread:%02x;", GDB_SIGNAL_TRAP,
2102                  cpu_index(ENV_GET_CPU(s->c_cpu)));
2103         put_packet(s, buf);
2104         /* Remove all the breakpoints when this query is issued,
2105          * because gdb is doing and initial connect and the state
2106          * should be cleaned up.
2107          */
2108         gdb_breakpoint_remove_all();
2109         break;
2110     case 'c':
2111         if (*p != '\0') {
2112             addr = strtoull(p, (char **)&p, 16);
2113             gdb_set_cpu_pc(s, addr);
2114         }
2115         s->signal = 0;
2116         gdb_continue(s);
2117         return RS_IDLE;
2118     case 'C':
2119         s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16));
2120         if (s->signal == -1)
2121             s->signal = 0;
2122         gdb_continue(s);
2123         return RS_IDLE;
2124     case 'v':
2125         if (strncmp(p, "Cont", 4) == 0) {
2126             int res_signal, res_thread;
2127
2128             p += 4;
2129             if (*p == '?') {
2130                 put_packet(s, "vCont;c;C;s;S");
2131                 break;
2132             }
2133             res = 0;
2134             res_signal = 0;
2135             res_thread = 0;
2136             while (*p) {
2137                 int action, signal;
2138
2139                 if (*p++ != ';') {
2140                     res = 0;
2141                     break;
2142                 }
2143                 action = *p++;
2144                 signal = 0;
2145                 if (action == 'C' || action == 'S') {
2146                     signal = strtoul(p, (char **)&p, 16);
2147                 } else if (action != 'c' && action != 's') {
2148                     res = 0;
2149                     break;
2150                 }
2151                 thread = 0;
2152                 if (*p == ':') {
2153                     thread = strtoull(p+1, (char **)&p, 16);
2154                 }
2155                 action = tolower(action);
2156                 if (res == 0 || (res == 'c' && action == 's')) {
2157                     res = action;
2158                     res_signal = signal;
2159                     res_thread = thread;
2160                 }
2161             }
2162             if (res) {
2163                 if (res_thread != -1 && res_thread != 0) {
2164                     env = find_cpu(res_thread);
2165                     if (env == NULL) {
2166                         put_packet(s, "E22");
2167                         break;
2168                     }
2169                     s->c_cpu = env;
2170                 }
2171                 if (res == 's') {
2172                     cpu_single_step(s->c_cpu, sstep_flags);
2173                 }
2174                 s->signal = res_signal;
2175                 gdb_continue(s);
2176                 return RS_IDLE;
2177             }
2178             break;
2179         } else {
2180             goto unknown_command;
2181         }
2182     case 'k':
2183 #ifdef CONFIG_USER_ONLY
2184         /* Kill the target */
2185         fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
2186         exit(0);
2187 #endif
2188     case 'D':
2189         /* Detach packet */
2190         gdb_breakpoint_remove_all();
2191         gdb_syscall_mode = GDB_SYS_DISABLED;
2192         gdb_continue(s);
2193         put_packet(s, "OK");
2194         break;
2195     case 's':
2196         if (*p != '\0') {
2197             addr = strtoull(p, (char **)&p, 16);
2198             gdb_set_cpu_pc(s, addr);
2199         }
2200         cpu_single_step(s->c_cpu, sstep_flags);
2201         gdb_continue(s);
2202         return RS_IDLE;
2203     case 'F':
2204         {
2205             target_ulong ret;
2206             target_ulong err;
2207
2208             ret = strtoull(p, (char **)&p, 16);
2209             if (*p == ',') {
2210                 p++;
2211                 err = strtoull(p, (char **)&p, 16);
2212             } else {
2213                 err = 0;
2214             }
2215             if (*p == ',')
2216                 p++;
2217             type = *p;
2218             if (s->current_syscall_cb) {
2219                 s->current_syscall_cb(s->c_cpu, ret, err);
2220                 s->current_syscall_cb = NULL;
2221             }
2222             if (type == 'C') {
2223                 put_packet(s, "T02");
2224             } else {
2225                 gdb_continue(s);
2226             }
2227         }
2228         break;
2229     case 'g':
2230         cpu_synchronize_state(s->g_cpu);
2231         env = s->g_cpu;
2232         len = 0;
2233         for (addr = 0; addr < num_g_regs; addr++) {
2234             reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr);
2235             len += reg_size;
2236         }
2237         memtohex(buf, mem_buf, len);
2238         put_packet(s, buf);
2239         break;
2240     case 'G':
2241         cpu_synchronize_state(s->g_cpu);
2242         env = s->g_cpu;
2243         registers = mem_buf;
2244         len = strlen(p) / 2;
2245         hextomem((uint8_t *)registers, p, len);
2246         for (addr = 0; addr < num_g_regs && len > 0; addr++) {
2247             reg_size = gdb_write_register(s->g_cpu, registers, addr);
2248             len -= reg_size;
2249             registers += reg_size;
2250         }
2251         put_packet(s, "OK");
2252         break;
2253     case 'm':
2254         addr = strtoull(p, (char **)&p, 16);
2255         if (*p == ',')
2256             p++;
2257         len = strtoull(p, NULL, 16);
2258         if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 0) != 0) {
2259             put_packet (s, "E14");
2260         } else {
2261             memtohex(buf, mem_buf, len);
2262             put_packet(s, buf);
2263         }
2264         break;
2265     case 'M':
2266         addr = strtoull(p, (char **)&p, 16);
2267         if (*p == ',')
2268             p++;
2269         len = strtoull(p, (char **)&p, 16);
2270         if (*p == ':')
2271             p++;
2272         hextomem(mem_buf, p, len);
2273         if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 1) != 0) {
2274             put_packet(s, "E14");
2275         } else {
2276             put_packet(s, "OK");
2277         }
2278         break;
2279     case 'p':
2280         /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
2281            This works, but can be very slow.  Anything new enough to
2282            understand XML also knows how to use this properly.  */
2283         if (!gdb_has_xml)
2284             goto unknown_command;
2285         addr = strtoull(p, (char **)&p, 16);
2286         reg_size = gdb_read_register(s->g_cpu, mem_buf, addr);
2287         if (reg_size) {
2288             memtohex(buf, mem_buf, reg_size);
2289             put_packet(s, buf);
2290         } else {
2291             put_packet(s, "E14");
2292         }
2293         break;
2294     case 'P':
2295         if (!gdb_has_xml)
2296             goto unknown_command;
2297         addr = strtoull(p, (char **)&p, 16);
2298         if (*p == '=')
2299             p++;
2300         reg_size = strlen(p) / 2;
2301         hextomem(mem_buf, p, reg_size);
2302         gdb_write_register(s->g_cpu, mem_buf, addr);
2303         put_packet(s, "OK");
2304         break;
2305     case 'Z':
2306     case 'z':
2307         type = strtoul(p, (char **)&p, 16);
2308         if (*p == ',')
2309             p++;
2310         addr = strtoull(p, (char **)&p, 16);
2311         if (*p == ',')
2312             p++;
2313         len = strtoull(p, (char **)&p, 16);
2314         if (ch == 'Z')
2315             res = gdb_breakpoint_insert(addr, len, type);
2316         else
2317             res = gdb_breakpoint_remove(addr, len, type);
2318         if (res >= 0)
2319              put_packet(s, "OK");
2320         else if (res == -ENOSYS)
2321             put_packet(s, "");
2322         else
2323             put_packet(s, "E22");
2324         break;
2325     case 'H':
2326         type = *p++;
2327         thread = strtoull(p, (char **)&p, 16);
2328         if (thread == -1 || thread == 0) {
2329             put_packet(s, "OK");
2330             break;
2331         }
2332         env = find_cpu(thread);
2333         if (env == NULL) {
2334             put_packet(s, "E22");
2335             break;
2336         }
2337         switch (type) {
2338         case 'c':
2339             s->c_cpu = env;
2340             put_packet(s, "OK");
2341             break;
2342         case 'g':
2343             s->g_cpu = env;
2344             put_packet(s, "OK");
2345             break;
2346         default:
2347              put_packet(s, "E22");
2348              break;
2349         }
2350         break;
2351     case 'T':
2352         thread = strtoull(p, (char **)&p, 16);
2353         env = find_cpu(thread);
2354
2355         if (env != NULL) {
2356             put_packet(s, "OK");
2357         } else {
2358             put_packet(s, "E22");
2359         }
2360         break;
2361     case 'q':
2362     case 'Q':
2363         /* parse any 'q' packets here */
2364         if (!strcmp(p,"qemu.sstepbits")) {
2365             /* Query Breakpoint bit definitions */
2366             snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
2367                      SSTEP_ENABLE,
2368                      SSTEP_NOIRQ,
2369                      SSTEP_NOTIMER);
2370             put_packet(s, buf);
2371             break;
2372         } else if (strncmp(p,"qemu.sstep",10) == 0) {
2373             /* Display or change the sstep_flags */
2374             p += 10;
2375             if (*p != '=') {
2376                 /* Display current setting */
2377                 snprintf(buf, sizeof(buf), "0x%x", sstep_flags);
2378                 put_packet(s, buf);
2379                 break;
2380             }
2381             p++;
2382             type = strtoul(p, (char **)&p, 16);
2383             sstep_flags = type;
2384             put_packet(s, "OK");
2385             break;
2386         } else if (strcmp(p,"C") == 0) {
2387             /* "Current thread" remains vague in the spec, so always return
2388              *  the first CPU (gdb returns the first thread). */
2389             put_packet(s, "QC1");
2390             break;
2391         } else if (strcmp(p,"fThreadInfo") == 0) {
2392             s->query_cpu = first_cpu;
2393             goto report_cpuinfo;
2394         } else if (strcmp(p,"sThreadInfo") == 0) {
2395         report_cpuinfo:
2396             if (s->query_cpu) {
2397                 snprintf(buf, sizeof(buf), "m%x",
2398                          cpu_index(ENV_GET_CPU(s->query_cpu)));
2399                 put_packet(s, buf);
2400                 s->query_cpu = s->query_cpu->next_cpu;
2401             } else
2402                 put_packet(s, "l");
2403             break;
2404         } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) {
2405             thread = strtoull(p+16, (char **)&p, 16);
2406             env = find_cpu(thread);
2407             if (env != NULL) {
2408                 CPUState *cpu = ENV_GET_CPU(env);
2409                 cpu_synchronize_state(env);
2410                 len = snprintf((char *)mem_buf, sizeof(mem_buf),
2411                                "CPU#%d [%s]", cpu->cpu_index,
2412                                cpu->halted ? "halted " : "running");
2413                 memtohex(buf, mem_buf, len);
2414                 put_packet(s, buf);
2415             }
2416             break;
2417         }
2418 #ifdef CONFIG_USER_ONLY
2419         else if (strncmp(p, "Offsets", 7) == 0) {
2420             TaskState *ts = s->c_cpu->opaque;
2421
2422             snprintf(buf, sizeof(buf),
2423                      "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
2424                      ";Bss=" TARGET_ABI_FMT_lx,
2425                      ts->info->code_offset,
2426                      ts->info->data_offset,
2427                      ts->info->data_offset);
2428             put_packet(s, buf);
2429             break;
2430         }
2431 #else /* !CONFIG_USER_ONLY */
2432         else if (strncmp(p, "Rcmd,", 5) == 0) {
2433             int len = strlen(p + 5);
2434
2435             if ((len % 2) != 0) {
2436                 put_packet(s, "E01");
2437                 break;
2438             }
2439             hextomem(mem_buf, p + 5, len);
2440             len = len / 2;
2441             mem_buf[len++] = 0;
2442             qemu_chr_be_write(s->mon_chr, mem_buf, len);
2443             put_packet(s, "OK");
2444             break;
2445         }
2446 #endif /* !CONFIG_USER_ONLY */
2447         if (strncmp(p, "Supported", 9) == 0) {
2448             snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
2449 #ifdef GDB_CORE_XML
2450             pstrcat(buf, sizeof(buf), ";qXfer:features:read+");
2451 #endif
2452             put_packet(s, buf);
2453             break;
2454         }
2455 #ifdef GDB_CORE_XML
2456         if (strncmp(p, "Xfer:features:read:", 19) == 0) {
2457             const char *xml;
2458             target_ulong total_len;
2459
2460             gdb_has_xml = 1;
2461             p += 19;
2462             xml = get_feature_xml(p, &p);
2463             if (!xml) {
2464                 snprintf(buf, sizeof(buf), "E00");
2465                 put_packet(s, buf);
2466                 break;
2467             }
2468
2469             if (*p == ':')
2470                 p++;
2471             addr = strtoul(p, (char **)&p, 16);
2472             if (*p == ',')
2473                 p++;
2474             len = strtoul(p, (char **)&p, 16);
2475
2476             total_len = strlen(xml);
2477             if (addr > total_len) {
2478                 snprintf(buf, sizeof(buf), "E00");
2479                 put_packet(s, buf);
2480                 break;
2481             }
2482             if (len > (MAX_PACKET_LENGTH - 5) / 2)
2483                 len = (MAX_PACKET_LENGTH - 5) / 2;
2484             if (len < total_len - addr) {
2485                 buf[0] = 'm';
2486                 len = memtox(buf + 1, xml + addr, len);
2487             } else {
2488                 buf[0] = 'l';
2489                 len = memtox(buf + 1, xml + addr, total_len - addr);
2490             }
2491             put_packet_binary(s, buf, len + 1);
2492             break;
2493         }
2494 #endif
2495         /* Unrecognised 'q' command.  */
2496         goto unknown_command;
2497
2498     default:
2499     unknown_command:
2500         /* put empty packet */
2501         buf[0] = '\0';
2502         put_packet(s, buf);
2503         break;
2504     }
2505     return RS_IDLE;
2506 }
2507
2508 void gdb_set_stop_cpu(CPUArchState *env)
2509 {
2510     gdbserver_state->c_cpu = env;
2511     gdbserver_state->g_cpu = env;
2512 }
2513
2514 #ifndef CONFIG_USER_ONLY
2515 static void gdb_vm_state_change(void *opaque, int running, RunState state)
2516 {
2517     GDBState *s = gdbserver_state;
2518     CPUArchState *env = s->c_cpu;
2519     CPUState *cpu = ENV_GET_CPU(env);
2520     char buf[256];
2521     const char *type;
2522     int ret;
2523
2524     if (running || s->state == RS_INACTIVE) {
2525         return;
2526     }
2527     /* Is there a GDB syscall waiting to be sent?  */
2528     if (s->current_syscall_cb) {
2529         put_packet(s, s->syscall_buf);
2530         return;
2531     }
2532     switch (state) {
2533     case RUN_STATE_DEBUG:
2534         if (env->watchpoint_hit) {
2535             switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
2536             case BP_MEM_READ:
2537                 type = "r";
2538                 break;
2539             case BP_MEM_ACCESS:
2540                 type = "a";
2541                 break;
2542             default:
2543                 type = "";
2544                 break;
2545             }
2546             snprintf(buf, sizeof(buf),
2547                      "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
2548                      GDB_SIGNAL_TRAP, cpu_index(cpu), type,
2549                      env->watchpoint_hit->vaddr);
2550             env->watchpoint_hit = NULL;
2551             goto send_packet;
2552         }
2553         tb_flush(env);
2554         ret = GDB_SIGNAL_TRAP;
2555         break;
2556     case RUN_STATE_PAUSED:
2557         ret = GDB_SIGNAL_INT;
2558         break;
2559     case RUN_STATE_SHUTDOWN:
2560         ret = GDB_SIGNAL_QUIT;
2561         break;
2562     case RUN_STATE_IO_ERROR:
2563         ret = GDB_SIGNAL_IO;
2564         break;
2565     case RUN_STATE_WATCHDOG:
2566         ret = GDB_SIGNAL_ALRM;
2567         break;
2568     case RUN_STATE_INTERNAL_ERROR:
2569         ret = GDB_SIGNAL_ABRT;
2570         break;
2571     case RUN_STATE_SAVE_VM:
2572     case RUN_STATE_RESTORE_VM:
2573         return;
2574     case RUN_STATE_FINISH_MIGRATE:
2575         ret = GDB_SIGNAL_XCPU;
2576         break;
2577     default:
2578         ret = GDB_SIGNAL_UNKNOWN;
2579         break;
2580     }
2581     snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, cpu_index(cpu));
2582
2583 send_packet:
2584     put_packet(s, buf);
2585
2586     /* disable single step if it was enabled */
2587     cpu_single_step(env, 0);
2588 }
2589 #endif
2590
2591 /* Send a gdb syscall request.
2592    This accepts limited printf-style format specifiers, specifically:
2593     %x  - target_ulong argument printed in hex.
2594     %lx - 64-bit argument printed in hex.
2595     %s  - string pointer (target_ulong) and length (int) pair.  */
2596 void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
2597 {
2598     va_list va;
2599     char *p;
2600     char *p_end;
2601     target_ulong addr;
2602     uint64_t i64;
2603     GDBState *s;
2604
2605     s = gdbserver_state;
2606     if (!s)
2607         return;
2608     s->current_syscall_cb = cb;
2609 #ifndef CONFIG_USER_ONLY
2610     vm_stop(RUN_STATE_DEBUG);
2611 #endif
2612     va_start(va, fmt);
2613     p = s->syscall_buf;
2614     p_end = &s->syscall_buf[sizeof(s->syscall_buf)];
2615     *(p++) = 'F';
2616     while (*fmt) {
2617         if (*fmt == '%') {
2618             fmt++;
2619             switch (*fmt++) {
2620             case 'x':
2621                 addr = va_arg(va, target_ulong);
2622                 p += snprintf(p, p_end - p, TARGET_FMT_lx, addr);
2623                 break;
2624             case 'l':
2625                 if (*(fmt++) != 'x')
2626                     goto bad_format;
2627                 i64 = va_arg(va, uint64_t);
2628                 p += snprintf(p, p_end - p, "%" PRIx64, i64);
2629                 break;
2630             case 's':
2631                 addr = va_arg(va, target_ulong);
2632                 p += snprintf(p, p_end - p, TARGET_FMT_lx "/%x",
2633                               addr, va_arg(va, int));
2634                 break;
2635             default:
2636             bad_format:
2637                 fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
2638                         fmt - 1);
2639                 break;
2640             }
2641         } else {
2642             *(p++) = *(fmt++);
2643         }
2644     }
2645     *p = 0;
2646     va_end(va);
2647 #ifdef CONFIG_USER_ONLY
2648     put_packet(s, s->syscall_buf);
2649     gdb_handlesig(s->c_cpu, 0);
2650 #else
2651     /* In this case wait to send the syscall packet until notification that
2652        the CPU has stopped.  This must be done because if the packet is sent
2653        now the reply from the syscall request could be received while the CPU
2654        is still in the running state, which can cause packets to be dropped
2655        and state transition 'T' packets to be sent while the syscall is still
2656        being processed.  */
2657     cpu_exit(s->c_cpu);
2658 #endif
2659 }
2660
2661 static void gdb_read_byte(GDBState *s, int ch)
2662 {
2663     int i, csum;
2664     uint8_t reply;
2665
2666 #ifndef CONFIG_USER_ONLY
2667     if (s->last_packet_len) {
2668         /* Waiting for a response to the last packet.  If we see the start
2669            of a new command then abandon the previous response.  */
2670         if (ch == '-') {
2671 #ifdef DEBUG_GDB
2672             printf("Got NACK, retransmitting\n");
2673 #endif
2674             put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
2675         }
2676 #ifdef DEBUG_GDB
2677         else if (ch == '+')
2678             printf("Got ACK\n");
2679         else
2680             printf("Got '%c' when expecting ACK/NACK\n", ch);
2681 #endif
2682         if (ch == '+' || ch == '$')
2683             s->last_packet_len = 0;
2684         if (ch != '$')
2685             return;
2686     }
2687     if (runstate_is_running()) {
2688         /* when the CPU is running, we cannot do anything except stop
2689            it when receiving a char */
2690         vm_stop(RUN_STATE_PAUSED);
2691     } else
2692 #endif
2693     {
2694         switch(s->state) {
2695         case RS_IDLE:
2696             if (ch == '$') {
2697                 s->line_buf_index = 0;
2698                 s->state = RS_GETLINE;
2699             }
2700             break;
2701         case RS_GETLINE:
2702             if (ch == '#') {
2703             s->state = RS_CHKSUM1;
2704             } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
2705                 s->state = RS_IDLE;
2706             } else {
2707             s->line_buf[s->line_buf_index++] = ch;
2708             }
2709             break;
2710         case RS_CHKSUM1:
2711             s->line_buf[s->line_buf_index] = '\0';
2712             s->line_csum = fromhex(ch) << 4;
2713             s->state = RS_CHKSUM2;
2714             break;
2715         case RS_CHKSUM2:
2716             s->line_csum |= fromhex(ch);
2717             csum = 0;
2718             for(i = 0; i < s->line_buf_index; i++) {
2719                 csum += s->line_buf[i];
2720             }
2721             if (s->line_csum != (csum & 0xff)) {
2722                 reply = '-';
2723                 put_buffer(s, &reply, 1);
2724                 s->state = RS_IDLE;
2725             } else {
2726                 reply = '+';
2727                 put_buffer(s, &reply, 1);
2728                 s->state = gdb_handle_packet(s, s->line_buf);
2729             }
2730             break;
2731         default:
2732             abort();
2733         }
2734     }
2735 }
2736
2737 /* Tell the remote gdb that the process has exited.  */
2738 void gdb_exit(CPUArchState *env, int code)
2739 {
2740   GDBState *s;
2741   char buf[4];
2742
2743   s = gdbserver_state;
2744   if (!s) {
2745       return;
2746   }
2747 #ifdef CONFIG_USER_ONLY
2748   if (gdbserver_fd < 0 || s->fd < 0) {
2749       return;
2750   }
2751 #endif
2752
2753   snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
2754   put_packet(s, buf);
2755
2756 #ifndef CONFIG_USER_ONLY
2757   if (s->chr) {
2758       qemu_chr_delete(s->chr);
2759   }
2760 #endif
2761 }
2762
2763 #ifdef CONFIG_USER_ONLY
2764 int
2765 gdb_queuesig (void)
2766 {
2767     GDBState *s;
2768
2769     s = gdbserver_state;
2770
2771     if (gdbserver_fd < 0 || s->fd < 0)
2772         return 0;
2773     else
2774         return 1;
2775 }
2776
2777 int
2778 gdb_handlesig (CPUArchState *env, int sig)
2779 {
2780   GDBState *s;
2781   char buf[256];
2782   int n;
2783
2784   s = gdbserver_state;
2785   if (gdbserver_fd < 0 || s->fd < 0)
2786     return sig;
2787
2788   /* disable single step if it was enabled */
2789   cpu_single_step(env, 0);
2790   tb_flush(env);
2791
2792   if (sig != 0)
2793     {
2794       snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb (sig));
2795       put_packet(s, buf);
2796     }
2797   /* put_packet() might have detected that the peer terminated the 
2798      connection.  */
2799   if (s->fd < 0)
2800       return sig;
2801
2802   sig = 0;
2803   s->state = RS_IDLE;
2804   s->running_state = 0;
2805   while (s->running_state == 0) {
2806       n = read (s->fd, buf, 256);
2807       if (n > 0)
2808         {
2809           int i;
2810
2811           for (i = 0; i < n; i++)
2812             gdb_read_byte (s, buf[i]);
2813         }
2814       else if (n == 0 || errno != EAGAIN)
2815         {
2816           /* XXX: Connection closed.  Should probably wait for another
2817              connection before continuing.  */
2818           return sig;
2819         }
2820   }
2821   sig = s->signal;
2822   s->signal = 0;
2823   return sig;
2824 }
2825
2826 /* Tell the remote gdb that the process has exited due to SIG.  */
2827 void gdb_signalled(CPUArchState *env, int sig)
2828 {
2829   GDBState *s;
2830   char buf[4];
2831
2832   s = gdbserver_state;
2833   if (gdbserver_fd < 0 || s->fd < 0)
2834     return;
2835
2836   snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb (sig));
2837   put_packet(s, buf);
2838 }
2839
2840 static void gdb_accept(void)
2841 {
2842     GDBState *s;
2843     struct sockaddr_in sockaddr;
2844     socklen_t len;
2845     int fd;
2846
2847     for(;;) {
2848         len = sizeof(sockaddr);
2849         fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
2850         if (fd < 0 && errno != EINTR) {
2851             perror("accept");
2852             return;
2853         } else if (fd >= 0) {
2854 #ifndef _WIN32
2855             fcntl(fd, F_SETFD, FD_CLOEXEC);
2856 #endif
2857             break;
2858         }
2859     }
2860
2861     /* set short latency */
2862     socket_set_nodelay(fd);
2863
2864     s = g_malloc0(sizeof(GDBState));
2865     s->c_cpu = first_cpu;
2866     s->g_cpu = first_cpu;
2867     s->fd = fd;
2868     gdb_has_xml = 0;
2869
2870     gdbserver_state = s;
2871
2872     fcntl(fd, F_SETFL, O_NONBLOCK);
2873 }
2874
2875 static int gdbserver_open(int port)
2876 {
2877     struct sockaddr_in sockaddr;
2878     int fd, val, ret;
2879
2880     fd = socket(PF_INET, SOCK_STREAM, 0);
2881     if (fd < 0) {
2882         perror("socket");
2883         return -1;
2884     }
2885 #ifndef _WIN32
2886     fcntl(fd, F_SETFD, FD_CLOEXEC);
2887 #endif
2888
2889     /* allow fast reuse */
2890     val = 1;
2891     qemu_setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
2892
2893     sockaddr.sin_family = AF_INET;
2894     sockaddr.sin_port = htons(port);
2895     sockaddr.sin_addr.s_addr = 0;
2896     ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
2897     if (ret < 0) {
2898         perror("bind");
2899         close(fd);
2900         return -1;
2901     }
2902     ret = listen(fd, 0);
2903     if (ret < 0) {
2904         perror("listen");
2905         close(fd);
2906         return -1;
2907     }
2908     return fd;
2909 }
2910
2911 int gdbserver_start(int port)
2912 {
2913     gdbserver_fd = gdbserver_open(port);
2914     if (gdbserver_fd < 0)
2915         return -1;
2916     /* accept connections */
2917     gdb_accept();
2918     return 0;
2919 }
2920
2921 /* Disable gdb stub for child processes.  */
2922 void gdbserver_fork(CPUArchState *env)
2923 {
2924     GDBState *s = gdbserver_state;
2925     if (gdbserver_fd < 0 || s->fd < 0)
2926       return;
2927     close(s->fd);
2928     s->fd = -1;
2929     cpu_breakpoint_remove_all(env, BP_GDB);
2930     cpu_watchpoint_remove_all(env, BP_GDB);
2931 }
2932 #else
2933 static int gdb_chr_can_receive(void *opaque)
2934 {
2935   /* We can handle an arbitrarily large amount of data.
2936    Pick the maximum packet size, which is as good as anything.  */
2937   return MAX_PACKET_LENGTH;
2938 }
2939
2940 static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
2941 {
2942     int i;
2943
2944     for (i = 0; i < size; i++) {
2945         gdb_read_byte(gdbserver_state, buf[i]);
2946     }
2947 }
2948
2949 static void gdb_chr_event(void *opaque, int event)
2950 {
2951     switch (event) {
2952     case CHR_EVENT_OPENED:
2953         vm_stop(RUN_STATE_PAUSED);
2954         gdb_has_xml = 0;
2955         break;
2956     default:
2957         break;
2958     }
2959 }
2960
2961 static void gdb_monitor_output(GDBState *s, const char *msg, int len)
2962 {
2963     char buf[MAX_PACKET_LENGTH];
2964
2965     buf[0] = 'O';
2966     if (len > (MAX_PACKET_LENGTH/2) - 1)
2967         len = (MAX_PACKET_LENGTH/2) - 1;
2968     memtohex(buf + 1, (uint8_t *)msg, len);
2969     put_packet(s, buf);
2970 }
2971
2972 static int gdb_monitor_write(CharDriverState *chr, const uint8_t *buf, int len)
2973 {
2974     const char *p = (const char *)buf;
2975     int max_sz;
2976
2977     max_sz = (sizeof(gdbserver_state->last_packet) - 2) / 2;
2978     for (;;) {
2979         if (len <= max_sz) {
2980             gdb_monitor_output(gdbserver_state, p, len);
2981             break;
2982         }
2983         gdb_monitor_output(gdbserver_state, p, max_sz);
2984         p += max_sz;
2985         len -= max_sz;
2986     }
2987     return len;
2988 }
2989
2990 #ifndef _WIN32
2991 static void gdb_sigterm_handler(int signal)
2992 {
2993     if (runstate_is_running()) {
2994         vm_stop(RUN_STATE_PAUSED);
2995     }
2996 }
2997 #endif
2998
2999 int gdbserver_start(const char *device)
3000 {
3001     GDBState *s;
3002     char gdbstub_device_name[128];
3003     CharDriverState *chr = NULL;
3004     CharDriverState *mon_chr;
3005
3006     if (!device)
3007         return -1;
3008     if (strcmp(device, "none") != 0) {
3009         if (strstart(device, "tcp:", NULL)) {
3010             /* enforce required TCP attributes */
3011             snprintf(gdbstub_device_name, sizeof(gdbstub_device_name),
3012                      "%s,nowait,nodelay,server", device);
3013             device = gdbstub_device_name;
3014         }
3015 #ifndef _WIN32
3016         else if (strcmp(device, "stdio") == 0) {
3017             struct sigaction act;
3018
3019             memset(&act, 0, sizeof(act));
3020             act.sa_handler = gdb_sigterm_handler;
3021             sigaction(SIGINT, &act, NULL);
3022         }
3023 #endif
3024         chr = qemu_chr_new("gdb", device, NULL);
3025         if (!chr)
3026             return -1;
3027
3028         qemu_chr_fe_claim_no_fail(chr);
3029         qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
3030                               gdb_chr_event, NULL);
3031     }
3032
3033     s = gdbserver_state;
3034     if (!s) {
3035         s = g_malloc0(sizeof(GDBState));
3036         gdbserver_state = s;
3037
3038         qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
3039
3040         /* Initialize a monitor terminal for gdb */
3041         mon_chr = g_malloc0(sizeof(*mon_chr));
3042         mon_chr->chr_write = gdb_monitor_write;
3043         monitor_init(mon_chr, 0);
3044     } else {
3045         if (s->chr)
3046             qemu_chr_delete(s->chr);
3047         mon_chr = s->mon_chr;
3048         memset(s, 0, sizeof(GDBState));
3049     }
3050     s->c_cpu = first_cpu;
3051     s->g_cpu = first_cpu;
3052     s->chr = chr;
3053     s->state = chr ? RS_IDLE : RS_INACTIVE;
3054     s->mon_chr = mon_chr;
3055     s->current_syscall_cb = NULL;
3056
3057     return 0;
3058 }
3059 #endif