Statistics
| Branch: | Revision:

root / gdbstub.c @ 2dc766da

History | View | Annotate | Download (60 kB)

1
/*
2
 * gdb server stub
3
 *
4
 * Copyright (c) 2003-2005 Fabrice Bellard
5
 *
6
 * This library is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU Lesser General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2 of the License, or (at your option) any later version.
10
 *
11
 * This library is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with this library; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA
19
 */
20
#include "config.h"
21
#include "qemu-common.h"
22
#ifdef CONFIG_USER_ONLY
23
#include <stdlib.h>
24
#include <stdio.h>
25
#include <stdarg.h>
26
#include <string.h>
27
#include <errno.h>
28
#include <unistd.h>
29
#include <fcntl.h>
30

    
31
#include "qemu.h"
32
#else
33
#include "monitor.h"
34
#include "qemu-char.h"
35
#include "sysemu.h"
36
#include "gdbstub.h"
37
#endif
38

    
39
#define MAX_PACKET_LENGTH 4096
40

    
41
#include "qemu_socket.h"
42
#include "kvm.h"
43

    
44

    
45
enum {
46
    GDB_SIGNAL_0 = 0,
47
    GDB_SIGNAL_INT = 2,
48
    GDB_SIGNAL_TRAP = 5,
49
    GDB_SIGNAL_UNKNOWN = 143
50
};
51

    
52
#ifdef CONFIG_USER_ONLY
53

    
54
/* Map target signal numbers to GDB protocol signal numbers and vice
55
 * versa.  For user emulation's currently supported systems, we can
56
 * assume most signals are defined.
57
 */
58

    
59
static int gdb_signal_table[] = {
60
    0,
61
    TARGET_SIGHUP,
62
    TARGET_SIGINT,
63
    TARGET_SIGQUIT,
64
    TARGET_SIGILL,
65
    TARGET_SIGTRAP,
66
    TARGET_SIGABRT,
67
    -1, /* SIGEMT */
68
    TARGET_SIGFPE,
69
    TARGET_SIGKILL,
70
    TARGET_SIGBUS,
71
    TARGET_SIGSEGV,
72
    TARGET_SIGSYS,
73
    TARGET_SIGPIPE,
74
    TARGET_SIGALRM,
75
    TARGET_SIGTERM,
76
    TARGET_SIGURG,
77
    TARGET_SIGSTOP,
78
    TARGET_SIGTSTP,
79
    TARGET_SIGCONT,
80
    TARGET_SIGCHLD,
81
    TARGET_SIGTTIN,
82
    TARGET_SIGTTOU,
83
    TARGET_SIGIO,
84
    TARGET_SIGXCPU,
85
    TARGET_SIGXFSZ,
86
    TARGET_SIGVTALRM,
87
    TARGET_SIGPROF,
88
    TARGET_SIGWINCH,
89
    -1, /* SIGLOST */
90
    TARGET_SIGUSR1,
91
    TARGET_SIGUSR2,
92
#ifdef TARGET_SIGPWR
93
    TARGET_SIGPWR,
94
#else
95
    -1,
96
#endif
97
    -1, /* SIGPOLL */
98
    -1,
99
    -1,
100
    -1,
101
    -1,
102
    -1,
103
    -1,
104
    -1,
105
    -1,
106
    -1,
107
    -1,
108
    -1,
109
#ifdef __SIGRTMIN
110
    __SIGRTMIN + 1,
111
    __SIGRTMIN + 2,
112
    __SIGRTMIN + 3,
113
    __SIGRTMIN + 4,
114
    __SIGRTMIN + 5,
115
    __SIGRTMIN + 6,
116
    __SIGRTMIN + 7,
117
    __SIGRTMIN + 8,
118
    __SIGRTMIN + 9,
119
    __SIGRTMIN + 10,
120
    __SIGRTMIN + 11,
121
    __SIGRTMIN + 12,
122
    __SIGRTMIN + 13,
123
    __SIGRTMIN + 14,
124
    __SIGRTMIN + 15,
125
    __SIGRTMIN + 16,
126
    __SIGRTMIN + 17,
127
    __SIGRTMIN + 18,
128
    __SIGRTMIN + 19,
129
    __SIGRTMIN + 20,
130
    __SIGRTMIN + 21,
131
    __SIGRTMIN + 22,
132
    __SIGRTMIN + 23,
133
    __SIGRTMIN + 24,
134
    __SIGRTMIN + 25,
135
    __SIGRTMIN + 26,
136
    __SIGRTMIN + 27,
137
    __SIGRTMIN + 28,
138
    __SIGRTMIN + 29,
139
    __SIGRTMIN + 30,
140
    __SIGRTMIN + 31,
141
    -1, /* SIGCANCEL */
142
    __SIGRTMIN,
143
    __SIGRTMIN + 32,
144
    __SIGRTMIN + 33,
145
    __SIGRTMIN + 34,
146
    __SIGRTMIN + 35,
147
    __SIGRTMIN + 36,
148
    __SIGRTMIN + 37,
149
    __SIGRTMIN + 38,
150
    __SIGRTMIN + 39,
151
    __SIGRTMIN + 40,
152
    __SIGRTMIN + 41,
153
    __SIGRTMIN + 42,
154
    __SIGRTMIN + 43,
155
    __SIGRTMIN + 44,
156
    __SIGRTMIN + 45,
157
    __SIGRTMIN + 46,
158
    __SIGRTMIN + 47,
159
    __SIGRTMIN + 48,
160
    __SIGRTMIN + 49,
161
    __SIGRTMIN + 50,
162
    __SIGRTMIN + 51,
163
    __SIGRTMIN + 52,
164
    __SIGRTMIN + 53,
165
    __SIGRTMIN + 54,
166
    __SIGRTMIN + 55,
167
    __SIGRTMIN + 56,
168
    __SIGRTMIN + 57,
169
    __SIGRTMIN + 58,
170
    __SIGRTMIN + 59,
171
    __SIGRTMIN + 60,
172
    __SIGRTMIN + 61,
173
    __SIGRTMIN + 62,
174
    __SIGRTMIN + 63,
175
    __SIGRTMIN + 64,
176
    __SIGRTMIN + 65,
177
    __SIGRTMIN + 66,
178
    __SIGRTMIN + 67,
179
    __SIGRTMIN + 68,
180
    __SIGRTMIN + 69,
181
    __SIGRTMIN + 70,
182
    __SIGRTMIN + 71,
183
    __SIGRTMIN + 72,
184
    __SIGRTMIN + 73,
185
    __SIGRTMIN + 74,
186
    __SIGRTMIN + 75,
187
    __SIGRTMIN + 76,
188
    __SIGRTMIN + 77,
189
    __SIGRTMIN + 78,
190
    __SIGRTMIN + 79,
191
    __SIGRTMIN + 80,
192
    __SIGRTMIN + 81,
193
    __SIGRTMIN + 82,
194
    __SIGRTMIN + 83,
195
    __SIGRTMIN + 84,
196
    __SIGRTMIN + 85,
197
    __SIGRTMIN + 86,
198
    __SIGRTMIN + 87,
199
    __SIGRTMIN + 88,
200
    __SIGRTMIN + 89,
201
    __SIGRTMIN + 90,
202
    __SIGRTMIN + 91,
203
    __SIGRTMIN + 92,
204
    __SIGRTMIN + 93,
205
    __SIGRTMIN + 94,
206
    __SIGRTMIN + 95,
207
    -1, /* SIGINFO */
208
    -1, /* UNKNOWN */
209
    -1, /* DEFAULT */
210
    -1,
211
    -1,
212
    -1,
213
    -1,
214
    -1,
215
    -1
216
#endif
217
};
218
#else
219
/* In system mode we only need SIGINT and SIGTRAP; other signals
220
   are not yet supported.  */
221

    
222
enum {
223
    TARGET_SIGINT = 2,
224
    TARGET_SIGTRAP = 5
225
};
226

    
227
static int gdb_signal_table[] = {
228
    -1,
229
    -1,
230
    TARGET_SIGINT,
231
    -1,
232
    -1,
233
    TARGET_SIGTRAP
234
};
235
#endif
236

    
237
#ifdef CONFIG_USER_ONLY
238
static int target_signal_to_gdb (int sig)
239
{
240
    int i;
241
    for (i = 0; i < ARRAY_SIZE (gdb_signal_table); i++)
242
        if (gdb_signal_table[i] == sig)
243
            return i;
244
    return GDB_SIGNAL_UNKNOWN;
245
}
246
#endif
247

    
248
static int gdb_signal_to_target (int sig)
249
{
250
    if (sig < ARRAY_SIZE (gdb_signal_table))
251
        return gdb_signal_table[sig];
252
    else
253
        return -1;
254
}
255

    
256
//#define DEBUG_GDB
257

    
258
typedef struct GDBRegisterState {
259
    int base_reg;
260
    int num_regs;
261
    gdb_reg_cb get_reg;
262
    gdb_reg_cb set_reg;
263
    const char *xml;
264
    struct GDBRegisterState *next;
265
} GDBRegisterState;
266

    
267
enum RSState {
268
    RS_INACTIVE,
269
    RS_IDLE,
270
    RS_GETLINE,
271
    RS_CHKSUM1,
272
    RS_CHKSUM2,
273
    RS_SYSCALL,
274
};
275
typedef struct GDBState {
276
    CPUState *c_cpu; /* current CPU for step/continue ops */
277
    CPUState *g_cpu; /* current CPU for other ops */
278
    CPUState *query_cpu; /* for q{f|s}ThreadInfo */
279
    enum RSState state; /* parsing state */
280
    char line_buf[MAX_PACKET_LENGTH];
281
    int line_buf_index;
282
    int line_csum;
283
    uint8_t last_packet[MAX_PACKET_LENGTH + 4];
284
    int last_packet_len;
285
    int signal;
286
#ifdef CONFIG_USER_ONLY
287
    int fd;
288
    int running_state;
289
#else
290
    CharDriverState *chr;
291
    CharDriverState *mon_chr;
292
#endif
293
} GDBState;
294

    
295
/* By default use no IRQs and no timers while single stepping so as to
296
 * make single stepping like an ICE HW step.
297
 */
298
static int sstep_flags = SSTEP_ENABLE|SSTEP_NOIRQ|SSTEP_NOTIMER;
299

    
300
static GDBState *gdbserver_state;
301

    
302
/* This is an ugly hack to cope with both new and old gdb.
303
   If gdb sends qXfer:features:read then assume we're talking to a newish
304
   gdb that understands target descriptions.  */
