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