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