305
static int gdb_has_xml;
306

    
307
#ifdef CONFIG_USER_ONLY
308
/* XXX: This is not thread safe.  Do we care?  */
309
static int gdbserver_fd = -1;
310

    
311
static int get_char(GDBState *s)
312
{
313
    uint8_t ch;
314
    int ret;
315

    
316
    for(;;) {
317
        ret = recv(s->fd, &ch, 1, 0);
318
        if (ret < 0) {
319
            if (errno == ECONNRESET)
320
                s->fd = -1;
321
            if (errno != EINTR && errno != EAGAIN)
322
                return -1;
323
        } else if (ret == 0) {
324
            close(s->fd);
325
            s->fd = -1;
326
            return -1;
327
        } else {
328
            break;
329
        }
330
    }
331
    return ch;
332
}
333
#endif
334

    
335
static gdb_syscall_complete_cb gdb_current_syscall_cb;
336

    
337
enum {
338
    GDB_SYS_UNKNOWN,
339
    GDB_SYS_ENABLED,
340
    GDB_SYS_DISABLED,
341
} gdb_syscall_mode;
342

    
343
/* If gdb is connected when the first semihosting syscall occurs then use
344
   remote gdb syscalls.  Otherwise use native file IO.  */
345
int use_gdb_syscalls(void)
346
{
347
    if (gdb_syscall_mode == GDB_SYS_UNKNOWN) {
348
        gdb_syscall_mode = (gdbserver_state ? GDB_SYS_ENABLED
349
                                            : GDB_SYS_DISABLED);
350
    }
351
    return gdb_syscall_mode == GDB_SYS_ENABLED;
352
}
353

    
354
/* Resume execution.  */
355
static inline void gdb_continue(GDBState *s)
356
{
357
#ifdef CONFIG_USER_ONLY
358
    s->running_state = 1;
359
#else
360
    vm_start();
361
#endif
362
}
363

    
364
static void put_buffer(GDBState *s, const uint8_t *buf, int len)
365
{
366
#ifdef CONFIG_USER_ONLY
367
    int ret;
368

    
369
    while (len > 0) {
370
        ret = send(s->fd, buf, len, 0);
371
        if (ret < 0) {
372
            if (errno != EINTR && errno != EAGAIN)
373
                return;
374
        } else {
375
            buf += ret;
376
            len -= ret;
377
        }
378
    }
379
#else
380
    qemu_chr_write(s->chr, buf, len);
381
#endif
382
}
383

    
384
static inline int fromhex(int v)
385
{
386
    if (v >= '0' && v <= '9')
387
        return v - '0';
388
    else if (v >= 'A' && v <= 'F')
389
        return v - 'A' + 10;
390
    else if (v >= 'a' && v <= 'f')
391
        return v - 'a' + 10;
392
    else
393
        return 0;
394
}
395

    
396
static inline int tohex(int v)
397
{
398
    if (v < 10)
399
        return v + '0';
400
    else
401
        return v - 10 + 'a';
402
}
403

    
404
static void memtohex(char *buf, const uint8_t *mem, int len)
405
{
406
    int i, c;
407
    char *q;
408
    q = buf;
409
    for(i = 0; i < len; i++) {
410
        c = mem[i];
411
        *q++ = tohex(c >> 4);
412
        *q++ = tohex(c & 0xf);
413
    }
414
    *q = '\0';
415
}
416

    
417
static void hextomem(uint8_t *mem, const char *buf, int len)
418
{
419
    int i;
420

    
421
    for(i = 0; i < len; i++) {
422
        mem[i] = (fromhex(buf[0]) << 4) | fromhex(buf[1]);
423
        buf += 2;
424
    }
425
}
426

    
427
/* return -1 if error, 0 if OK */
428
static int put_packet_binary(GDBState *s, const char *buf, int len)
429
{
430
    int csum, i;
431
    uint8_t *p;
432

    
433
    for(;;) {
434
        p = s->last_packet;
435
        *(p++) = '$';
436
        memcpy(p, buf, len);
437
        p += len;
438
        csum = 0;
439
        for(i = 0; i < len; i++) {
440
            csum += buf[i];
441
        }
442
        *(p++) = '#';
443
        *(p++) = tohex((csum >> 4) & 0xf);
444
        *(p++) = tohex((csum) & 0xf);
445

    
446
        s->last_packet_len = p - s->last_packet;
447
        put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
448

    
449
#ifdef CONFIG_USER_ONLY
450
        i = get_char(s);
451
        if (i < 0)
452
            return -1;
453
        if (i == '+')
454
            break;
455
#else
456
        break;
457
#endif
458
    }
459
    return 0;
460
}
461

    
462
/* return -1 if error, 0 if OK */
463
static int put_packet(GDBState *s, const char *buf)
464
{
465
#ifdef DEBUG_GDB
466
    printf("reply='%s'\n", buf);
467
#endif
468

    
469
    return put_packet_binary(s, buf, strlen(buf));
470
}
471

    
472
/* The GDB remote protocol transfers values in target byte order.  This means
473
   we can use the raw memory access routines to access the value buffer.
474
   Conveniently, these also handle the case where the buffer is mis-aligned.
475
 */
476
#define GET_REG8(val) do { \
477
    stb_p(mem_buf, val); \
478
    return 1; \
479
    } while(0)
480
#define GET_REG16(val) do { \
481
    stw_p(mem_buf, val); \
482
    return 2; \
483
    } while(0)
484
#define GET_REG32(val) do { \
485
    stl_p(mem_buf, val); \
486
    return 4; \
487
    } while(0)
488
#define GET_REG64(val) do { \
489
    stq_p(mem_buf, val); \
490
    return 8; \
491
    } while(0)
492

    
493
#if TARGET_LONG_BITS == 64
494
#define GET_REGL(val) GET_REG64(val)
495
#define ldtul_p(addr) ldq_p(addr)
496
#else
497
#define GET_REGL(val) GET_REG32(val)
498
#define ldtul_p(addr) ldl_p(addr)
499
#endif
500

    
501
#if defined(TARGET_I386)
502

    
503
#ifdef TARGET_X86_64
504
static const int gpr_map[16] = {
505
    R_EAX, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI, R_EBP, R_ESP,
506
    8, 9, 10, 11, 12, 13, 14, 15
507
};
508
#else
509
static const int gpr_map[8] = {0, 1, 2, 3, 4, 5, 6, 7};
510
#endif
511

    
512
#define NUM_CORE_REGS (CPU_NB_REGS * 2 + 25)
513

    
514
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
515
{
516
    if (n < CPU_NB_REGS) {
517
        GET_REGL(env->regs[gpr_map[n]]);
518
    } else if (n >= CPU_NB_REGS + 8 && n < CPU_NB_REGS + 16) {
519
        /* FIXME: byteswap float values.  */
520
#ifdef USE_X86LDOUBLE
521
        memcpy(mem_buf, &env->fpregs[n - (CPU_NB_REGS + 8)], 10);
522
#else
523
        memset(mem_buf, 0, 10);
524
#endif
525
        return 10;
526
    } else if (n >= CPU_NB_REGS + 24) {
527
        n -= CPU_NB_REGS + 24;
528
        if (n < CPU_NB_REGS) {
529
            stq_p(mem_buf, env->xmm_regs[n].XMM_Q(0));
530
            stq_p(mem_buf + 8, env->xmm_regs[n].XMM_Q(1));
531
            return 16;
532
        } else if (n == CPU_NB_REGS) {
533
            GET_REG32(env->mxcsr);
534
        } 
535
    } else {
536
        n -= CPU_NB_REGS;
537
        switch (n) {
538
        case 0: GET_REGL(env->eip);
539
        case 1: GET_REG32(env->eflags);
540
        case 2: GET_REG32(env->segs[R_CS].selector);
541
        case 3: GET_REG32(env->segs[R_SS].selector);
542
        case 4: GET_REG32(env->segs[R_DS].selector);
543
        case 5: GET_REG32(env->segs[R_ES].selector);
544
        case 6: GET_REG32(env->segs[R_FS].selector);
545
        case 7: GET_REG32(env->segs[R_GS].selector);
546
        /* 8...15 x87 regs.  */
547
        case 16: GET_REG32(env->fpuc);
548
        case 17: GET_REG32((env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11);
549
        case 18: GET_REG32(0); /* ftag */
550
        case 19: GET_REG32(0); /* fiseg */
551
        case 20: GET_REG32(0); /* fioff */
552
        case 21: GET_REG32(0); /* foseg */
553
        case 22: GET_REG32(0); /* fooff */
554
        case 23: GET_REG32(0); /* fop */
555
        /* 24+ xmm regs.  */
556
        }
557
    }
558
    return 0;
559
}
560

    
561
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int i)
562
{
563
    uint32_t tmp;
564

    
565
    if (i < CPU_NB_REGS) {
566
        env->regs[gpr_map[i]] = ldtul_p(mem_buf);
567
        return sizeof(target_ulong);
568
    } else if (i >= CPU_NB_REGS + 8 && i < CPU_NB_REGS + 16) {
569
        i -= CPU_NB_REGS + 8;
570
#ifdef USE_X86LDOUBLE
571
        memcpy(&env->fpregs[i], mem_buf, 10);
572
#endif
573
        return 10;
574
    } else if (i >= CPU_NB_REGS + 24) {
575
        i -= CPU_NB_REGS + 24;
576
        if (i < CPU_NB_REGS) {
577
            env->xmm_regs[i].XMM_Q(0) = ldq_p(mem_buf);
578
            env->xmm_regs[i].XMM_Q(1) = ldq_p(mem_buf + 8);
579
            return 16;
580
        } else if (i == CPU_NB_REGS) {
581
            env->mxcsr = ldl_p(mem_buf);
582
            return 4;
583
        }
584
    } else {
585
        i -= CPU_NB_REGS;
586
        switch (i) {
587
        case 0: env->eip = ldtul_p(mem_buf); return sizeof(target_ulong);
588
        case 1: env->eflags = ldl_p(mem_buf); return 4;
589
#if defined(CONFIG_USER_ONLY)
590
#define LOAD_SEG(index, sreg)\
591
            tmp = ldl_p(mem_buf);\
592
            if (tmp != env->segs[sreg].selector)\
593
                cpu_x86_load_seg(env, sreg, tmp);
594
#else
595
/* FIXME: Honor segment registers.  Needs to avoid raising an exception
596
   when the selector is invalid.  */
597
#define LOAD_SEG(index, sreg) do {} while(0)
598
#endif
599
        case 2: LOAD_SEG(10, R_CS); return 4;
600
        case 3: LOAD_SEG(11, R_SS); return 4;
601
        case 4: LOAD_SEG(12, R_DS); return 4;
602
        case 5: LOAD_SEG(13, R_ES); return 4;
603
        case 6: LOAD_SEG(14, R_FS); return 4;
604
        case 7: LOAD_SEG(15, R_GS); return 4;
605
        /* 8...15 x87 regs.  */
606
        case 16: env->fpuc = ldl_p(mem_buf); return 4;
607
        case 17:
608
                 tmp = ldl_p(mem_buf);
609
                 env->fpstt = (tmp >> 11) & 7;
610
                 env->fpus = tmp & ~0x3800;
611
                 return 4;
612
        case 18: /* ftag */ return 4;
613
        case 19: /* fiseg */ return 4;
614
        case 20: /* fioff */ return 4;
615
        case 21: /* foseg */ return 4;
616
        case 22: /* fooff */ return 4;
617
        case 23: /* fop */ return 4;
618
        /* 24+ xmm regs.  */
619
        }
620
    }
621
    /* Unrecognised register.  */
622
    return 0;
623
}
624

    
625
#elif defined (TARGET_PPC)
626

    
627
/* Old gdb always expects FP registers.  Newer (xml-aware) gdb only
628
   expects whatever the target description contains.  Due to a
629
   historical mishap the FP registers appear in between core integer
630
   regs and PC, MSR, CR, and so forth.  We hack round this by giving the
631
   FP regs zero size when talking to a newer gdb.  */
