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