gdbstub: Fix access to PPC FPRs
[qemu] / 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, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20 #include "config.h"
21 #include "qemu-common.h"
22 #ifdef CONFIG_USER_ONLY
23 #include <stdlib.h>
24 #include <stdio.h>
25 #include <stdarg.h>
26 #include <string.h>
27 #include <errno.h>
28 #include <unistd.h>
29 #include <fcntl.h>
30
31 #include "qemu.h"
32 #else
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 #ifdef _WIN32
42 /* XXX: these constants may be independent of the host ones even for Unix */
43 #ifndef SIGTRAP
44 #define SIGTRAP 5
45 #endif
46 #ifndef SIGINT
47 #define SIGINT 2
48 #endif
49 #else
50 #include <signal.h>
51 #endif
52
53 //#define DEBUG_GDB
54
55 typedef struct GDBRegisterState {
56     int base_reg;
57     int num_regs;
58     gdb_reg_cb get_reg;
59     gdb_reg_cb set_reg;
60     const char *xml;
61     struct GDBRegisterState *next;
62 } GDBRegisterState;
63
64 enum RSState {
65     RS_IDLE,
66     RS_GETLINE,
67     RS_CHKSUM1,
68     RS_CHKSUM2,
69     RS_SYSCALL,
70 };
71 typedef struct GDBState {
72     CPUState *c_cpu; /* current CPU for step/continue ops */
73     CPUState *g_cpu; /* current CPU for other ops */
74     CPUState *query_cpu; /* for q{f|s}ThreadInfo */
75     enum RSState state; /* parsing state */
76     char line_buf[MAX_PACKET_LENGTH];
77     int line_buf_index;
78     int line_csum;
79     uint8_t last_packet[MAX_PACKET_LENGTH + 4];
80     int last_packet_len;
81     int signal;
82 #ifdef CONFIG_USER_ONLY
83     int fd;
84     int running_state;
85 #else
86     CharDriverState *chr;
87 #endif
88 } GDBState;
89
90 /* By default use no IRQs and no timers while single stepping so as to
91  * make single stepping like an ICE HW step.
92  */
93 static int sstep_flags = SSTEP_ENABLE|SSTEP_NOIRQ|SSTEP_NOTIMER;
94
95 static GDBState *gdbserver_state;
96
97 /* This is an ugly hack to cope with both new and old gdb.
98    If gdb sends qXfer:features:read then assume we're talking to a newish
99    gdb that understands target descriptions.  */
100 static int gdb_has_xml;
101
102 #ifdef CONFIG_USER_ONLY
103 /* XXX: This is not thread safe.  Do we care?  */
104 static int gdbserver_fd = -1;
105
106 static int get_char(GDBState *s)
107 {
108     uint8_t ch;
109     int ret;
110
111     for(;;) {
112         ret = recv(s->fd, &ch, 1, 0);
113         if (ret < 0) {
114             if (errno == ECONNRESET)
115                 s->fd = -1;
116             if (errno != EINTR && errno != EAGAIN)
117                 return -1;
118         } else if (ret == 0) {
119             close(s->fd);
120             s->fd = -1;
121             return -1;
122         } else {
123             break;
124         }
125     }
126     return ch;
127 }
128 #endif
129
130 static gdb_syscall_complete_cb gdb_current_syscall_cb;
131
132 enum {
133     GDB_SYS_UNKNOWN,
134     GDB_SYS_ENABLED,
135     GDB_SYS_DISABLED,
136 } gdb_syscall_mode;
137
138 /* If gdb is connected when the first semihosting syscall occurs then use
139    remote gdb syscalls.  Otherwise use native file IO.  */
140 int use_gdb_syscalls(void)
141 {
142     if (gdb_syscall_mode == GDB_SYS_UNKNOWN) {
143         gdb_syscall_mode = (gdbserver_state ? GDB_SYS_ENABLED
144                                             : GDB_SYS_DISABLED);
145     }
146     return gdb_syscall_mode == GDB_SYS_ENABLED;
147 }
148
149 /* Resume execution.  */
150 static inline void gdb_continue(GDBState *s)
151 {
152 #ifdef CONFIG_USER_ONLY
153     s->running_state = 1;
154 #else
155     vm_start();
156 #endif
157 }
158
159 static void put_buffer(GDBState *s, const uint8_t *buf, int len)
160 {
161 #ifdef CONFIG_USER_ONLY
162     int ret;
163
164     while (len > 0) {
165         ret = send(s->fd, buf, len, 0);
166         if (ret < 0) {
167             if (errno != EINTR && errno != EAGAIN)
168                 return;
169         } else {
170             buf += ret;
171             len -= ret;
172         }
173     }
174 #else
175     qemu_chr_write(s->chr, buf, len);
176 #endif
177 }
178
179 static inline int fromhex(int v)
180 {
181     if (v >= '0' && v <= '9')
182         return v - '0';
183     else if (v >= 'A' && v <= 'F')
184         return v - 'A' + 10;
185     else if (v >= 'a' && v <= 'f')
186         return v - 'a' + 10;
187     else
188         return 0;
189 }
190
191 static inline int tohex(int v)
192 {
193     if (v < 10)
194         return v + '0';
195     else
196         return v - 10 + 'a';
197 }
198
199 static void memtohex(char *buf, const uint8_t *mem, int len)
200 {
201     int i, c;
202     char *q;
203     q = buf;
204     for(i = 0; i < len; i++) {
205         c = mem[i];
206         *q++ = tohex(c >> 4);
207         *q++ = tohex(c & 0xf);
208     }
209     *q = '\0';
210 }
211
212 static void hextomem(uint8_t *mem, const char *buf, int len)
213 {
214     int i;
215
216     for(i = 0; i < len; i++) {
217         mem[i] = (fromhex(buf[0]) << 4) | fromhex(buf[1]);
218         buf += 2;
219     }
220 }
221
222 /* return -1 if error, 0 if OK */
223 static int put_packet_binary(GDBState *s, const char *buf, int len)
224 {
225     int csum, i;
226     uint8_t *p;
227
228     for(;;) {
229         p = s->last_packet;
230         *(p++) = '$';
231         memcpy(p, buf, len);
232         p += len;
233         csum = 0;
234         for(i = 0; i < len; i++) {
235             csum += buf[i];
236         }
237         *(p++) = '#';
238         *(p++) = tohex((csum >> 4) & 0xf);
239         *(p++) = tohex((csum) & 0xf);
240
241         s->last_packet_len = p - s->last_packet;
242         put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
243
244 #ifdef CONFIG_USER_ONLY
245         i = get_char(s);
246         if (i < 0)
247             return -1;
248         if (i == '+')
249             break;
250 #else
251         break;
252 #endif
253     }
254     return 0;
255 }
256
257 /* return -1 if error, 0 if OK */
258 static int put_packet(GDBState *s, const char *buf)
259 {
260 #ifdef DEBUG_GDB
261     printf("reply='%s'\n", buf);
262 #endif
263
264     return put_packet_binary(s, buf, strlen(buf));
265 }
266
267 /* The GDB remote protocol transfers values in target byte order.  This means
268    we can use the raw memory access routines to access the value buffer.
269    Conveniently, these also handle the case where the buffer is mis-aligned.
270  */
271 #define GET_REG8(val) do { \
272     stb_p(mem_buf, val); \
273     return 1; \
274     } while(0)
275 #define GET_REG16(val) do { \
276     stw_p(mem_buf, val); \
277     return 2; \
278     } while(0)
279 #define GET_REG32(val) do { \
280     stl_p(mem_buf, val); \
281     return 4; \
282     } while(0)
283 #define GET_REG64(val) do { \
284     stq_p(mem_buf, val); \
285     return 8; \
286     } while(0)
287
288 #if TARGET_LONG_BITS == 64
289 #define GET_REGL(val) GET_REG64(val)
290 #define ldtul_p(addr) ldq_p(addr)
291 #else
292 #define GET_REGL(val) GET_REG32(val)
293 #define ldtul_p(addr) ldl_p(addr)
294 #endif
295
296 #if defined(TARGET_I386)
297
298 #ifdef TARGET_X86_64
299 static const int gpr_map[16] = {
300     R_EAX, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI, R_EBP, R_ESP,
301     8, 9, 10, 11, 12, 13, 14, 15
302 };
303 #else
304 static const int gpr_map[8] = {0, 1, 2, 3, 4, 5, 6, 7};
305 #endif
306
307 #define NUM_CORE_REGS (CPU_NB_REGS * 2 + 25)
308
309 static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
310 {
311     if (n < CPU_NB_REGS) {
312         GET_REGL(env->regs[gpr_map[n]]);
313     } else if (n >= CPU_NB_REGS + 8 && n < CPU_NB_REGS + 16) {
314         /* FIXME: byteswap float values.  */
315 #ifdef USE_X86LDOUBLE
316         memcpy(mem_buf, &env->fpregs[n - (CPU_NB_REGS + 8)], 10);
317 #else
318         memset(mem_buf, 0, 10);
319 #endif
320         return 10;
321     } else if (n >= CPU_NB_REGS + 24) {
322         n -= CPU_NB_REGS + 24;
323         if (n < CPU_NB_REGS) {
324             stq_p(mem_buf, env->xmm_regs[n].XMM_Q(0));
325             stq_p(mem_buf + 8, env->xmm_regs[n].XMM_Q(1));
326             return 16;
327         } else if (n == CPU_NB_REGS) {
328             GET_REG32(env->mxcsr);
329         } 
330     } else {
331         n -= CPU_NB_REGS;
332         switch (n) {
333         case 0: GET_REGL(env->eip);
334         case 1: GET_REG32(env->eflags);
335         case 2: GET_REG32(env->segs[R_CS].selector);
336         case 3: GET_REG32(env->segs[R_SS].selector);
337         case 4: GET_REG32(env->segs[R_DS].selector);
338         case 5: GET_REG32(env->segs[R_ES].selector);
339         case 6: GET_REG32(env->segs[R_FS].selector);
340         case 7: GET_REG32(env->segs[R_GS].selector);
341         /* 8...15 x87 regs.  */
342         case 16: GET_REG32(env->fpuc);
343         case 17: GET_REG32((env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11);
344         case 18: GET_REG32(0); /* ftag */
345         case 19: GET_REG32(0); /* fiseg */
346         case 20: GET_REG32(0); /* fioff */
347         case 21: GET_REG32(0); /* foseg */
348         case 22: GET_REG32(0); /* fooff */
349         case 23: GET_REG32(0); /* fop */
350         /* 24+ xmm regs.  */
351         }
352     }
353     return 0;
354 }
355
356 static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int i)
357 {
358     uint32_t tmp;
359
360     if (i < CPU_NB_REGS) {
361         env->regs[gpr_map[i]] = ldtul_p(mem_buf);
362         return sizeof(target_ulong);
363     } else if (i >= CPU_NB_REGS + 8 && i < CPU_NB_REGS + 16) {
364         i -= CPU_NB_REGS + 8;
365 #ifdef USE_X86LDOUBLE
366         memcpy(&env->fpregs[i], mem_buf, 10);
367 #endif
368         return 10;
369     } else if (i >= CPU_NB_REGS + 24) {
370         i -= CPU_NB_REGS + 24;
371         if (i < CPU_NB_REGS) {
372             env->xmm_regs[i].XMM_Q(0) = ldq_p(mem_buf);
373             env->xmm_regs[i].XMM_Q(1) = ldq_p(mem_buf + 8);
374             return 16;
375         } else if (i == CPU_NB_REGS) {
376             env->mxcsr = ldl_p(mem_buf);
377             return 4;
378         }
379     } else {
380         i -= CPU_NB_REGS;
381         switch (i) {
382         case 0: env->eip = ldtul_p(mem_buf); return sizeof(target_ulong);
383         case 1: env->eflags = ldl_p(mem_buf); return 4;
384 #if defined(CONFIG_USER_ONLY)
385 #define LOAD_SEG(index, sreg)\
386             tmp = ldl_p(mem_buf);\
387             if (tmp != env->segs[sreg].selector)\
388                 cpu_x86_load_seg(env, sreg, tmp);
389 #else
390 /* FIXME: Honor segment registers.  Needs to avoid raising an exception
391    when the selector is invalid.  */
392 #define LOAD_SEG(index, sreg) do {} while(0)
393 #endif
394         case 2: LOAD_SEG(10, R_CS); return 4;
395         case 3: LOAD_SEG(11, R_SS); return 4;
396         case 4: LOAD_SEG(12, R_DS); return 4;
397         case 5: LOAD_SEG(13, R_ES); return 4;
398         case 6: LOAD_SEG(14, R_FS); return 4;
399         case 7: LOAD_SEG(15, R_GS); return 4;
400         /* 8...15 x87 regs.  */
401         case 16: env->fpuc = ldl_p(mem_buf); return 4;
402         case 17:
403                  tmp = ldl_p(mem_buf);
404                  env->fpstt = (tmp >> 11) & 7;
405                  env->fpus = tmp & ~0x3800;
406                  return 4;
407         case 18: /* ftag */ return 4;
408         case 19: /* fiseg */ return 4;
409         case 20: /* fioff */ return 4;
410         case 21: /* foseg */ return 4;
411         case 22: /* fooff */ return 4;
412         case 23: /* fop */ return 4;
413         /* 24+ xmm regs.  */
414         }
415     }
416     /* Unrecognised register.  */
417     return 0;
418 }
419
420 #elif defined (TARGET_PPC)
421
422 #define NUM_CORE_REGS 71
423
424 static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
425 {
426     if (n < 32) {
427         /* gprs */
428         GET_REGL(env->gpr[n]);
429     } else if (n < 64) {
430         /* fprs */
431         stfq_p(mem_buf, env->fpr[n-32]);
432         return 8;
433     } else {
434         switch (n) {
435         case 64: GET_REGL(env->nip);
436         case 65: GET_REGL(env->msr);
437         case 66:
438             {
439                 uint32_t cr = 0;
440                 int i;
441                 for (i = 0; i < 8; i++)
442                     cr |= env->crf[i] << (32 - ((i + 1) * 4));
443                 GET_REG32(cr);
444             }
445         case 67: GET_REGL(env->lr);
446         case 68: GET_REGL(env->ctr);
447         case 69: GET_REGL(env->xer);
448         case 70: GET_REG32(0); /* fpscr */
449         }
450     }
451     return 0;
452 }
453
454 static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
455 {
456     if (n < 32) {
457         /* gprs */
458         env->gpr[n] = ldtul_p(mem_buf);
459         return sizeof(target_ulong);
460     } else if (n < 64) {
461         /* fprs */
462         env->fpr[n-32] = ldfq_p(mem_buf);
463         return 8;
464     } else {
465         switch (n) {
466         case 64:
467             env->nip = ldtul_p(mem_buf);
468             return sizeof(target_ulong);
469         case 65:
470             ppc_store_msr(env, ldtul_p(mem_buf));
471             return sizeof(target_ulong);
472         case 66:
473             {
474                 uint32_t cr = ldl_p(mem_buf);
475                 int i;
476                 for (i = 0; i < 8; i++)
477                     env->crf[i] = (cr >> (32 - ((i + 1) * 4))) & 0xF;
478                 return 4;
479             }
480         case 67:
481             env->lr = ldtul_p(mem_buf);
482             return sizeof(target_ulong);
483         case 68:
484             env->ctr = ldtul_p(mem_buf);
485             return sizeof(target_ulong);
486         case 69:
487             env->xer = ldtul_p(mem_buf);
488             return sizeof(target_ulong);
489         case 70:
490             /* fpscr */
491             return 4;
492         }
493     }
494     return 0;
495 }
496
497 #elif defined (TARGET_SPARC)
498
499 #if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
500 #define NUM_CORE_REGS 86
501 #else
502 #define NUM_CORE_REGS 73
503 #endif
504
505 #ifdef TARGET_ABI32
506 #define GET_REGA(val) GET_REG32(val)
507 #else
508 #define GET_REGA(val) GET_REGL(val)
509 #endif
510
511 static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
512 {
513     if (n < 8) {
514         /* g0..g7 */
515         GET_REGA(env->gregs[n]);
516     }
517     if (n < 32) {
518         /* register window */
519         GET_REGA(env->regwptr[n - 8]);
520     }
521 #if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
522     if (n < 64) {
523         /* fprs */
524         GET_REG32(*((uint32_t *)&env->fpr[n - 32]));
525     }
526     /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
527     switch (n) {
528     case 64: GET_REGA(env->y);
529     case 65: GET_REGA(GET_PSR(env));
530     case 66: GET_REGA(env->wim);
531     case 67: GET_REGA(env->tbr);
532     case 68: GET_REGA(env->pc);
533     case 69: GET_REGA(env->npc);
534     case 70: GET_REGA(env->fsr);
535     case 71: GET_REGA(0); /* csr */
536     case 72: GET_REGA(0);
537     }
538 #else
539     if (n < 64) {
540         /* f0-f31 */
541         GET_REG32(*((uint32_t *)&env->fpr[n - 32]));
542     }
543     if (n < 80) {
544         /* f32-f62 (double width, even numbers only) */
545         uint64_t val;
546
547         val = (uint64_t)*((uint32_t *)&env->fpr[(n - 64) * 2 + 32]) << 32;
548         val |= *((uint32_t *)&env->fpr[(n - 64) * 2 + 33]);
549         GET_REG64(val);
550     }
551     switch (n) {
552     case 80: GET_REGL(env->pc);
553     case 81: GET_REGL(env->npc);
554     case 82: GET_REGL(((uint64_t)GET_CCR(env) << 32) |
555                            ((env->asi & 0xff) << 24) |
556                            ((env->pstate & 0xfff) << 8) |
557                            GET_CWP64(env));
558     case 83: GET_REGL(env->fsr);
559     case 84: GET_REGL(env->fprs);
560     case 85: GET_REGL(env->y);
561     }
562 #endif
563     return 0;
564 }
565
566 static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
567 {
568 #if defined(TARGET_ABI32)
569     abi_ulong tmp;
570
571     tmp = ldl_p(mem_buf);
572 #else
573     target_ulong tmp;
574
575     tmp = ldtul_p(mem_buf);
576 #endif
577
578     if (n < 8) {
579         /* g0..g7 */
580         env->gregs[n] = tmp;
581     } else if (n < 32) {
582         /* register window */
583         env->regwptr[n - 8] = tmp;
584     }
585 #if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
586     else if (n < 64) {
587         /* fprs */
588         *((uint32_t *)&env->fpr[n - 32]) = tmp;
589     } else {
590         /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
591         switch (n) {
592         case 64: env->y = tmp; break;
593         case 65: PUT_PSR(env, tmp); break;
594         case 66: env->wim = tmp; break;
595         case 67: env->tbr = tmp; break;
596         case 68: env->pc = tmp; break;
597         case 69: env->npc = tmp; break;
598         case 70: env->fsr = tmp; break;
599         default: return 0;
600         }
601     }
602     return 4;
603 #else
604     else if (n < 64) {
605         /* f0-f31 */
606         env->fpr[n] = ldfl_p(mem_buf);
607         return 4;
608     } else if (n < 80) {
609         /* f32-f62 (double width, even numbers only) */
610         *((uint32_t *)&env->fpr[(n - 64) * 2 + 32]) = tmp >> 32;
611         *((uint32_t *)&env->fpr[(n - 64) * 2 + 33]) = tmp;
612     } else {
613         switch (n) {
614         case 80: env->pc = tmp; break;
615         case 81: env->npc = tmp; break;
616         case 82:
617             PUT_CCR(env, tmp >> 32);
618             env->asi = (tmp >> 24) & 0xff;
619             env->pstate = (tmp >> 8) & 0xfff;
620             PUT_CWP64(env, tmp & 0xff);
621             break;
622         case 83: env->fsr = tmp; break;
623         case 84: env->fprs = tmp; break;
624         case 85: env->y = tmp; break;
625         default: return 0;
626         }
627     }
628     return 8;
629 #endif
630 }
631 #elif defined (TARGET_ARM)
632
633 /* Old gdb always expect FPA registers.  Newer (xml-aware) gdb only expect
634    whatever the target description contains.  Due to a historical mishap
635    the FPA registers appear in between core integer regs and the CPSR.
636    We hack round this by giving the FPA regs zero size when talking to a
637    newer gdb.  */
638 #define NUM_CORE_REGS 26
639 #define GDB_CORE_XML "arm-core.xml"
640
641 static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
642 {
643     if (n < 16) {
644         /* Core integer register.  */
645         GET_REG32(env->regs[n]);
646     }
647     if (n < 24) {
648         /* FPA registers.  */
649         if (gdb_has_xml)
650             return 0;
651         memset(mem_buf, 0, 12);
652         return 12;
653     }
654     switch (n) {
655     case 24:
656         /* FPA status register.  */
657         if (gdb_has_xml)
658             return 0;
659         GET_REG32(0);
660     case 25:
661         /* CPSR */
662         GET_REG32(cpsr_read(env));
663     }
664     /* Unknown register.  */
665     return 0;
666 }
667
668 static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
669 {
670     uint32_t tmp;
671
672     tmp = ldl_p(mem_buf);
673
674     /* Mask out low bit of PC to workaround gdb bugs.  This will probably
675        cause problems if we ever implement the Jazelle DBX extensions.  */
676     if (n == 15)
677         tmp &= ~1;
678
679     if (n < 16) {
680         /* Core integer register.  */
681         env->regs[n] = tmp;
682         return 4;
683     }
684     if (n < 24) { /* 16-23 */
685         /* FPA registers (ignored).  */
686         if (gdb_has_xml)
687             return 0;
688         return 12;
689     }
690     switch (n) {
691     case 24:
692         /* FPA status register (ignored).  */
693         if (gdb_has_xml)
694             return 0;
695         return 4;
696     case 25:
697         /* CPSR */
698         cpsr_write (env, tmp, 0xffffffff);
699         return 4;
700     }
701     /* Unknown register.  */
702     return 0;
703 }
704
705 #elif defined (TARGET_M68K)
706
707 #define NUM_CORE_REGS 18
708
709 #define GDB_CORE_XML "cf-core.xml"
710
711 static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
712 {
713     if (n < 8) {
714         /* D0-D7 */
715         GET_REG32(env->dregs[n]);
716     } else if (n < 16) {
717         /* A0-A7 */
718         GET_REG32(env->aregs[n - 8]);
719     } else {
720         switch (n) {
721         case 16: GET_REG32(env->sr);
722         case 17: GET_REG32(env->pc);
723         }
724     }
725     /* FP registers not included here because they vary between
726        ColdFire and m68k.  Use XML bits for these.  */
727     return 0;
728 }
729
730 static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
731 {
732     uint32_t tmp;
733
734     tmp = ldl_p(mem_buf);
735
736     if (n < 8) {
737         /* D0-D7 */
738         env->dregs[n] = tmp;
739     } else if (n < 8) {
740         /* A0-A7 */
741         env->aregs[n - 8] = tmp;
742     } else {
743         switch (n) {
744         case 16: env->sr = tmp; break;
745         case 17: env->pc = tmp; break;
746         default: return 0;
747         }
748     }
749     return 4;
750 }
751 #elif defined (TARGET_MIPS)
752
753 #define NUM_CORE_REGS 73
754
755 static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
756 {
757     if (n < 32) {
758         GET_REGL(env->active_tc.gpr[n]);
759     }
760     if (env->CP0_Config1 & (1 << CP0C1_FP)) {
761         if (n >= 38 && n < 70) {
762             if (env->CP0_Status & (1 << CP0St_FR))
763                 GET_REGL(env->active_fpu.fpr[n - 38].d);
764             else
765                 GET_REGL(env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX]);
766         }
767         switch (n) {
768         case 70: GET_REGL((int32_t)env->active_fpu.fcr31);
769         case 71: GET_REGL((int32_t)env->active_fpu.fcr0);
770         }
771     }
772     switch (n) {
773     case 32: GET_REGL((int32_t)env->CP0_Status);
774     case 33: GET_REGL(env->active_tc.LO[0]);
775     case 34: GET_REGL(env->active_tc.HI[0]);
776     case 35: GET_REGL(env->CP0_BadVAddr);
777     case 36: GET_REGL((int32_t)env->CP0_Cause);
778     case 37: GET_REGL(env->active_tc.PC);
779     case 72: GET_REGL(0); /* fp */
780     case 89: GET_REGL((int32_t)env->CP0_PRid);
781     }
782     if (n >= 73 && n <= 88) {
783         /* 16 embedded regs.  */
784         GET_REGL(0);
785     }
786
787     return 0;
788 }
789
790 /* convert MIPS rounding mode in FCR31 to IEEE library */
791 static unsigned int ieee_rm[] =
792   {
793     float_round_nearest_even,
794     float_round_to_zero,
795     float_round_up,
796     float_round_down
797   };
798 #define RESTORE_ROUNDING_MODE \
799     set_float_rounding_mode(ieee_rm[env->active_fpu.fcr31 & 3], &env->active_fpu.fp_status)
800
801 static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
802 {
803     target_ulong tmp;
804
805     tmp = ldtul_p(mem_buf);
806
807     if (n < 32) {
808         env->active_tc.gpr[n] = tmp;
809         return sizeof(target_ulong);
810     }
811     if (env->CP0_Config1 & (1 << CP0C1_FP)
812             && n >= 38 && n < 73) {
813         if (n < 70) {
814             if (env->CP0_Status & (1 << CP0St_FR))
815               env->active_fpu.fpr[n - 38].d = tmp;
816             else
817               env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX] = tmp;
818         }
819         switch (n) {
820         case 70:
821             env->active_fpu.fcr31 = tmp & 0xFF83FFFF;
822             /* set rounding mode */
823             RESTORE_ROUNDING_MODE;
824 #ifndef CONFIG_SOFTFLOAT
825             /* no floating point exception for native float */
826             SET_FP_ENABLE(env->active_fpu.fcr31, 0);
827 #endif
828             break;
829         case 71: env->active_fpu.fcr0 = tmp; break;
830         }
831         return sizeof(target_ulong);
832     }
833     switch (n) {
834     case 32: env->CP0_Status = tmp; break;
835     case 33: env->active_tc.LO[0] = tmp; break;
836     case 34: env->active_tc.HI[0] = tmp; break;
837     case 35: env->CP0_BadVAddr = tmp; break;
838     case 36: env->CP0_Cause = tmp; break;
839     case 37: env->active_tc.PC = tmp; break;
840     case 72: /* fp, ignored */ break;
841     default: 
842         if (n > 89)
843             return 0;
844         /* Other registers are readonly.  Ignore writes.  */
845         break;
846     }
847
848     return sizeof(target_ulong);
849 }
850 #elif defined (TARGET_SH4)
851
852 /* Hint: Use "set architecture sh4" in GDB to see fpu registers */
853 /* FIXME: We should use XML for this.  */
854
855 #define NUM_CORE_REGS 59
856
857 static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
858 {
859     if (n < 8) {
860         if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
861             GET_REGL(env->gregs[n + 16]);
862         } else {
863             GET_REGL(env->gregs[n]);
864         }
865     } else if (n < 16) {
866         GET_REGL(env->gregs[n - 8]);
867     } else if (n >= 25 && n < 41) {
868         GET_REGL(env->fregs[(n - 25) + ((env->fpscr & FPSCR_FR) ? 16 : 0)]);
869     } else if (n >= 43 && n < 51) {
870         GET_REGL(env->gregs[n - 43]);
871     } else if (n >= 51 && n < 59) {
872         GET_REGL(env->gregs[n - (51 - 16)]);
873     }
874     switch (n) {
875     case 16: GET_REGL(env->pc);
876     case 17: GET_REGL(env->pr);
877     case 18: GET_REGL(env->gbr);
878     case 19: GET_REGL(env->vbr);
879     case 20: GET_REGL(env->mach);
880     case 21: GET_REGL(env->macl);
881     case 22: GET_REGL(env->sr);
882     case 23: GET_REGL(env->fpul);
883     case 24: GET_REGL(env->fpscr);
884     case 41: GET_REGL(env->ssr);
885     case 42: GET_REGL(env->spc);
886     }
887
888     return 0;
889 }
890
891 static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
892 {
893     uint32_t tmp;
894
895     tmp = ldl_p(mem_buf);
896
897     if (n < 8) {
898         if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
899             env->gregs[n + 16] = tmp;
900         } else {
901             env->gregs[n] = tmp;
902         }
903         return 4;
904     } else if (n < 16) {
905         env->gregs[n - 8] = tmp;
906         return 4;
907     } else if (n >= 25 && n < 41) {
908         env->fregs[(n - 25) + ((env->fpscr & FPSCR_FR) ? 16 : 0)] = tmp;
909     } else if (n >= 43 && n < 51) {
910         env->gregs[n - 43] = tmp;
911         return 4;
912     } else if (n >= 51 && n < 59) {
913         env->gregs[n - (51 - 16)] = tmp;
914         return 4;
915     }
916     switch (n) {
917     case 16: env->pc = tmp;
918     case 17: env->pr = tmp;
919     case 18: env->gbr = tmp;
920     case 19: env->vbr = tmp;
921     case 20: env->mach = tmp;
922     case 21: env->macl = tmp;
923     case 22: env->sr = tmp;
924     case 23: env->fpul = tmp;
925     case 24: env->fpscr = tmp;
926     case 41: env->ssr = tmp;
927     case 42: env->spc = tmp;
928     default: return 0;
929     }
930
931     return 4;
932 }
933 #elif defined (TARGET_CRIS)
934
935 #define NUM_CORE_REGS 49
936
937 static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
938 {
939     uint8_t srs;
940
941     srs = env->pregs[PR_SRS];
942     if (n < 16) {
943         GET_REG32(env->regs[n]);
944     }
945
946     if (n >= 21 && n < 32) {
947         GET_REG32(env->pregs[n - 16]);
948     }
949     if (n >= 33 && n < 49) {
950         GET_REG32(env->sregs[srs][n - 33]);
951     }
952     switch (n) {
953     case 16: GET_REG8(env->pregs[0]);
954     case 17: GET_REG8(env->pregs[1]);
955     case 18: GET_REG32(env->pregs[2]);
956     case 19: GET_REG8(srs);
957     case 20: GET_REG16(env->pregs[4]);
958     case 32: GET_REG32(env->pc);
959     }
960
961     return 0;
962 }
963
964 static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
965 {
966     uint32_t tmp;
967
968     if (n > 49)
969         return 0;
970
971     tmp = ldl_p(mem_buf);
972
973     if (n < 16) {
974         env->regs[n] = tmp;
975     }
976
977     if (n >= 21 && n < 32) {
978         env->pregs[n - 16] = tmp;
979     }
980
981     /* FIXME: Should support function regs be writable?  */
982     switch (n) {
983     case 16: return 1;
984     case 17: return 1;
985     case 18: env->pregs[PR_PID] = tmp; break;
986     case 19: return 1;
987     case 20: return 2;
988     case 32: env->pc = tmp; break;
989     }
990
991     return 4;
992 }
993 #else
994
995 #define NUM_CORE_REGS 0
996
997 static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
998 {
999     return 0;
1000 }
1001
1002 static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1003 {
1004     return 0;
1005 }
1006
1007 #endif
1008
1009 static int num_g_regs = NUM_CORE_REGS;
1010
1011 #ifdef GDB_CORE_XML
1012 /* Encode data using the encoding for 'x' packets.  */
1013 static int memtox(char *buf, const char *mem, int len)
1014 {
1015     char *p = buf;
1016     char c;
1017
1018     while (len--) {
1019         c = *(mem++);
1020         switch (c) {
1021         case '#': case '$': case '*': case '}':
1022             *(p++) = '}';
1023             *(p++) = c ^ 0x20;
1024             break;
1025         default:
1026             *(p++) = c;
1027             break;
1028         }
1029     }
1030     return p - buf;
1031 }
1032
1033 const char *get_feature_xml(const char *p, const char **newp)
1034 {
1035     extern const char *const xml_builtin[][2];
1036     size_t len;
1037     int i;
1038     const char *name;
1039     static char target_xml[1024];
1040
1041     len = 0;
1042     while (p[len] && p[len] != ':')
1043         len++;
1044     *newp = p + len;
1045
1046     name = NULL;
1047     if (strncmp(p, "target.xml", len) == 0) {
1048         /* Generate the XML description for this CPU.  */
1049         if (!target_xml[0]) {
1050             GDBRegisterState *r;
1051
1052             snprintf(target_xml, sizeof(target_xml),
1053                      "<?xml version=\"1.0\"?>"
1054                      "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
1055                      "<target>"
1056                      "<xi:include href=\"%s\"/>",
1057                      GDB_CORE_XML);
1058
1059             for (r = first_cpu->gdb_regs; r; r = r->next) {
1060                 strcat(target_xml, "<xi:include href=\"");
1061                 strcat(target_xml, r->xml);
1062                 strcat(target_xml, "\"/>");
1063             }
1064             strcat(target_xml, "</target>");
1065         }
1066         return target_xml;
1067     }
1068     for (i = 0; ; i++) {
1069         name = xml_builtin[i][0];
1070         if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
1071             break;
1072     }
1073     return name ? xml_builtin[i][1] : NULL;
1074 }
1075 #endif
1076
1077 static int gdb_read_register(CPUState *env, uint8_t *mem_buf, int reg)
1078 {
1079     GDBRegisterState *r;
1080
1081     if (reg < NUM_CORE_REGS)
1082         return cpu_gdb_read_register(env, mem_buf, reg);
1083
1084     for (r = env->gdb_regs; r; r = r->next) {
1085         if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1086             return r->get_reg(env, mem_buf, reg - r->base_reg);
1087         }
1088     }
1089     return 0;
1090 }
1091
1092 static int gdb_write_register(CPUState *env, uint8_t *mem_buf, int reg)
1093 {
1094     GDBRegisterState *r;
1095
1096     if (reg < NUM_CORE_REGS)
1097         return cpu_gdb_write_register(env, mem_buf, reg);
1098
1099     for (r = env->gdb_regs; r; r = r->next) {
1100         if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1101             return r->set_reg(env, mem_buf, reg - r->base_reg);
1102         }
1103     }
1104     return 0;
1105 }
1106
1107 /* Register a supplemental set of CPU registers.  If g_pos is nonzero it
1108    specifies the first register number and these registers are included in
1109    a standard "g" packet.  Direction is relative to gdb, i.e. get_reg is
1110    gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
1111  */
1112
1113 void gdb_register_coprocessor(CPUState * env,
1114                              gdb_reg_cb get_reg, gdb_reg_cb set_reg,
1115                              int num_regs, const char *xml, int g_pos)
1116 {
1117     GDBRegisterState *s;
1118     GDBRegisterState **p;
1119     static int last_reg = NUM_CORE_REGS;
1120
1121     s = (GDBRegisterState *)qemu_mallocz(sizeof(GDBRegisterState));
1122     s->base_reg = last_reg;
1123     s->num_regs = num_regs;
1124     s->get_reg = get_reg;
1125     s->set_reg = set_reg;
1126     s->xml = xml;
1127     p = &env->gdb_regs;
1128     while (*p) {
1129         /* Check for duplicates.  */
1130         if (strcmp((*p)->xml, xml) == 0)
1131             return;
1132         p = &(*p)->next;
1133     }
1134     /* Add to end of list.  */
1135     last_reg += num_regs;
1136     *p = s;
1137     if (g_pos) {
1138         if (g_pos != s->base_reg) {
1139             fprintf(stderr, "Error: Bad gdb register numbering for '%s'\n"
1140                     "Expected %d got %d\n", xml, g_pos, s->base_reg);
1141         } else {
1142             num_g_regs = last_reg;
1143         }
1144     }
1145 }
1146
1147 /* GDB breakpoint/watchpoint types */
1148 #define GDB_BREAKPOINT_SW        0
1149 #define GDB_BREAKPOINT_HW        1
1150 #define GDB_WATCHPOINT_WRITE     2
1151 #define GDB_WATCHPOINT_READ      3
1152 #define GDB_WATCHPOINT_ACCESS    4
1153
1154 #ifndef CONFIG_USER_ONLY
1155 static const int xlat_gdb_type[] = {
1156     [GDB_WATCHPOINT_WRITE]  = BP_GDB | BP_MEM_WRITE,
1157     [GDB_WATCHPOINT_READ]   = BP_GDB | BP_MEM_READ,
1158     [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
1159 };
1160 #endif
1161
1162 static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
1163 {
1164     CPUState *env;
1165     int err = 0;
1166
1167     switch (type) {
1168     case GDB_BREAKPOINT_SW:
1169     case GDB_BREAKPOINT_HW:
1170         for (env = first_cpu; env != NULL; env = env->next_cpu) {
1171             err = cpu_breakpoint_insert(env, addr, BP_GDB, NULL);
1172             if (err)
1173                 break;
1174         }
1175         return err;
1176 #ifndef CONFIG_USER_ONLY
1177     case GDB_WATCHPOINT_WRITE:
1178     case GDB_WATCHPOINT_READ:
1179     case GDB_WATCHPOINT_ACCESS:
1180         for (env = first_cpu; env != NULL; env = env->next_cpu) {
1181             err = cpu_watchpoint_insert(env, addr, len, xlat_gdb_type[type],
1182                                         NULL);
1183             if (err)
1184                 break;
1185         }
1186         return err;
1187 #endif
1188     default:
1189         return -ENOSYS;
1190     }
1191 }
1192
1193 static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
1194 {
1195     CPUState *env;
1196     int err = 0;
1197
1198     switch (type) {
1199     case GDB_BREAKPOINT_SW:
1200     case GDB_BREAKPOINT_HW:
1201         for (env = first_cpu; env != NULL; env = env->next_cpu) {
1202             err = cpu_breakpoint_remove(env, addr, BP_GDB);
1203             if (err)
1204                 break;
1205         }
1206         return err;
1207 #ifndef CONFIG_USER_ONLY
1208     case GDB_WATCHPOINT_WRITE:
1209     case GDB_WATCHPOINT_READ:
1210     case GDB_WATCHPOINT_ACCESS:
1211         for (env = first_cpu; env != NULL; env = env->next_cpu) {
1212             err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]);
1213             if (err)
1214                 break;
1215         }
1216         return err;
1217 #endif
1218     default:
1219         return -ENOSYS;
1220     }
1221 }
1222
1223 static void gdb_breakpoint_remove_all(void)
1224 {
1225     CPUState *env;
1226
1227     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1228         cpu_breakpoint_remove_all(env, BP_GDB);
1229 #ifndef CONFIG_USER_ONLY
1230         cpu_watchpoint_remove_all(env, BP_GDB);
1231 #endif
1232     }
1233 }
1234
1235 static int gdb_handle_packet(GDBState *s, const char *line_buf)
1236 {
1237     CPUState *env;
1238     const char *p;
1239     int ch, reg_size, type, res, thread;
1240     char buf[MAX_PACKET_LENGTH];
1241     uint8_t mem_buf[MAX_PACKET_LENGTH];
1242     uint8_t *registers;
1243     target_ulong addr, len;
1244
1245 #ifdef DEBUG_GDB
1246     printf("command='%s'\n", line_buf);
1247 #endif
1248     p = line_buf;
1249     ch = *p++;
1250     switch(ch) {
1251     case '?':
1252         /* TODO: Make this return the correct value for user-mode.  */
1253         snprintf(buf, sizeof(buf), "T%02xthread:%02x;", SIGTRAP,
1254                  s->c_cpu->cpu_index+1);
1255         put_packet(s, buf);
1256         /* Remove all the breakpoints when this query is issued,
1257          * because gdb is doing and initial connect and the state
1258          * should be cleaned up.
1259          */
1260         gdb_breakpoint_remove_all();
1261         break;
1262     case 'c':
1263         if (*p != '\0') {
1264             addr = strtoull(p, (char **)&p, 16);
1265 #if defined(TARGET_I386)
1266             s->c_cpu->eip = addr;
1267 #elif defined (TARGET_PPC)
1268             s->c_cpu->nip = addr;
1269 #elif defined (TARGET_SPARC)
1270             s->c_cpu->pc = addr;
1271             s->c_cpu->npc = addr + 4;
1272 #elif defined (TARGET_ARM)
1273             s->c_cpu->regs[15] = addr;
1274 #elif defined (TARGET_SH4)
1275             s->c_cpu->pc = addr;
1276 #elif defined (TARGET_MIPS)
1277             s->c_cpu->active_tc.PC = addr;
1278 #elif defined (TARGET_CRIS)
1279             s->c_cpu->pc = addr;
1280 #endif
1281         }
1282         gdb_continue(s);
1283         return RS_IDLE;
1284     case 'C':
1285         s->signal = strtoul(p, (char **)&p, 16);
1286         gdb_continue(s);
1287         return RS_IDLE;
1288     case 'k':
1289         /* Kill the target */
1290         fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
1291         exit(0);
1292     case 'D':
1293         /* Detach packet */
1294         gdb_breakpoint_remove_all();
1295         gdb_continue(s);
1296         put_packet(s, "OK");
1297         break;
1298     case 's':
1299         if (*p != '\0') {
1300             addr = strtoull(p, (char **)&p, 16);
1301 #if defined(TARGET_I386)
1302             s->c_cpu->eip = addr;
1303 #elif defined (TARGET_PPC)
1304             s->c_cpu->nip = addr;
1305 #elif defined (TARGET_SPARC)
1306             s->c_cpu->pc = addr;
1307             s->c_cpu->npc = addr + 4;
1308 #elif defined (TARGET_ARM)
1309             s->c_cpu->regs[15] = addr;
1310 #elif defined (TARGET_SH4)
1311             s->c_cpu->pc = addr;
1312 #elif defined (TARGET_MIPS)
1313             s->c_cpu->active_tc.PC = addr;
1314 #elif defined (TARGET_CRIS)
1315             s->c_cpu->pc = addr;
1316 #endif
1317         }
1318         cpu_single_step(s->c_cpu, sstep_flags);
1319         gdb_continue(s);
1320         return RS_IDLE;
1321     case 'F':
1322         {
1323             target_ulong ret;
1324             target_ulong err;
1325
1326             ret = strtoull(p, (char **)&p, 16);
1327             if (*p == ',') {
1328                 p++;
1329                 err = strtoull(p, (char **)&p, 16);
1330             } else {
1331                 err = 0;
1332             }
1333             if (*p == ',')
1334                 p++;
1335             type = *p;
1336             if (gdb_current_syscall_cb)
1337                 gdb_current_syscall_cb(s->c_cpu, ret, err);
1338             if (type == 'C') {
1339                 put_packet(s, "T02");
1340             } else {
1341                 gdb_continue(s);
1342             }
1343         }
1344         break;
1345     case 'g':
1346         len = 0;
1347         for (addr = 0; addr < num_g_regs; addr++) {
1348             reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr);
1349             len += reg_size;
1350         }
1351         memtohex(buf, mem_buf, len);
1352         put_packet(s, buf);
1353         break;
1354     case 'G':
1355         registers = mem_buf;
1356         len = strlen(p) / 2;
1357         hextomem((uint8_t *)registers, p, len);
1358         for (addr = 0; addr < num_g_regs && len > 0; addr++) {
1359             reg_size = gdb_write_register(s->g_cpu, registers, addr);
1360             len -= reg_size;
1361             registers += reg_size;
1362         }
1363         put_packet(s, "OK");
1364         break;
1365     case 'm':
1366         addr = strtoull(p, (char **)&p, 16);
1367         if (*p == ',')
1368             p++;
1369         len = strtoull(p, NULL, 16);
1370         if (cpu_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 0) != 0) {
1371             put_packet (s, "E14");
1372         } else {
1373             memtohex(buf, mem_buf, len);
1374             put_packet(s, buf);
1375         }
1376         break;
1377     case 'M':
1378         addr = strtoull(p, (char **)&p, 16);
1379         if (*p == ',')
1380             p++;
1381         len = strtoull(p, (char **)&p, 16);
1382         if (*p == ':')
1383             p++;
1384         hextomem(mem_buf, p, len);
1385         if (cpu_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 1) != 0)
1386             put_packet(s, "E14");
1387         else
1388             put_packet(s, "OK");
1389         break;
1390     case 'p':
1391         /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
1392            This works, but can be very slow.  Anything new enough to
1393            understand XML also knows how to use this properly.  */
1394         if (!gdb_has_xml)
1395             goto unknown_command;
1396         addr = strtoull(p, (char **)&p, 16);
1397         reg_size = gdb_read_register(s->g_cpu, mem_buf, addr);
1398         if (reg_size) {
1399             memtohex(buf, mem_buf, reg_size);
1400             put_packet(s, buf);
1401         } else {
1402             put_packet(s, "E14");
1403         }
1404         break;
1405     case 'P':
1406         if (!gdb_has_xml)
1407             goto unknown_command;
1408         addr = strtoull(p, (char **)&p, 16);
1409         if (*p == '=')
1410             p++;
1411         reg_size = strlen(p) / 2;
1412         hextomem(mem_buf, p, reg_size);
1413         gdb_write_register(s->g_cpu, mem_buf, addr);
1414         put_packet(s, "OK");
1415         break;
1416     case 'Z':
1417     case 'z':
1418         type = strtoul(p, (char **)&p, 16);
1419         if (*p == ',')
1420             p++;
1421         addr = strtoull(p, (char **)&p, 16);
1422         if (*p == ',')
1423             p++;
1424         len = strtoull(p, (char **)&p, 16);
1425         if (ch == 'Z')
1426             res = gdb_breakpoint_insert(addr, len, type);
1427         else
1428             res = gdb_breakpoint_remove(addr, len, type);
1429         if (res >= 0)
1430              put_packet(s, "OK");
1431         else if (res == -ENOSYS)
1432             put_packet(s, "");
1433         else
1434             put_packet(s, "E22");
1435         break;
1436     case 'H':
1437         type = *p++;
1438         thread = strtoull(p, (char **)&p, 16);
1439         if (thread == -1 || thread == 0) {
1440             put_packet(s, "OK");
1441             break;
1442         }
1443         for (env = first_cpu; env != NULL; env = env->next_cpu)
1444             if (env->cpu_index + 1 == thread)
1445                 break;
1446         if (env == NULL) {
1447             put_packet(s, "E22");
1448             break;
1449         }
1450         switch (type) {
1451         case 'c':
1452             s->c_cpu = env;
1453             put_packet(s, "OK");
1454             break;
1455         case 'g':
1456             s->g_cpu = env;
1457             put_packet(s, "OK");
1458             break;
1459         default:
1460              put_packet(s, "E22");
1461              break;
1462         }
1463         break;
1464     case 'T':
1465         thread = strtoull(p, (char **)&p, 16);
1466 #ifndef CONFIG_USER_ONLY
1467         if (thread > 0 && thread < smp_cpus + 1)
1468 #else
1469         if (thread == 1)
1470 #endif
1471              put_packet(s, "OK");
1472         else
1473             put_packet(s, "E22");
1474         break;
1475     case 'q':
1476     case 'Q':
1477         /* parse any 'q' packets here */
1478         if (!strcmp(p,"qemu.sstepbits")) {
1479             /* Query Breakpoint bit definitions */
1480             snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
1481                      SSTEP_ENABLE,
1482                      SSTEP_NOIRQ,
1483                      SSTEP_NOTIMER);
1484             put_packet(s, buf);
1485             break;
1486         } else if (strncmp(p,"qemu.sstep",10) == 0) {
1487             /* Display or change the sstep_flags */
1488             p += 10;
1489             if (*p != '=') {
1490                 /* Display current setting */
1491                 snprintf(buf, sizeof(buf), "0x%x", sstep_flags);
1492                 put_packet(s, buf);
1493                 break;
1494             }
1495             p++;
1496             type = strtoul(p, (char **)&p, 16);
1497             sstep_flags = type;
1498             put_packet(s, "OK");
1499             break;
1500         } else if (strcmp(p,"C") == 0) {
1501             /* "Current thread" remains vague in the spec, so always return
1502              *  the first CPU (gdb returns the first thread). */
1503             put_packet(s, "QC1");
1504             break;
1505         } else if (strcmp(p,"fThreadInfo") == 0) {
1506             s->query_cpu = first_cpu;
1507             goto report_cpuinfo;
1508         } else if (strcmp(p,"sThreadInfo") == 0) {
1509         report_cpuinfo:
1510             if (s->query_cpu) {
1511                 snprintf(buf, sizeof(buf), "m%x", s->query_cpu->cpu_index+1);
1512                 put_packet(s, buf);
1513                 s->query_cpu = s->query_cpu->next_cpu;
1514             } else
1515                 put_packet(s, "l");
1516             break;
1517         } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) {
1518             thread = strtoull(p+16, (char **)&p, 16);
1519             for (env = first_cpu; env != NULL; env = env->next_cpu)
1520                 if (env->cpu_index + 1 == thread) {
1521                     len = snprintf((char *)mem_buf, sizeof(mem_buf),
1522                                    "CPU#%d [%s]", env->cpu_index,
1523                                    env->halted ? "halted " : "running");
1524                     memtohex(buf, mem_buf, len);
1525                     put_packet(s, buf);
1526                     break;
1527                 }
1528             break;
1529         }
1530 #ifdef CONFIG_LINUX_USER
1531         else if (strncmp(p, "Offsets", 7) == 0) {
1532             TaskState *ts = s->c_cpu->opaque;
1533
1534             snprintf(buf, sizeof(buf),
1535                      "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
1536                      ";Bss=" TARGET_ABI_FMT_lx,
1537                      ts->info->code_offset,
1538                      ts->info->data_offset,
1539                      ts->info->data_offset);
1540             put_packet(s, buf);
1541             break;
1542         }
1543 #endif
1544         if (strncmp(p, "Supported", 9) == 0) {
1545             snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
1546 #ifdef GDB_CORE_XML
1547             strcat(buf, ";qXfer:features:read+");
1548 #endif
1549             put_packet(s, buf);
1550             break;
1551         }
1552 #ifdef GDB_CORE_XML
1553         if (strncmp(p, "Xfer:features:read:", 19) == 0) {
1554             const char *xml;
1555             target_ulong total_len;
1556
1557             gdb_has_xml = 1;
1558             p += 19;
1559             xml = get_feature_xml(p, &p);
1560             if (!xml) {
1561                 snprintf(buf, sizeof(buf), "E00");
1562                 put_packet(s, buf);
1563                 break;
1564             }
1565
1566             if (*p == ':')
1567                 p++;
1568             addr = strtoul(p, (char **)&p, 16);
1569             if (*p == ',')
1570                 p++;
1571             len = strtoul(p, (char **)&p, 16);
1572
1573             total_len = strlen(xml);
1574             if (addr > total_len) {
1575                 snprintf(buf, sizeof(buf), "E00");
1576                 put_packet(s, buf);
1577                 break;
1578             }
1579             if (len > (MAX_PACKET_LENGTH - 5) / 2)
1580                 len = (MAX_PACKET_LENGTH - 5) / 2;
1581             if (len < total_len - addr) {
1582                 buf[0] = 'm';
1583                 len = memtox(buf + 1, xml + addr, len);
1584             } else {
1585                 buf[0] = 'l';
1586                 len = memtox(buf + 1, xml + addr, total_len - addr);
1587             }
1588             put_packet_binary(s, buf, len + 1);
1589             break;
1590         }
1591 #endif
1592         /* Unrecognised 'q' command.  */
1593         goto unknown_command;
1594
1595     default:
1596     unknown_command:
1597         /* put empty packet */
1598         buf[0] = '\0';
1599         put_packet(s, buf);
1600         break;
1601     }
1602     return RS_IDLE;
1603 }
1604
1605 extern void tb_flush(CPUState *env);
1606
1607 void gdb_set_stop_cpu(CPUState *env)
1608 {
1609     gdbserver_state->c_cpu = env;
1610     gdbserver_state->g_cpu = env;
1611 }
1612
1613 #ifndef CONFIG_USER_ONLY
1614 static void gdb_vm_stopped(void *opaque, int reason)
1615 {
1616     GDBState *s = gdbserver_state;
1617     CPUState *env = s->c_cpu;
1618     char buf[256];
1619     const char *type;
1620     int ret;
1621
1622     if (s->state == RS_SYSCALL)
1623         return;
1624
1625     /* disable single step if it was enable */
1626     cpu_single_step(env, 0);
1627
1628     if (reason == EXCP_DEBUG) {
1629         if (env->watchpoint_hit) {
1630             switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
1631             case BP_MEM_READ:
1632                 type = "r";
1633                 break;
1634             case BP_MEM_ACCESS:
1635                 type = "a";
1636                 break;
1637             default:
1638                 type = "";
1639                 break;
1640             }
1641             snprintf(buf, sizeof(buf),
1642                      "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
1643                      SIGTRAP, env->cpu_index+1, type,
1644                      env->watchpoint_hit->vaddr);
1645             put_packet(s, buf);
1646             env->watchpoint_hit = NULL;
1647             return;
1648         }
1649         tb_flush(env);
1650         ret = SIGTRAP;
1651     } else if (reason == EXCP_INTERRUPT) {
1652         ret = SIGINT;
1653     } else {
1654         ret = 0;
1655     }
1656     snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, env->cpu_index+1);
1657     put_packet(s, buf);
1658 }
1659 #endif
1660
1661 /* Send a gdb syscall request.
1662    This accepts limited printf-style format specifiers, specifically:
1663     %x  - target_ulong argument printed in hex.
1664     %lx - 64-bit argument printed in hex.
1665     %s  - string pointer (target_ulong) and length (int) pair.  */
1666 void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
1667 {
1668     va_list va;
1669     char buf[256];
1670     char *p;
1671     target_ulong addr;
1672     uint64_t i64;
1673     GDBState *s;
1674
1675     s = gdbserver_state;
1676     if (!s)
1677         return;
1678     gdb_current_syscall_cb = cb;
1679     s->state = RS_SYSCALL;
1680 #ifndef CONFIG_USER_ONLY
1681     vm_stop(EXCP_DEBUG);
1682 #endif
1683     s->state = RS_IDLE;
1684     va_start(va, fmt);
1685     p = buf;
1686     *(p++) = 'F';
1687     while (*fmt) {
1688         if (*fmt == '%') {
1689             fmt++;
1690             switch (*fmt++) {
1691             case 'x':
1692                 addr = va_arg(va, target_ulong);
1693                 p += snprintf(p, &buf[sizeof(buf)] - p, TARGET_FMT_lx, addr);
1694                 break;
1695             case 'l':
1696                 if (*(fmt++) != 'x')
1697                     goto bad_format;
1698                 i64 = va_arg(va, uint64_t);
1699                 p += snprintf(p, &buf[sizeof(buf)] - p, "%" PRIx64, i64);
1700                 break;
1701             case 's':
1702                 addr = va_arg(va, target_ulong);
1703                 p += snprintf(p, &buf[sizeof(buf)] - p, TARGET_FMT_lx "/%x",
1704                               addr, va_arg(va, int));
1705                 break;
1706             default:
1707             bad_format:
1708                 fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
1709                         fmt - 1);
1710                 break;
1711             }
1712         } else {
1713             *(p++) = *(fmt++);
1714         }
1715     }
1716     *p = 0;
1717     va_end(va);
1718     put_packet(s, buf);
1719 #ifdef CONFIG_USER_ONLY
1720     gdb_handlesig(s->c_cpu, 0);
1721 #else
1722     cpu_interrupt(s->c_cpu, CPU_INTERRUPT_EXIT);
1723 #endif
1724 }
1725
1726 static void gdb_read_byte(GDBState *s, int ch)
1727 {
1728     int i, csum;
1729     uint8_t reply;
1730
1731 #ifndef CONFIG_USER_ONLY
1732     if (s->last_packet_len) {
1733         /* Waiting for a response to the last packet.  If we see the start
1734            of a new command then abandon the previous response.  */
1735         if (ch == '-') {
1736 #ifdef DEBUG_GDB
1737             printf("Got NACK, retransmitting\n");
1738 #endif
1739             put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
1740         }
1741 #ifdef DEBUG_GDB
1742         else if (ch == '+')
1743             printf("Got ACK\n");
1744         else
1745             printf("Got '%c' when expecting ACK/NACK\n", ch);
1746 #endif
1747         if (ch == '+' || ch == '$')
1748             s->last_packet_len = 0;
1749         if (ch != '$')
1750             return;
1751     }
1752     if (vm_running) {
1753         /* when the CPU is running, we cannot do anything except stop
1754            it when receiving a char */
1755         vm_stop(EXCP_INTERRUPT);
1756     } else
1757 #endif
1758     {
1759         switch(s->state) {
1760         case RS_IDLE:
1761             if (ch == '$') {
1762                 s->line_buf_index = 0;
1763                 s->state = RS_GETLINE;
1764             }
1765             break;
1766         case RS_GETLINE:
1767             if (ch == '#') {
1768             s->state = RS_CHKSUM1;
1769             } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
1770                 s->state = RS_IDLE;
1771             } else {
1772             s->line_buf[s->line_buf_index++] = ch;
1773             }
1774             break;
1775         case RS_CHKSUM1:
1776             s->line_buf[s->line_buf_index] = '\0';
1777             s->line_csum = fromhex(ch) << 4;
1778             s->state = RS_CHKSUM2;
1779             break;
1780         case RS_CHKSUM2:
1781             s->line_csum |= fromhex(ch);
1782             csum = 0;
1783             for(i = 0; i < s->line_buf_index; i++) {
1784                 csum += s->line_buf[i];
1785             }
1786             if (s->line_csum != (csum & 0xff)) {
1787                 reply = '-';
1788                 put_buffer(s, &reply, 1);
1789                 s->state = RS_IDLE;
1790             } else {
1791                 reply = '+';
1792                 put_buffer(s, &reply, 1);
1793                 s->state = gdb_handle_packet(s, s->line_buf);
1794             }
1795             break;
1796         default:
1797             abort();
1798         }
1799     }
1800 }
1801
1802 #ifdef CONFIG_USER_ONLY
1803 int
1804 gdb_handlesig (CPUState *env, int sig)
1805 {
1806   GDBState *s;
1807   char buf[256];
1808   int n;
1809
1810   s = gdbserver_state;
1811   if (gdbserver_fd < 0 || s->fd < 0)
1812     return sig;
1813
1814   /* disable single step if it was enabled */
1815   cpu_single_step(env, 0);
1816   tb_flush(env);
1817
1818   if (sig != 0)
1819     {
1820       snprintf(buf, sizeof(buf), "S%02x", sig);
1821       put_packet(s, buf);
1822     }
1823   /* put_packet() might have detected that the peer terminated the 
1824      connection.  */
1825   if (s->fd < 0)
1826       return sig;
1827
1828   sig = 0;
1829   s->state = RS_IDLE;
1830   s->running_state = 0;
1831   while (s->running_state == 0) {
1832       n = read (s->fd, buf, 256);
1833       if (n > 0)
1834         {
1835           int i;
1836
1837           for (i = 0; i < n; i++)
1838             gdb_read_byte (s, buf[i]);
1839         }
1840       else if (n == 0 || errno != EAGAIN)
1841         {
1842           /* XXX: Connection closed.  Should probably wait for annother
1843              connection before continuing.  */
1844           return sig;
1845         }
1846   }
1847   sig = s->signal;
1848   s->signal = 0;
1849   return sig;
1850 }
1851
1852 /* Tell the remote gdb that the process has exited.  */
1853 void gdb_exit(CPUState *env, int code)
1854 {
1855   GDBState *s;
1856   char buf[4];
1857
1858   s = gdbserver_state;
1859   if (gdbserver_fd < 0 || s->fd < 0)
1860     return;
1861
1862   snprintf(buf, sizeof(buf), "W%02x", code);
1863   put_packet(s, buf);
1864 }
1865
1866
1867 static void gdb_accept(void)
1868 {
1869     GDBState *s;
1870     struct sockaddr_in sockaddr;
1871     socklen_t len;
1872     int val, fd;
1873
1874     for(;;) {
1875         len = sizeof(sockaddr);
1876         fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
1877         if (fd < 0 && errno != EINTR) {
1878             perror("accept");
1879             return;
1880         } else if (fd >= 0) {
1881             break;
1882         }
1883     }
1884
1885     /* set short latency */
1886     val = 1;
1887     setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
1888
1889     s = qemu_mallocz(sizeof(GDBState));
1890     if (!s) {
1891         errno = ENOMEM;
1892         perror("accept");
1893         return;
1894     }
1895
1896     memset (s, 0, sizeof (GDBState));
1897     s->c_cpu = first_cpu;
1898     s->g_cpu = first_cpu;
1899     s->fd = fd;
1900     gdb_has_xml = 0;
1901
1902     gdbserver_state = s;
1903
1904     fcntl(fd, F_SETFL, O_NONBLOCK);
1905 }
1906
1907 static int gdbserver_open(int port)
1908 {
1909     struct sockaddr_in sockaddr;
1910     int fd, val, ret;
1911
1912     fd = socket(PF_INET, SOCK_STREAM, 0);
1913     if (fd < 0) {
1914         perror("socket");
1915         return -1;
1916     }
1917
1918     /* allow fast reuse */
1919     val = 1;
1920     setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&val, sizeof(val));
1921
1922     sockaddr.sin_family = AF_INET;
1923     sockaddr.sin_port = htons(port);
1924     sockaddr.sin_addr.s_addr = 0;
1925     ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
1926     if (ret < 0) {
1927         perror("bind");
1928         return -1;
1929     }
1930     ret = listen(fd, 0);
1931     if (ret < 0) {
1932         perror("listen");
1933         return -1;
1934     }
1935     return fd;
1936 }
1937
1938 int gdbserver_start(int port)
1939 {
1940     gdbserver_fd = gdbserver_open(port);
1941     if (gdbserver_fd < 0)
1942         return -1;
1943     /* accept connections */
1944     gdb_accept();
1945     return 0;
1946 }
1947 #else
1948 static int gdb_chr_can_receive(void *opaque)
1949 {
1950   /* We can handle an arbitrarily large amount of data.
1951    Pick the maximum packet size, which is as good as anything.  */
1952   return MAX_PACKET_LENGTH;
1953 }
1954
1955 static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
1956 {
1957     int i;
1958
1959     for (i = 0; i < size; i++) {
1960         gdb_read_byte(gdbserver_state, buf[i]);
1961     }
1962 }
1963
1964 static void gdb_chr_event(void *opaque, int event)
1965 {
1966     switch (event) {
1967     case CHR_EVENT_RESET:
1968         vm_stop(EXCP_INTERRUPT);
1969         gdb_has_xml = 0;
1970         break;
1971     default:
1972         break;
1973     }
1974 }
1975
1976 int gdbserver_start(const char *port)
1977 {
1978     GDBState *s;
1979     char gdbstub_port_name[128];
1980     int port_num;
1981     char *p;
1982     CharDriverState *chr;
1983
1984     if (!port || !*port)
1985       return -1;
1986
1987     port_num = strtol(port, &p, 10);
1988     if (*p == 0) {
1989         /* A numeric value is interpreted as a port number.  */
1990         snprintf(gdbstub_port_name, sizeof(gdbstub_port_name),
1991                  "tcp::%d,nowait,nodelay,server", port_num);
1992         port = gdbstub_port_name;
1993     }
1994
1995     chr = qemu_chr_open("gdb", port);
1996     if (!chr)
1997         return -1;
1998
1999     s = qemu_mallocz(sizeof(GDBState));
2000     if (!s) {
2001         return -1;
2002     }
2003     s->c_cpu = first_cpu;
2004     s->g_cpu = first_cpu;
2005     s->chr = chr;
2006     gdbserver_state = s;
2007     qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
2008                           gdb_chr_event, NULL);
2009     qemu_add_vm_stop_handler(gdb_vm_stopped, NULL);
2010     return 0;
2011 }
2012 #endif