632
#define NUM_CORE_REGS 71
633
#if defined (TARGET_PPC64)
634
#define GDB_CORE_XML "power64-core.xml"
635
#else
636
#define GDB_CORE_XML "power-core.xml"
637
#endif
638

    
639
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
640
{
641
    if (n < 32) {
642
        /* gprs */
643
        GET_REGL(env->gpr[n]);
644
    } else if (n < 64) {
645
        /* fprs */
646
        if (gdb_has_xml)
647
            return 0;
648
        stfq_p(mem_buf, env->fpr[n-32]);
649
        return 8;
650
    } else {
651
        switch (n) {
652
        case 64: GET_REGL(env->nip);
653
        case 65: GET_REGL(env->msr);
654
        case 66:
655
            {
656
                uint32_t cr = 0;
657
                int i;
658
                for (i = 0; i < 8; i++)
659
                    cr |= env->crf[i] << (32 - ((i + 1) * 4));
660
                GET_REG32(cr);
661
            }
662
        case 67: GET_REGL(env->lr);
663
        case 68: GET_REGL(env->ctr);
664
        case 69: GET_REGL(env->xer);
665
        case 70:
666
            {
667
                if (gdb_has_xml)
668
                    return 0;
669
                GET_REG32(0); /* fpscr */
670
            }
671
        }
672
    }
673
    return 0;
674
}
675

    
676
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
677
{
678
    if (n < 32) {
679
        /* gprs */
680
        env->gpr[n] = ldtul_p(mem_buf);
681
        return sizeof(target_ulong);
682
    } else if (n < 64) {
683
        /* fprs */
684
        if (gdb_has_xml)
685
            return 0;
686
        env->fpr[n-32] = ldfq_p(mem_buf);
687
        return 8;
688
    } else {
689
        switch (n) {
690
        case 64:
691
            env->nip = ldtul_p(mem_buf);
692
            return sizeof(target_ulong);
693
        case 65:
694
            ppc_store_msr(env, ldtul_p(mem_buf));
695
            return sizeof(target_ulong);
696
        case 66:
697
            {
698
                uint32_t cr = ldl_p(mem_buf);
699
                int i;
700
                for (i = 0; i < 8; i++)
701
                    env->crf[i] = (cr >> (32 - ((i + 1) * 4))) & 0xF;
702
                return 4;
703
            }
704
        case 67:
705
            env->lr = ldtul_p(mem_buf);
706
            return sizeof(target_ulong);
707
        case 68:
708
            env->ctr = ldtul_p(mem_buf);
709
            return sizeof(target_ulong);
710
        case 69:
711
            env->xer = ldtul_p(mem_buf);
712
            return sizeof(target_ulong);
713
        case 70:
714
            /* fpscr */
715
            if (gdb_has_xml)
716
                return 0;
717
            return 4;
718
        }
719
    }
720
    return 0;
721
}
722

    
723
#elif defined (TARGET_SPARC)
724

    
725
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
726
#define NUM_CORE_REGS 86
727
#else
728
#define NUM_CORE_REGS 72
729
#endif
730

    
731
#ifdef TARGET_ABI32
732
#define GET_REGA(val) GET_REG32(val)
733
#else
734
#define GET_REGA(val) GET_REGL(val)
735
#endif
736

    
737
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
738
{
739
    if (n < 8) {
740
        /* g0..g7 */
741
        GET_REGA(env->gregs[n]);
742
    }
743
    if (n < 32) {
744
        /* register window */
745
        GET_REGA(env->regwptr[n - 8]);
746
    }
747
#if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
748
    if (n < 64) {
749
        /* fprs */
750
        GET_REG32(*((uint32_t *)&env->fpr[n - 32]));
751
    }
752
    /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
753
    switch (n) {
754
    case 64: GET_REGA(env->y);
755
    case 65: GET_REGA(GET_PSR(env));
756
    case 66: GET_REGA(env->wim);
757
    case 67: GET_REGA(env->tbr);
758
    case 68: GET_REGA(env->pc);
759
    case 69: GET_REGA(env->npc);
760
    case 70: GET_REGA(env->fsr);
761
    case 71: GET_REGA(0); /* csr */
762
    default: GET_REGA(0);
763
    }
764
#else
765
    if (n < 64) {
766
        /* f0-f31 */
767
        GET_REG32(*((uint32_t *)&env->fpr[n - 32]));
768
    }
769
    if (n < 80) {
770
        /* f32-f62 (double width, even numbers only) */
771
        uint64_t val;
772

    
773
        val = (uint64_t)*((uint32_t *)&env->fpr[(n - 64) * 2 + 32]) << 32;
774
        val |= *((uint32_t *)&env->fpr[(n - 64) * 2 + 33]);
775
        GET_REG64(val);
776
    }
777
    switch (n) {
778
    case 80: GET_REGL(env->pc);
779
    case 81: GET_REGL(env->npc);
780
    case 82: GET_REGL(((uint64_t)GET_CCR(env) << 32) |
781
                           ((env->asi & 0xff) << 24) |
782
                           ((env->pstate & 0xfff) << 8) |
783
                           GET_CWP64(env));
784
    case 83: GET_REGL(env->fsr);
785
    case 84: GET_REGL(env->fprs);
786
    case 85: GET_REGL(env->y);
787
    }
788
#endif
789
    return 0;
790
}
791

    
792
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
793
{
794
#if defined(TARGET_ABI32)
795
    abi_ulong tmp;
796

    
797
    tmp = ldl_p(mem_buf);
798
#else
799
    target_ulong tmp;
800

    
801
    tmp = ldtul_p(mem_buf);
802
#endif
803

    
804
    if (n < 8) {
805
        /* g0..g7 */
806
        env->gregs[n] = tmp;
807
    } else if (n < 32) {
808
        /* register window */
809
        env->regwptr[n - 8] = tmp;
810
    }
811
#if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
812
    else if (n < 64) {
813
        /* fprs */
814
        *((uint32_t *)&env->fpr[n - 32]) = tmp;
815
    } else {
816
        /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
817
        switch (n) {
818
        case 64: env->y = tmp; break;
819
        case 65: PUT_PSR(env, tmp); break;
820
        case 66: env->wim = tmp; break;
821
        case 67: env->tbr = tmp; break;
822
        case 68: env->pc = tmp; break;
823
        case 69: env->npc = tmp; break;
824
        case 70: env->fsr = tmp; break;
825
        default: return 0;
826
        }
827
    }
828
    return 4;
829
#else
830
    else if (n < 64) {
831
        /* f0-f31 */
832
        env->fpr[n] = ldfl_p(mem_buf);
833
        return 4;
834
    } else if (n < 80) {
835
        /* f32-f62 (double width, even numbers only) */
836
        *((uint32_t *)&env->fpr[(n - 64) * 2 + 32]) = tmp >> 32;
837
        *((uint32_t *)&env->fpr[(n - 64) * 2 + 33]) = tmp;
838
    } else {
839
        switch (n) {
840
        case 80: env->pc = tmp; break;
841
        case 81: env->npc = tmp; break;
842
        case 82:
843
            PUT_CCR(env, tmp >> 32);
844
            env->asi = (tmp >> 24) & 0xff;
845
            env->pstate = (tmp >> 8) & 0xfff;
846
            PUT_CWP64(env, tmp & 0xff);
847
            break;
848
        case 83: env->fsr = tmp; break;
849
        case 84: env->fprs = tmp; break;
850
        case 85: env->y = tmp; break;
851
        default: return 0;
852
        }
853
    }
854
    return 8;
855
#endif
856
}
857
#elif defined (TARGET_ARM)
858

    
859
/* Old gdb always expect FPA registers.  Newer (xml-aware) gdb only expect
860
   whatever the target description contains.  Due to a historical mishap
861
   the FPA registers appear in between core integer regs and the CPSR.
862
   We hack round this by giving the FPA regs zero size when talking to a
863
   newer gdb.  */
