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