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