864
#define NUM_CORE_REGS 26
865
#define GDB_CORE_XML "arm-core.xml"
866

    
867
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
868
{
869
    if (n < 16) {
870
        /* Core integer register.  */
871
        GET_REG32(env->regs[n]);
872
    }
873
    if (n < 24) {
874
        /* FPA registers.  */
875
        if (gdb_has_xml)
876
            return 0;
877
        memset(mem_buf, 0, 12);
878
        return 12;
879
    }
880
    switch (n) {
881
    case 24:
882
        /* FPA status register.  */
883
        if (gdb_has_xml)
884
            return 0;
885
        GET_REG32(0);
886
    case 25:
887
        /* CPSR */
888
        GET_REG32(cpsr_read(env));
889
    }
890
    /* Unknown register.  */
891
    return 0;
892
}
893

    
894
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
895
{
896
    uint32_t tmp;
897

    
898
    tmp = ldl_p(mem_buf);
899

    
900
    /* Mask out low bit of PC to workaround gdb bugs.  This will probably
901
       cause problems if we ever implement the Jazelle DBX extensions.  */
902
    if (n == 15)
903
        tmp &= ~1;
904

    
905
    if (n < 16) {
906
        /* Core integer register.  */
907
        env->regs[n] = tmp;
908
        return 4;
909
    }
910
    if (n < 24) { /* 16-23 */
911
        /* FPA registers (ignored).  */
912
        if (gdb_has_xml)
913
            return 0;
914
        return 12;
915
    }
916
    switch (n) {
917
    case 24:
918
        /* FPA status register (ignored).  */
919
        if (gdb_has_xml)
920
            return 0;
921
        return 4;
922
    case 25:
923
        /* CPSR */
924
        cpsr_write (env, tmp, 0xffffffff);
925
        return 4;
926
    }
927
    /* Unknown register.  */
928
    return 0;
929
}
930

    
931
#elif defined (TARGET_M68K)
932

    
933
#define NUM_CORE_REGS 18
934

    
935
#define GDB_CORE_XML "cf-core.xml"
936

    
937
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
938
{
939
    if (n < 8) {
940
        /* D0-D7 */
941
        GET_REG32(env->dregs[n]);
942
    } else if (n < 16) {
943
        /* A0-A7 */
944
        GET_REG32(env->aregs[n - 8]);
945
    } else {
946
        switch (n) {
947
        case 16: GET_REG32(env->sr);
948
        case 17: GET_REG32(env->pc);
949
        }
950
    }
951
    /* FP registers not included here because they vary between
952
       ColdFire and m68k.  Use XML bits for these.  */
953
    return 0;
954
}
955

    
956
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
957
{
958
    uint32_t tmp;
959

    
960
    tmp = ldl_p(mem_buf);
961

    
962
    if (n < 8) {
963
        /* D0-D7 */
964
        env->dregs[n] = tmp;
965
    } else if (n < 8) {
966
        /* A0-A7 */
967
        env->aregs[n - 8] = tmp;
968
    } else {
969
        switch (n) {
970
        case 16: env->sr = tmp; break;
971
        case 17: env->pc = tmp; break;
972
        default: return 0;
973
        }
974
    }
975
    return 4;
976
}
977
#elif defined (TARGET_MIPS)
978

    
979
#define NUM_CORE_REGS 73
980

    
981
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
982
{
983
    if (n < 32) {
984
        GET_REGL(env->active_tc.gpr[n]);
985
    }
986
    if (env->CP0_Config1 & (1 << CP0C1_FP)) {
987
        if (n >= 38 && n < 70) {
988
            if (env->CP0_Status & (1 << CP0St_FR))
989
                GET_REGL(env->active_fpu.fpr[n - 38].d);
990
            else
991
                GET_REGL(env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX]);
992
        }
993
        switch (n) {
994
        case 70: GET_REGL((int32_t)env->active_fpu.fcr31);
995
        case 71: GET_REGL((int32_t)env->active_fpu.fcr0);
996
        }
997
    }
998
    switch (n) {
999
    case 32: GET_REGL((int32_t)env->CP0_Status);
1000
    case 33: GET_REGL(env->active_tc.LO[0]);
1001
    case 34: GET_REGL(env->active_tc.HI[0]);
1002
    case 35: GET_REGL(env->CP0_BadVAddr);
1003
    case 36: GET_REGL((int32_t)env->CP0_Cause);
1004
    case 37: GET_REGL(env->active_tc.PC);
1005
    case 72: GET_REGL(0); /* fp */
1006
    case 89: GET_REGL((int32_t)env->CP0_PRid);
1007
    }
1008
    if (n >= 73 && n <= 88) {
1009
        /* 16 embedded regs.  */
1010
        GET_REGL(0);
1011
    }
1012

    
1013
    return 0;
1014
}
1015

    
1016
/* convert MIPS rounding mode in FCR31 to IEEE library */
1017
static unsigned int ieee_rm[] =
1018
  {
1019
    float_round_nearest_even,
1020
    float_round_to_zero,
1021
    float_round_up,
1022
    float_round_down
1023
  };
1024
#define RESTORE_ROUNDING_MODE \
1025
    set_float_rounding_mode(ieee_rm[env->active_fpu.fcr31 & 3], &env->active_fpu.fp_status)
1026

    
1027
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1028
{
1029
    target_ulong tmp;
1030

    
1031
    tmp = ldtul_p(mem_buf);
1032

    
1033
    if (n < 32) {
1034
        env->active_tc.gpr[n] = tmp;
1035
        return sizeof(target_ulong);
1036
    }
1037
    if (env->CP0_Config1 & (1 << CP0C1_FP)
1038
            && n >= 38 && n < 73) {
1039
        if (n < 70) {
1040
            if (env->CP0_Status & (1 << CP0St_FR))
1041
              env->active_fpu.fpr[n - 38].d = tmp;
1042
            else
1043
              env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX] = tmp;
1044
        }
1045
        switch (n) {
1046
        case 70:
1047
            env->active_fpu.fcr31 = tmp & 0xFF83FFFF;
1048
            /* set rounding mode */
1049
            RESTORE_ROUNDING_MODE;
1050
#ifndef CONFIG_SOFTFLOAT
1051
            /* no floating point exception for native float */
1052
            SET_FP_ENABLE(env->active_fpu.fcr31, 0);
1053
#endif
1054
            break;
1055
        case 71: env->active_fpu.fcr0 = tmp; break;
1056
        }
1057
        return sizeof(target_ulong);
1058
    }
1059
    switch (n) {
1060
    case 32: env->CP0_Status = tmp; break;
1061
    case 33: env->active_tc.LO[0] = tmp; break;
1062
    case 34: env->active_tc.HI[0] = tmp; break;
1063
    case 35: env->CP0_BadVAddr = tmp; break;
1064
    case 36: env->CP0_Cause = tmp; break;
1065
    case 37: env->active_tc.PC = tmp; break;
1066
    case 72: /* fp, ignored */ break;
1067
    default: 
1068
        if (n > 89)
1069
            return 0;
1070
        /* Other registers are readonly.  Ignore writes.  */
1071
        break;
1072
    }
1073

    
1074
    return sizeof(target_ulong);
1075
}
1076
#elif defined (TARGET_SH4)
1077

    
1078
/* Hint: Use "set architecture sh4" in GDB to see fpu registers */
1079
/* FIXME: We should use XML for this.  */
1080

    
1081
#define NUM_CORE_REGS 59
1082

    
1083
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1084
{
1085
    if (n < 8) {
1086
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1087
            GET_REGL(env->gregs[n + 16]);
1088
        } else {
1089
            GET_REGL(env->gregs[n]);
1090
        }
1091
    } else if (n < 16) {
1092
        GET_REGL(env->gregs[n - 8]);
1093
    } else if (n >= 25 && n < 41) {
1094
        GET_REGL(env->fregs[(n - 25) + ((env->fpscr & FPSCR_FR) ? 16 : 0)]);
1095
    } else if (n >= 43 && n < 51) {
1096
        GET_REGL(env->gregs[n - 43]);
1097
    } else if (n >= 51 && n < 59) {
1098
        GET_REGL(env->gregs[n - (51 - 16)]);
1099
    }
1100
    switch (n) {
1101
    case 16: GET_REGL(env->pc);
1102
    case 17: GET_REGL(env->pr);
1103
    case 18: GET_REGL(env->gbr);
1104
    case 19: GET_REGL(env->vbr);
1105
    case 20: GET_REGL(env->mach);
1106
    case 21: GET_REGL(env->macl);
1107
    case 22: GET_REGL(env->sr);
1108
    case 23: GET_REGL(env->fpul);
1109
    case 24: GET_REGL(env->fpscr);
1110
    case 41: GET_REGL(env->ssr);
1111
    case 42: GET_REGL(env->spc);
1112
    }
1113

    
1114
    return 0;
1115
}
1116

    
1117
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1118
{
1119
    uint32_t tmp;
1120

    
1121
    tmp = ldl_p(mem_buf);
1122

    
1123
    if (n < 8) {
1124
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1125
            env->gregs[n + 16] = tmp;
1126
        } else {
1127
            env->gregs[n] = tmp;
1128
        }
1129
        return 4;
1130
    } else if (n < 16) {
1131
        env->gregs[n - 8] = tmp;
1132
        return 4;
1133
    } else if (n >= 25 && n < 41) {
1134
        env->fregs[(n - 25) + ((env->fpscr & FPSCR_FR) ? 16 : 0)] = tmp;
1135
    } else if (n >= 43 && n < 51) {
1136
        env->gregs[n - 43] = tmp;
1137
        return 4;
1138
    } else if (n >= 51 && n < 59) {
1139
        env->gregs[n - (51 - 16)] = tmp;
1140
        return 4;
1141
    }
1142
    switch (n) {
1143
    case 16: env->pc = tmp;
1144
    case 17: env->pr = tmp;
1145
    case 18: env->gbr = tmp;
1146
    case 19: env->vbr = tmp;
1147
    case 20: env->mach = tmp;
1148
    case 21: env->macl = tmp;
1149
    case 22: env->sr = tmp;
1150
    case 23: env->fpul = tmp;
1151
    case 24: env->fpscr = tmp;
1152
    case 41: env->ssr = tmp;
1153
    case 42: env->spc = tmp;
1154
    default: return 0;
1155
    }
1156

    
1157
    return 4;
