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