1158
}
1159
#elif defined (TARGET_CRIS)
1160

    
1161
#define NUM_CORE_REGS 49
1162

    
1163
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1164
{
1165
    uint8_t srs;
1166

    
1167
    srs = env->pregs[PR_SRS];
1168
    if (n < 16) {
1169
        GET_REG32(env->regs[n]);
1170
    }
1171

    
1172
    if (n >= 21 && n < 32) {
1173
        GET_REG32(env->pregs[n - 16]);
1174
    }
1175
    if (n >= 33 && n < 49) {
1176
        GET_REG32(env->sregs[srs][n - 33]);
1177
    }
1178
    switch (n) {
1179
    case 16: GET_REG8(env->pregs[0]);
1180
    case 17: GET_REG8(env->pregs[1]);
1181
    case 18: GET_REG32(env->pregs[2]);
1182
    case 19: GET_REG8(srs);
1183
    case 20: GET_REG16(env->pregs[4]);
1184
    case 32: GET_REG32(env->pc);
1185
    }
1186

    
1187
    return 0;
1188
}
1189

    
1190
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1191
{
1192
    uint32_t tmp;
1193

    
1194
    if (n > 49)
1195
        return 0;
1196

    
1197
    tmp = ldl_p(mem_buf);
1198

    
1199
    if (n < 16) {
1200
        env->regs[n] = tmp;
1201
    }
1202

    
1203
    if (n >= 21 && n < 32) {
1204
        env->pregs[n - 16] = tmp;
1205
    }
1206

    
1207
    /* FIXME: Should support function regs be writable?  */
1208
    switch (n) {
1209
    case 16: return 1;
1210
    case 17: return 1;
1211
    case 18: env->pregs[PR_PID] = tmp; break;
1212
    case 19: return 1;
1213
    case 20: return 2;
1214
    case 32: env->pc = tmp; break;
1215
    }
1216

    
1217
    return 4;
1218
}
1219
#elif defined (TARGET_ALPHA)
1220

    
1221
#define NUM_CORE_REGS 65
1222

    
1223
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1224
{
1225
    if (n < 31) {
1226
       GET_REGL(env->ir[n]);
1227
    }
1228
    else if (n == 31) {
1229
       GET_REGL(0);
1230
    }
1231
    else if (n<63) {
1232
       uint64_t val;
1233

    
1234
       val=*((uint64_t *)&env->fir[n-32]);
1235
       GET_REGL(val);
1236
    }
1237
    else if (n==63) {
1238
       GET_REGL(env->fpcr);
1239
    }
1240
    else if (n==64) {
1241
       GET_REGL(env->pc);
1242
    }
1243
    else {
1244
       GET_REGL(0);
1245
    }
1246

    
1247
    return 0;
1248
}
1249

    
1250
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1251
{
1252
    target_ulong tmp;
1253
    tmp = ldtul_p(mem_buf);
1254

    
1255
    if (n < 31) {
1256
        env->ir[n] = tmp;
1257
    }
1258

    
1259
    if (n > 31 && n < 63) {
1260
        env->fir[n - 32] = ldfl_p(mem_buf);
1261
    }
1262

    
1263
    if (n == 64 ) {
1264
       env->pc=tmp;
1265
    }
1266

    
1267
    return 8;
1268
}
1269
#else
1270

    
1271
#define NUM_CORE_REGS 0
1272

    
1273
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1274
{
1275
    return 0;
1276
}
1277

    
1278
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1279
{
1280
    return 0;
1281
}
1282

    
1283
#endif
1284

    
1285
static int num_g_regs = NUM_CORE_REGS;
1286

    
1287
#ifdef GDB_CORE_XML
1288
/* Encode data using the encoding for 'x' packets.  */
1289
static int memtox(char *buf, const char *mem, int len)
1290
{
1291
    char *p = buf;
1292
    char c;
1293

    
1294
    while (len--) {
1295
        c = *(mem++);
1296
        switch (c) {
1297
        case '#': case '$': case '*': case '}':
1298
            *(p++) = '}';
1299
            *(p++) = c ^ 0x20;
1300
            break;
1301
        default:
1302
            *(p++) = c;
1303
            break;
1304
        }
1305
    }
1306
    return p - buf;
1307
}
1308

    
1309
static const char *get_feature_xml(const char *p, const char **newp)
1310
{
1311
    extern const char *const xml_builtin[][2];
1312
    size_t len;
1313
    int i;
1314
    const char *name;
1315
    static char target_xml[1024];
1316

    
1317
    len = 0;
1318
    while (p[len] && p[len] != ':')
1319
        len++;
1320
    *newp = p + len;
1321

    
1322
    name = NULL;
1323
    if (strncmp(p, "target.xml", len) == 0) {
1324
        /* Generate the XML description for this CPU.  */
1325
        if (!target_xml[0]) {
1326
            GDBRegisterState *r;
1327

    
1328
            snprintf(target_xml, sizeof(target_xml),
1329
                     "<?xml version=\"1.0\"?>"
1330
                     "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
1331
                     "<target>"
1332
                     "<xi:include href=\"%s\"/>",
1333
                     GDB_CORE_XML);
1334

    
1335
            for (r = first_cpu->gdb_regs; r; r = r->next) {
1336
                pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\"");
1337
                pstrcat(target_xml, sizeof(target_xml), r->xml);
1338
                pstrcat(target_xml, sizeof(target_xml), "\"/>");
1339
            }
1340
            pstrcat(target_xml, sizeof(target_xml), "</target>");
1341
        }
1342
        return target_xml;
1343
    }
1344
    for (i = 0; ; i++) {
1345
        name = xml_builtin[i][0];
1346
        if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
1347
            break;
1348
    }
1349
    return name ? xml_builtin[i][1] : NULL;
1350
}
1351
#endif
1352

    
1353
static int gdb_read_register(CPUState *env, uint8_t *mem_buf, int reg)
1354
{
1355
    GDBRegisterState *r;
1356

    
1357
    if (reg < NUM_CORE_REGS)
1358
        return cpu_gdb_read_register(env, mem_buf, reg);
1359

    
1360
    for (r = env->gdb_regs; r; r = r->next) {
1361
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1362
            return r->get_reg(env, mem_buf, reg - r->base_reg);
1363
        }
1364
    }
1365
    return 0;
1366
}
1367

    
1368
static int gdb_write_register(CPUState *env, uint8_t *mem_buf, int reg)
1369
{
1370
    GDBRegisterState *r;
1371

    
1372
    if (reg < NUM_CORE_REGS)
1373
        return cpu_gdb_write_register(env, mem_buf, reg);
1374

    
1375
    for (r = env->gdb_regs; r; r = r->next) {
1376
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1377
            return r->set_reg(env, mem_buf, reg - r->base_reg);
1378
        }
1379
    }
1380
    return 0;
1381
}
1382

    
1383
/* Register a supplemental set of CPU registers.  If g_pos is nonzero it
1384
   specifies the first register number and these registers are included in
1385
   a standard "g" packet.  Direction is relative to gdb, i.e. get_reg is
1386
   gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
1387
 */
1388

    
1389
void gdb_register_coprocessor(CPUState * env,
1390
                             gdb_reg_cb get_reg, gdb_reg_cb set_reg,
1391
                             int num_regs, const char *xml, int g_pos)
1392
{
1393
    GDBRegisterState *s;
1394
    GDBRegisterState **p;
1395
    static int last_reg = NUM_CORE_REGS;
1396

    
1397
    s = (GDBRegisterState *)qemu_mallocz(sizeof(GDBRegisterState));
1398
    s->base_reg = last_reg;
1399
    s->num_regs = num_regs;
1400
    s->get_reg = get_reg;
1401
    s->set_reg = set_reg;
1402
    s->xml = xml;
1403
    p = &env->gdb_regs;
1404
    while (*p) {
1405
        /* Check for duplicates.  */
1406
        if (strcmp((*p)->xml, xml) == 0)
1407
            return;
1408
        p = &(*p)->next;
1409
    }
1410
    /* Add to end of list.  */
1411
    last_reg += num_regs;
1412
    *p = s;
1413
    if (g_pos) {
1414
        if (g_pos != s->base_reg) {
1415
            fprintf(stderr, "Error: Bad gdb register numbering for '%s'\n"
1416
                    "Expected %d got %d\n", xml, g_pos, s->base_reg);
1417
        } else {
1418
            num_g_regs = last_reg;
1419
        }
1420
    }
1421
}
1422

    
1423
#ifndef CONFIG_USER_ONLY
1424
static const int xlat_gdb_type[] = {
1425
    [GDB_WATCHPOINT_WRITE]  = BP_GDB | BP_MEM_WRITE,
1426
    [GDB_WATCHPOINT_READ]   = BP_GDB | BP_MEM_READ,
1427
    [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
1428
};
1429
#endif
1430

    
1431
static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
1432
{
1433
    CPUState *env;
1434
    int err = 0;
1435

    
1436
    if (kvm_enabled())
1437
        return kvm_insert_breakpoint(gdbserver_state->c_cpu, addr, len, type);
1438

    
1439
    switch (type) {
1440
    case GDB_BREAKPOINT_SW:
1441
    case GDB_BREAKPOINT_HW:
1442
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1443
            err = cpu_breakpoint_insert(env, addr, BP_GDB, NULL);
1444
            if (err)
1445
                break;
1446
        }
1447
        return err;
1448
#ifndef CONFIG_USER_ONLY
1449
    case GDB_WATCHPOINT_WRITE:
1450
    case GDB_WATCHPOINT_READ:
1451
    case GDB_WATCHPOINT_ACCESS:
1452
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1453
            err = cpu_watchpoint_insert(env, addr, len, xlat_gdb_type[type],
1454
                                        NULL);
1455
            if (err)
1456
                break;
1457
        }
1458
        return err;
1459
#endif
1460
    default:
1461
        return -ENOSYS;
1462
    }
1463
}
1464

    
1465
static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
1466
{
1467
    CPUState *env;
1468
    int err = 0;
1469

    
1470
    if (kvm_enabled())
1471
        return kvm_remove_breakpoint(gdbserver_state->c_cpu, addr, len, type);
1472

    
1473
    switch (type) {
1474
    case GDB_BREAKPOINT_SW:
1475
    case GDB_BREAKPOINT_HW:
1476
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1477
            err = cpu_breakpoint_remove(env, addr, BP_GDB);
1478
            if (err)
1479
                break;
1480
        }
1481
        return err;
1482
#ifndef CONFIG_USER_ONLY
1483
    case GDB_WATCHPOINT_WRITE:
1484
    case GDB_WATCHPOINT_READ:
1485
    case GDB_WATCHPOINT_ACCESS:
1486
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1487
            err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]);
1488
            if (err)
1489
                break;
1490
        }
1491
        return err;
1492
#endif
1493
    default:
1494
        return -ENOSYS;
1495
    }
1496
}
1497

    
1498
static void gdb_breakpoint_remove_all(void)
1499
{
1500
    CPUState *env;
1501

    
1502
    if (kvm_enabled()) {
1503
        kvm_remove_all_breakpoints(gdbserver_state->c_cpu);
1504
        return;
1505
    }
1506

    
1507
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
1508
        cpu_breakpoint_remove_all(env, BP_GDB);
1509
#ifndef CONFIG_USER_ONLY
1510
        cpu_watchpoint_remove_all(env, BP_GDB);
1511
#endif
1512
    }
1513
}
1514

    
1515
static void gdb_set_cpu_pc(GDBState *s, target_ulong pc)
1516
{
1517
#if defined(TARGET_I386)
1518
    s->c_cpu->eip = pc;
1519
    cpu_synchronize_state(s->c_cpu, 1);
1520
#elif defined (TARGET_PPC)
1521
    s->c_cpu->nip = pc;
1522
#elif defined (TARGET_SPARC)
1523
    s->c_cpu->pc = pc;
1524
    s->c_cpu->npc = pc + 4;
1525
#elif defined (TARGET_ARM)
1526
    s->c_cpu->regs[15] = pc;
1527
#elif defined (TARGET_SH4)
1528
    s->c_cpu->pc = pc;
1529
#elif defined (TARGET_MIPS)
1530
    s->c_cpu->active_tc.PC = pc;
1531
#elif defined (TARGET_CRIS)
1532
    s->c_cpu->pc = pc;
1533
#elif defined (TARGET_ALPHA)
1534
    s->c_cpu->pc = pc;
1535
#endif
1536
}
1537

    
1538
static int gdb_handle_packet(GDBState *s, const char *line_buf)
1539
{
1540
    CPUState *env;
1541
    const char *p;
1542
    int ch, reg_size, type, res, thread;
1543
    char buf[MAX_PACKET_LENGTH];
1544
    uint8_t mem_buf[MAX_PACKET_LENGTH];
1545
    uint8_t *registers;
1546
    target_ulong addr, len;
1547

    
1548
#ifdef DEBUG_GDB
1549
    printf("command='%s'\n", line_buf);
1550
#endif
1551
    p = line_buf;
1552
    ch = *p++;
1553
    switch(ch) {
1554
    case '?':
1555
        /* TODO: Make this return the correct value for user-mode.  */
1556
        snprintf(buf, sizeof(buf), "T%02xthread:%02x;", GDB_SIGNAL_TRAP,
1557
                 s->c_cpu->cpu_index+1);
1558
        put_packet(s, buf);
1559
        /* Remove all the breakpoints when this query is issued,
1560
         * because gdb is doing and initial connect and the state
1561
         * should be cleaned up.
1562
         */
1563
        gdb_breakpoint_remove_all();
1564
        break;
1565
    case 'c':
1566
        if (*p != '\0') {
1567
            addr = strtoull(p, (char **)&p, 16);
1568
            gdb_set_cpu_pc(s, addr);
1569
        }
1570
        s->signal = 0;
1571
        gdb_continue(s);
1572
        return RS_IDLE;
1573
    case 'C':
1574
        s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16));
1575
        if (s->signal == -1)
1576
            s->signal = 0;
1577
        gdb_continue(s);
1578
        return RS_IDLE;
1579
    case 'k':
1580
        /* Kill the target */
1581
        fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
1582
        exit(0);
1583
    case 'D':
1584
        /* Detach packet */
1585
        gdb_breakpoint_remove_all();
1586
        gdb_continue(s);
1587
        put_packet(s, "OK");
1588
        break;
1589
    case 's':
1590
        if (*p != '\0') {
1591
            addr = strtoull(p, (char **)&p, 16);
1592
            gdb_set_cpu_pc(s, addr);
1593
        }
1594
        cpu_single_step(s->c_cpu, sstep_flags);
1595
        gdb_continue(s);
1596
        return RS_IDLE;
1597
    case 'F':
1598
        {
1599
            target_ulong ret;
1600
            target_ulong err;
1601

    
1602
            ret = strtoull(p, (char **)&p, 16);
1603
            if (*p == ',') {
1604
                p++;
1605
                err = strtoull(p, (char **)&p, 16);
1606
            } else {
1607
                err = 0;
1608
            }
1609
            if (*p == ',')
1610
                p++;
1611
            type = *p;
1612
            if (gdb_current_syscall_cb)
1613
                gdb_current_syscall_cb(s->c_cpu, ret, err);
1614
            if (type == 'C') {
1615
                put_packet(s, "T02");
1616
            } else {
1617
                gdb_continue(s);
1618
            }
1619
        }
1620
        break;
1621
    case 'g':
1622
        cpu_synchronize_state(s->g_cpu, 0);
1623
        len = 0;
1624
        for (addr = 0; addr < num_g_regs; addr++) {
1625
            reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr);
1626
            len += reg_size;
1627
        }
1628
        memtohex(buf, mem_buf, len);
1629
        put_packet(s, buf);
1630
        break;
1631
    case 'G':
1632
        registers = mem_buf;
1633
        len = strlen(p) / 2;
1634
        hextomem((uint8_t *)registers, p, len);
1635
        for (addr = 0; addr < num_g_regs && len > 0; addr++) {
1636
            reg_size = gdb_write_register(s->g_cpu, registers, addr);
1637
            len -= reg_size;
1638
            registers += reg_size;
1639
        }
1640
        cpu_synchronize_state(s->g_cpu, 1);
1641
        put_packet(s, "OK");
1642
        break;
1643
    case 'm':
1644
        addr = strtoull(p, (char **)&p, 16);
1645
        if (*p == ',')
1646
            p++;
1647
        len = strtoull(p, NULL, 16);
1648
        if (cpu_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 0) != 0) {
1649
            put_packet (s, "E14");
1650
        } else {
1651
            memtohex(buf, mem_buf, len);
1652
            put_packet(s, buf);
1653
        }
1654
        break;
1655
    case 'M':
1656
        addr = strtoull(p, (char **)&p, 16);
1657
        if (*p == ',')
1658
            p++;
1659
        len = strtoull(p, (char **)&p, 16);
1660
        if (*p == ':')
1661
            p++;
1662
        hextomem(mem_buf, p, len);
1663
        if (cpu_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 1) != 0)
1664
            put_packet(s, "E14");
1665
        else
1666
            put_packet(s, "OK");
1667
        break;
1668
    case 'p':
1669
        /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
1670
           This works, but can be very slow.  Anything new enough to
1671
           understand XML also knows how to use this properly.  */
1672
        if (!gdb_has_xml)
1673
            goto unknown_command;
1674
        addr = strtoull(p, (char **)&p, 16);
1675
        reg_size = gdb_read_register(s->g_cpu, mem_buf, addr);
1676
        if (reg_size) {
1677
            memtohex(buf, mem_buf, reg_size);
1678
            put_packet(s, buf);
1679
        } else {
1680
            put_packet(s, "E14");
1681
        }
1682
        break;
1683
    case 'P':
1684
        if (!gdb_has_xml)
1685
            goto unknown_command;
1686
        addr = strtoull(p, (char **)&p, 16);
1687
        if (*p == '=')
1688
            p++;
1689
        reg_size = strlen(p) / 2;
1690
        hextomem(mem_buf, p, reg_size);
1691
        gdb_write_register(s->g_cpu, mem_buf, addr);
1692
        put_packet(s, "OK");
1693
        break;
1694
    case 'Z':
1695
    case 'z':
1696
        type = strtoul(p, (char **)&p, 16);
1697
        if (*p == ',')
1698
            p++;
1699
        addr = strtoull(p, (char **)&p, 16);
1700
        if (*p == ',')
1701
            p++;
1702
        len = strtoull(p, (char **)&p, 16);
1703
        if (ch == 'Z')
1704
            res = gdb_breakpoint_insert(addr, len, type);
1705
        else
1706
            res = gdb_breakpoint_remove(addr, len, type);
1707
        if (res >= 0)
1708
             put_packet(s, "OK");
1709
        else if (res == -ENOSYS)
1710
            put_packet(s, "");
1711
        else
1712
            put_packet(s, "E22");
1713
        break;
1714
    case 'H':
1715
        type = *p++;
1716
        thread = strtoull(p, (char **)&p, 16);
1717
        if (thread == -1 || thread == 0) {
1718
            put_packet(s, "OK");
1719
            break;
1720
        }
1721
        for (env = first_cpu; env != NULL; env = env->next_cpu)
1722
            if (env->cpu_index + 1 == thread)
1723
                break;
1724
        if (env == NULL) {
1725
            put_packet(s, "E22");
1726
            break;
1727
        }
1728
        switch (type) {
1729
        case 'c':
1730
            s->c_cpu = env;
1731
            put_packet(s, "OK");
1732
            break;
1733
        case 'g':
1734
            s->g_cpu = env;
1735
            put_packet(s, "OK");
1736
            break;
1737
        default:
1738
             put_packet(s, "E22");
1739
             break;
1740
        }
1741
        break;
1742
    case 'T':
1743
        thread = strtoull(p, (char **)&p, 16);
1744
#ifndef CONFIG_USER_ONLY
1745
        if (thread > 0 && thread < smp_cpus + 1)
1746
#else
1747
        if (thread == 1)
1748
#endif
1749
             put_packet(s, "OK");
1750
        else
1751
            put_packet(s, "E22");
1752
        break;
1753
    case 'q':
1754
    case 'Q':
1755
        /* parse any 'q' packets here */
1756
        if (!strcmp(p,"qemu.sstepbits")) {
1757
            /* Query Breakpoint bit definitions */
1758
            snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
1759
                     SSTEP_ENABLE,
1760
                     SSTEP_NOIRQ,
1761
                     SSTEP_NOTIMER);
1762
            put_packet(s, buf);
1763
            break;
1764
        } else if (strncmp(p,"qemu.sstep",10) == 0) {
1765
            /* Display or change the sstep_flags */
1766
            p += 10;
1767
            if (*p != '=') {
1768
                /* Display current setting */
1769
                snprintf(buf, sizeof(buf), "0x%x", sstep_flags);
1770
                put_packet(s, buf);
1771
                break;
1772
            }
1773
            p++;
1774
            type = strtoul(p, (char **)&p, 16);
1775
            sstep_flags = type;
1776
            put_packet(s, "OK");
1777
            break;
1778
        } else if (strcmp(p,"C") == 0) {
1779
            /* "Current thread" remains vague in the spec, so always return
1780
             *  the first CPU (gdb returns the first thread). */
1781
            put_packet(s, "QC1");
1782
            break;
1783
        } else if (strcmp(p,"fThreadInfo") == 0) {
1784
            s->query_cpu = first_cpu;
1785
            goto report_cpuinfo;
1786
        } else if (strcmp(p,"sThreadInfo") == 0) {
1787
        report_cpuinfo:
1788
            if (s->query_cpu) {
1789
                snprintf(buf, sizeof(buf), "m%x", s->query_cpu->cpu_index+1);
1790
                put_packet(s, buf);
1791
                s->query_cpu = s->query_cpu->next_cpu;
1792
            } else
1793
                put_packet(s, "l");
1794
            break;
1795
        } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) {
1796
            thread = strtoull(p+16, (char **)&p, 16);
1797
            for (env = first_cpu; env != NULL; env = env->next_cpu)
1798
                if (env->cpu_index + 1 == thread) {
1799
                    cpu_synchronize_state(env, 0);
1800
                    len = snprintf((char *)mem_buf, sizeof(mem_buf),
1801
                                   "CPU#%d [%s]", env->cpu_index,
1802
                                   env->halted ? "halted " : "running");
1803
                    memtohex(buf, mem_buf, len);
1804
                    put_packet(s, buf);
1805
                    break;
1806
                }
1807
            break;
1808
        }
1809
#ifdef CONFIG_USER_ONLY
1810
        else if (strncmp(p, "Offsets", 7) == 0) {
1811
            TaskState *ts = s->c_cpu->opaque;
1812

    
1813
            snprintf(buf, sizeof(buf),
1814
                     "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
1815
                     ";Bss=" TARGET_ABI_FMT_lx,
1816
                     ts->info->code_offset,
1817
                     ts->info->data_offset,
1818
                     ts->info->data_offset);
1819
            put_packet(s, buf);
1820
            break;
1821
        }
1822
#else /* !CONFIG_USER_ONLY */
1823
        else if (strncmp(p, "Rcmd,", 5) == 0) {
1824
            int len = strlen(p + 5);
1825

    
1826
            if ((len % 2) != 0) {
1827
                put_packet(s, "E01");
1828
                break;
1829
            }
1830
            hextomem(mem_buf, p + 5, len);
1831
            len = len / 2;
1832
            mem_buf[len++] = 0;
1833
            qemu_chr_read(s->mon_chr, mem_buf, len);
1834
            put_packet(s, "OK");
1835
            break;
1836
        }
1837
#endif /* !CONFIG_USER_ONLY */
1838
        if (strncmp(p, "Supported", 9) == 0) {
1839
            snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
1840
#ifdef GDB_CORE_XML
1841
            pstrcat(buf, sizeof(buf), ";qXfer:features:read+");
1842
#endif
1843
            put_packet(s, buf);
1844
            break;
1845
        }
1846
#ifdef GDB_CORE_XML
1847
        if (strncmp(p, "Xfer:features:read:", 19) == 0) {
1848
            const char *xml;
1849
            target_ulong total_len;
1850

    
1851
            gdb_has_xml = 1;
1852
            p += 19;
1853
            xml = get_feature_xml(p, &p);
1854
            if (!xml) {
1855
                snprintf(buf, sizeof(buf), "E00");
1856
                put_packet(s, buf);
1857
                break;
1858
            }
1859

    
1860
            if (*p == ':')
1861
                p++;
1862
            addr = strtoul(p, (char **)&p, 16);
1863
            if (*p == ',')
1864
                p++;
1865
            len = strtoul(p, (char **)&p, 16);
1866

    
1867
            total_len = strlen(xml);
1868
            if (addr > total_len) {
1869
                snprintf(buf, sizeof(buf), "E00");
1870
                put_packet(s, buf);
1871
                break;
1872
            }
1873
            if (len > (MAX_PACKET_LENGTH - 5) / 2)
1874
                len = (MAX_PACKET_LENGTH - 5) / 2;
1875
            if (len < total_len - addr) {
1876
                buf[0] = 'm';
1877
                len = memtox(buf + 1, xml + addr, len);
1878
            } else {
1879
                buf[0] = 'l';
1880
                len = memtox(buf + 1, xml + addr, total_len - addr);
1881
            }
1882
            put_packet_binary(s, buf, len + 1);
1883
            break;
1884
        }
1885
#endif
1886
        /* Unrecognised 'q' command.  */
1887
        goto unknown_command;
1888

    
1889
    default:
1890
    unknown_command:
1891
        /* put empty packet */
1892
        buf[0] = '\0';
1893
        put_packet(s, buf);
1894
        break;
1895
    }
1896
    return RS_IDLE;
1897
}
1898

    
1899
void gdb_set_stop_cpu(CPUState *env)
1900
{
1901
    gdbserver_state->c_cpu = env;
1902
    gdbserver_state->g_cpu = env;
1903
}
1904

    
1905
#ifndef CONFIG_USER_ONLY
1906
static void gdb_vm_state_change(void *opaque, int running, int reason)
1907
{
1908
    GDBState *s = gdbserver_state;
1909
    CPUState *env = s->c_cpu;
1910
    char buf[256];
1911
    const char *type;
1912
    int ret;
1913

    
1914
    if (running || (reason != EXCP_DEBUG && reason != EXCP_INTERRUPT) ||
1915
        s->state == RS_INACTIVE || s->state == RS_SYSCALL)
1916
        return;
1917

    
1918
    /* disable single step if it was enable */
1919
    cpu_single_step(env, 0);
1920

    
1921
    if (reason == EXCP_DEBUG) {
1922
        if (env->watchpoint_hit) {
1923
            switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
1924
            case BP_MEM_READ:
1925
                type = "r";
1926
                break;
1927
            case BP_MEM_ACCESS:
1928
                type = "a";
1929
                break;
1930
            default:
1931
                type = "";
1932
                break;
1933
            }
1934
            snprintf(buf, sizeof(buf),
1935
                     "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
1936
                     GDB_SIGNAL_TRAP, env->cpu_index+1, type,
1937
                     env->watchpoint_hit->vaddr);
1938
            put_packet(s, buf);
1939
            env->watchpoint_hit = NULL;
1940
            return;
1941
        }
1942
        tb_flush(env);
1943
        ret = GDB_SIGNAL_TRAP;
1944
    } else {
1945
        ret = GDB_SIGNAL_INT;
1946
    }
1947
    snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, env->cpu_index+1);
1948
    put_packet(s, buf);
1949
}
1950
#endif
1951

    
1952
/* Send a gdb syscall request.
1953
   This accepts limited printf-style format specifiers, specifically:
1954
    %x  - target_ulong argument printed in hex.
1955
    %lx - 64-bit argument printed in hex.
1956
    %s  - string pointer (target_ulong) and length (int) pair.  */
1957
void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
1958
{
1959
    va_list va;
1960
    char buf[256];
1961
    char *p;
1962
    target_ulong addr;
1963
    uint64_t i64;
1964
    GDBState *s;
1965

    
1966
    s = gdbserver_state;
1967
    if (!s)
1968
        return;
1969
    gdb_current_syscall_cb = cb;
1970
    s->state = RS_SYSCALL;
1971
#ifndef CONFIG_USER_ONLY
1972
    vm_stop(EXCP_DEBUG);
1973
#endif
1974
    s->state = RS_IDLE;
1975
    va_start(va, fmt);
1976
    p = buf;
1977
    *(p++) = 'F';
1978
    while (*fmt) {
1979
        if (*fmt == '%') {
1980
            fmt++;
1981
            switch (*fmt++) {
1982
            case 'x':
1983
                addr = va_arg(va, target_ulong);
1984
                p += snprintf(p, &buf[sizeof(buf)] - p, TARGET_FMT_lx, addr);
1985
                break;
1986
            case 'l':
1987
                if (*(fmt++) != 'x')
1988
                    goto bad_format;
1989
                i64 = va_arg(va, uint64_t);
1990
                p += snprintf(p, &buf[sizeof(buf)] - p, "%" PRIx64, i64);
1991
                break;
1992
            case 's':
1993
                addr = va_arg(va, target_ulong);
1994
                p += snprintf(p, &buf[sizeof(buf)] - p, TARGET_FMT_lx "/%x",
1995
                              addr, va_arg(va, int));
1996
                break;
1997
            default:
1998
            bad_format:
1999
                fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
2000
                        fmt - 1);
2001
                break;
2002
            }
2003
        } else {
2004
            *(p++) = *(fmt++);
2005
        }
2006
    }
2007
    *p = 0;
2008
    va_end(va);
2009
    put_packet(s, buf);
2010
#ifdef CONFIG_USER_ONLY
2011
    gdb_handlesig(s->c_cpu, 0);
2012
#else
2013
    cpu_exit(s->c_cpu);
2014
#endif
2015
}
2016

    
2017
static void gdb_read_byte(GDBState *s, int ch)
2018
{
2019
    int i, csum;
2020
    uint8_t reply;
2021

    
2022
#ifndef CONFIG_USER_ONLY
2023
    if (s->last_packet_len) {
2024
        /* Waiting for a response to the last packet.  If we see the start
2025
           of a new command then abandon the previous response.  */
2026
        if (ch == '-') {
2027
#ifdef DEBUG_GDB
2028
            printf("Got NACK, retransmitting\n");
2029
#endif
2030
            put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
2031
        }
2032
#ifdef DEBUG_GDB
2033
        else if (ch == '+')
2034
            printf("Got ACK\n");
2035
        else
2036
            printf("Got '%c' when expecting ACK/NACK\n", ch);
2037
#endif
2038
        if (ch == '+' || ch == '$')
2039
            s->last_packet_len = 0;
2040
        if (ch != '$')
2041
            return;
2042
    }
2043
    if (vm_running) {
2044
        /* when the CPU is running, we cannot do anything except stop
2045
           it when receiving a char */
2046
        vm_stop(EXCP_INTERRUPT);
2047
    } else
2048
#endif
2049
    {
2050
        switch(s->state) {
2051
        case RS_IDLE:
2052
            if (ch == '$') {
2053
                s->line_buf_index = 0;
2054
                s->state = RS_GETLINE;
2055
            }
2056
            break;
2057
        case RS_GETLINE:
2058
            if (ch == '#') {
2059
            s->state = RS_CHKSUM1;
2060
            } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
2061
                s->state = RS_IDLE;
2062
            } else {
2063
            s->line_buf[s->line_buf_index++] = ch;
2064
            }
2065
            break;
2066
        case RS_CHKSUM1:
2067
            s->line_buf[s->line_buf_index] = '\0';
2068
            s->line_csum = fromhex(ch) << 4;
2069
            s->state = RS_CHKSUM2;
2070
            break;
2071
        case RS_CHKSUM2:
2072
            s->line_csum |= fromhex(ch);
2073
            csum = 0;
2074
            for(i = 0; i < s->line_buf_index; i++) {
2075
                csum += s->line_buf[i];
2076
            }
2077
            if (s->line_csum != (csum & 0xff)) {
2078
                reply = '-';
2079
                put_buffer(s, &reply, 1);
2080
                s->state = RS_IDLE;
2081
            } else {
2082
                reply = '+';
2083
                put_buffer(s, &reply, 1);
2084
                s->state = gdb_handle_packet(s, s->line_buf);
2085
            }
2086
            break;
2087
        default:
2088
            abort();
2089
        }
2090
    }
2091
}
2092

    
2093
#ifdef CONFIG_USER_ONLY
2094
int
2095
gdb_queuesig (void)
2096
{
2097
    GDBState *s;
2098

    
2099
    s = gdbserver_state;
2100

    
2101
    if (gdbserver_fd < 0 || s->fd < 0)
2102
        return 0;
2103
    else
2104
        return 1;
2105
}
2106

    
2107
int
2108
gdb_handlesig (CPUState *env, int sig)
2109
{
2110
  GDBState *s;
2111
  char buf[256];
2112
  int n;
2113

    
2114
  s = gdbserver_state;
2115
  if (gdbserver_fd < 0 || s->fd < 0)
2116
    return sig;
2117

    
2118
  /* disable single step if it was enabled */
2119
  cpu_single_step(env, 0);
2120
  tb_flush(env);
2121

    
2122
  if (sig != 0)
2123
    {
2124
      snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb (sig));
2125
      put_packet(s, buf);
2126
    }
2127
  /* put_packet() might have detected that the peer terminated the 
2128
     connection.  */
2129
  if (s->fd < 0)
2130
      return sig;
2131

    
2132
  sig = 0;
2133
  s->state = RS_IDLE;
2134
  s->running_state = 0;
2135
  while (s->running_state == 0) {
2136
      n = read (s->fd, buf, 256);
2137
      if (n > 0)
2138
        {
2139
          int i;
2140

    
2141
          for (i = 0; i < n; i++)
2142
            gdb_read_byte (s, buf[i]);
2143
        }
2144
      else if (n == 0 || errno != EAGAIN)
2145
        {
2146
          /* XXX: Connection closed.  Should probably wait for annother
2147
             connection before continuing.  */
2148
          return sig;
2149
        }
2150
  }
2151
  sig = s->signal;
2152
  s->signal = 0;
2153
  return sig;
2154
}
2155

    
2156
/* Tell the remote gdb that the process has exited.  */
2157
void gdb_exit(CPUState *env, int code)
2158
{
2159
  GDBState *s;
2160
  char buf[4];
2161

    
2162
  s = gdbserver_state;
2163
  if (gdbserver_fd < 0 || s->fd < 0)
2164
    return;
2165

    
2166
  snprintf(buf, sizeof(buf), "W%02x", code);
2167
  put_packet(s, buf);
2168
}
2169

    
2170
/* Tell the remote gdb that the process has exited due to SIG.  */
2171
void gdb_signalled(CPUState *env, int sig)
2172
{
2173
  GDBState *s;
2174
  char buf[4];
2175

    
2176
  s = gdbserver_state;
2177
  if (gdbserver_fd < 0 || s->fd < 0)
2178
    return;
2179

    
2180
  snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb (sig));
2181
  put_packet(s, buf);
2182
}
2183

    
2184
static void gdb_accept(void)
2185
{
2186
    GDBState *s;
2187
    struct sockaddr_in sockaddr;
2188
    socklen_t len;
2189
    int val, fd;
2190

    
2191
    for(;;) {
2192
        len = sizeof(sockaddr);
2193
        fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
2194
        if (fd < 0 && errno != EINTR) {
2195
            perror("accept");
2196
            return;
2197
        } else if (fd >= 0) {
2198
            break;
2199
        }
2200
    }
2201

    
2202
    /* set short latency */
2203
    val = 1;
2204
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
2205

    
2206
    s = qemu_mallocz(sizeof(GDBState));
2207
    s->c_cpu = first_cpu;
2208
    s->g_cpu = first_cpu;
2209
    s->fd = fd;
2210
    gdb_has_xml = 0;
2211

    
2212
    gdbserver_state = s;
2213

    
2214
    fcntl(fd, F_SETFL, O_NONBLOCK);
2215
}
2216

    
2217
static int gdbserver_open(int port)
2218
{
2219
    struct sockaddr_in sockaddr;
2220
    int fd, val, ret;
2221

    
2222
    fd = socket(PF_INET, SOCK_STREAM, 0);
2223
    if (fd < 0) {
2224
        perror("socket");
2225
        return -1;
2226
    }
2227

    
2228
    /* allow fast reuse */
2229
    val = 1;
2230
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&val, sizeof(val));
2231

    
2232
    sockaddr.sin_family = AF_INET;
2233
    sockaddr.sin_port = htons(port);
2234
    sockaddr.sin_addr.s_addr = 0;
2235
    ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
2236
    if (ret < 0) {
2237
        perror("bind");
2238
        return -1;
2239
    }
2240
    ret = listen(fd, 0);
2241
    if (ret < 0) {
2242
        perror("listen");
2243
        return -1;
2244
    }
2245
    return fd;
2246
}
2247

    
2248
int gdbserver_start(int port)
2249
{
2250
    gdbserver_fd = gdbserver_open(port);
2251
    if (gdbserver_fd < 0)
2252
        return -1;
2253
    /* accept connections */
2254
    gdb_accept();
2255
    return 0;
2256
}
2257

    
2258
/* Disable gdb stub for child processes.  */
2259
void gdbserver_fork(CPUState *env)
2260
{
2261
    GDBState *s = gdbserver_state;
2262
    if (gdbserver_fd < 0 || s->fd < 0)
2263
      return;
2264
    close(s->fd);
2265
    s->fd = -1;
2266
    cpu_breakpoint_remove_all(env, BP_GDB);
2267
    cpu_watchpoint_remove_all(env, BP_GDB);
2268
}
2269
#else
2270
static int gdb_chr_can_receive(void *opaque)
2271
{
2272
  /* We can handle an arbitrarily large amount of data.
2273
   Pick the maximum packet size, which is as good as anything.  */
2274
  return MAX_PACKET_LENGTH;
2275
}
2276

    
2277
static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
2278
{
2279
    int i;
2280

    
2281
    for (i = 0; i < size; i++) {
2282
        gdb_read_byte(gdbserver_state, buf[i]);
2283
    }
2284
}
2285

    
2286
static void gdb_chr_event(void *opaque, int event)
2287
{
2288
    switch (event) {
2289
    case CHR_EVENT_RESET:
2290
        vm_stop(EXCP_INTERRUPT);
2291
        gdb_has_xml = 0;
2292
        break;
2293
    default:
2294
        break;
2295
    }
2296
}
2297

    
2298
static void gdb_monitor_output(GDBState *s, const char *msg, int len)
2299
{
2300
    char buf[MAX_PACKET_LENGTH];
2301

    
2302
    buf[0] = 'O';
2303
    if (len > (MAX_PACKET_LENGTH/2) - 1)
2304
        len = (MAX_PACKET_LENGTH/2) - 1;
2305
    memtohex(buf + 1, (uint8_t *)msg, len);
2306
    put_packet(s, buf);
2307
}
2308

    
2309
static int gdb_monitor_write(CharDriverState *chr, const uint8_t *buf, int len)
2310
{
2311
    const char *p = (const char *)buf;
2312
    int max_sz;
2313

    
2314
    max_sz = (sizeof(gdbserver_state->last_packet) - 2) / 2;
2315
    for (;;) {
2316
        if (len <= max_sz) {
2317
            gdb_monitor_output(gdbserver_state, p, len);
2318
            break;
2319
        }
2320
        gdb_monitor_output(gdbserver_state, p, max_sz);
2321
        p += max_sz;
2322
        len -= max_sz;
2323
    }
2324
    return len;
2325
}
2326

    
2327
#ifndef _WIN32
2328
static void gdb_sigterm_handler(int signal)
2329
{
2330
    if (vm_running)
2331
        vm_stop(EXCP_INTERRUPT);
2332
}
2333
#endif
2334

    
2335
int gdbserver_start(const char *device)
2336
{
2337
    GDBState *s;
2338
    char gdbstub_device_name[128];
2339
    CharDriverState *chr = NULL;
2340
    CharDriverState *mon_chr;
2341

    
2342
    if (!device)
2343
        return -1;
2344
    if (strcmp(device, "none") != 0) {
2345
        if (strstart(device, "tcp:", NULL)) {
2346
            /* enforce required TCP attributes */
2347
            snprintf(gdbstub_device_name, sizeof(gdbstub_device_name),
2348
                     "%s,nowait,nodelay,server", device);
2349
            device = gdbstub_device_name;
2350
        }
2351
#ifndef _WIN32
2352
        else if (strcmp(device, "stdio") == 0) {
2353
            struct sigaction act;
2354

    
2355
            memset(&act, 0, sizeof(act));
2356
            act.sa_handler = gdb_sigterm_handler;
2357
            sigaction(SIGINT, &act, NULL);
2358
        }
2359
#endif
2360
        chr = qemu_chr_open("gdb", device, NULL);
2361
        if (!chr)
2362
            return -1;
2363

    
2364
        qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
2365
                              gdb_chr_event, NULL);
2366
    }
2367

    
2368
    s = gdbserver_state;
2369
    if (!s) {
2370
        s = qemu_mallocz(sizeof(GDBState));
2371
        gdbserver_state = s;
2372

    
2373
        qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
2374

    
2375
        /* Initialize a monitor terminal for gdb */
2376
        mon_chr = qemu_mallocz(sizeof(*mon_chr));
2377
        mon_chr->chr_write = gdb_monitor_write;
2378
        monitor_init(mon_chr, 0);
2379
    } else {
2380
        if (s->chr)
2381
            qemu_chr_close(s->chr);
2382
        mon_chr = s->mon_chr;
2383
        memset(s, 0, sizeof(GDBState));
2384
    }
2385
    s->c_cpu = first_cpu;
2386
    s->g_cpu = first_cpu;
2387
    s->chr = chr;
2388
    s->state = chr ? RS_IDLE : RS_INACTIVE;
2389
    s->mon_chr = mon_chr;
2390

    
2391
    return 0;
2392
}
2393
#endif