Statistics
| Branch: | Revision:

root / gdbstub.c @ 604457d7

History | View | Annotate | Download (60.1 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
                strcat(target_xml, "<xi:include href=\"");
1337
                strcat(target_xml, r->xml);
1338
                strcat(target_xml, "\"/>");
1339
            }
1340
            strcat(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 int gdb_handle_packet(GDBState *s, const char *line_buf)
1516
{
1517
    CPUState *env;
1518
    const char *p;
1519
    int ch, reg_size, type, res, thread;
1520
    char buf[MAX_PACKET_LENGTH];
1521
    uint8_t mem_buf[MAX_PACKET_LENGTH];
1522
    uint8_t *registers;
1523
    target_ulong addr, len;
1524

    
1525
#ifdef DEBUG_GDB
1526
    printf("command='%s'\n", line_buf);
1527
#endif
1528
    p = line_buf;
1529
    ch = *p++;
1530
    switch(ch) {
1531
    case '?':
1532
        /* TODO: Make this return the correct value for user-mode.  */
1533
        snprintf(buf, sizeof(buf), "T%02xthread:%02x;", GDB_SIGNAL_TRAP,
1534
                 s->c_cpu->cpu_index+1);
1535
        put_packet(s, buf);
1536
        /* Remove all the breakpoints when this query is issued,
1537
         * because gdb is doing and initial connect and the state
1538
         * should be cleaned up.
1539
         */
1540
        gdb_breakpoint_remove_all();
1541
        break;
1542
    case 'c':
1543
        if (*p != '\0') {
1544
            addr = strtoull(p, (char **)&p, 16);
1545
#if defined(TARGET_I386)
1546
            s->c_cpu->eip = addr;
1547
            cpu_synchronize_state(s->c_cpu, 1);
1548
#elif defined (TARGET_PPC)
1549
            s->c_cpu->nip = addr;
1550
#elif defined (TARGET_SPARC)
1551
            s->c_cpu->pc = addr;
1552
            s->c_cpu->npc = addr + 4;
1553
#elif defined (TARGET_ARM)
1554
            s->c_cpu->regs[15] = addr;
1555
#elif defined (TARGET_SH4)
1556
            s->c_cpu->pc = addr;
1557
#elif defined (TARGET_MIPS)
1558
            s->c_cpu->active_tc.PC = addr;
1559
#elif defined (TARGET_CRIS)
1560
            s->c_cpu->pc = addr;
1561
#elif defined (TARGET_ALPHA)
1562
            s->c_cpu->pc = addr;
1563
#endif
1564
        }
1565
        s->signal = 0;
1566
        gdb_continue(s);
1567
        return RS_IDLE;
1568
    case 'C':
1569
        s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16));
1570
        if (s->signal == -1)
1571
            s->signal = 0;
1572
        gdb_continue(s);
1573
        return RS_IDLE;
1574
    case 'k':
1575
        /* Kill the target */
1576
        fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
1577
        exit(0);
1578
    case 'D':
1579
        /* Detach packet */
1580
        gdb_breakpoint_remove_all();
1581
        gdb_continue(s);
1582
        put_packet(s, "OK");
1583
        break;
1584
    case 's':
1585
        if (*p != '\0') {
1586
            addr = strtoull(p, (char **)&p, 16);
1587
#if defined(TARGET_I386)
1588
            s->c_cpu->eip = addr;
1589
            cpu_synchronize_state(s->c_cpu, 1);
1590
#elif defined (TARGET_PPC)
1591
            s->c_cpu->nip = addr;
1592
#elif defined (TARGET_SPARC)
1593
            s->c_cpu->pc = addr;
1594
            s->c_cpu->npc = addr + 4;
1595
#elif defined (TARGET_ARM)
1596
            s->c_cpu->regs[15] = addr;
1597
#elif defined (TARGET_SH4)
1598
            s->c_cpu->pc = addr;
1599
#elif defined (TARGET_MIPS)
1600
            s->c_cpu->active_tc.PC = addr;
1601
#elif defined (TARGET_CRIS)
1602
            s->c_cpu->pc = addr;
1603
#elif defined (TARGET_ALPHA)
1604
            s->c_cpu->pc = addr;
1605
#endif
1606
        }
1607
        cpu_single_step(s->c_cpu, sstep_flags);
1608
        gdb_continue(s);
1609
        return RS_IDLE;
1610
    case 'F':
1611
        {
1612
            target_ulong ret;
1613
            target_ulong err;
1614

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

    
1826
            snprintf(buf, sizeof(buf),
1827
                     "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
1828
                     ";Bss=" TARGET_ABI_FMT_lx,
1829
                     ts->info->code_offset,
1830
                     ts->info->data_offset,
1831
                     ts->info->data_offset);
1832
            put_packet(s, buf);
1833
            break;
1834
        }
1835
#else /* !CONFIG_USER_ONLY */
1836
        else if (strncmp(p, "Rcmd,", 5) == 0) {
1837
            int len = strlen(p + 5);
1838

    
1839
            if ((len % 2) != 0) {
1840
                put_packet(s, "E01");
1841
                break;
1842
            }
1843
            hextomem(mem_buf, p + 5, len);
1844
            len = len / 2;
1845
            mem_buf[len++] = 0;
1846
            qemu_chr_read(s->mon_chr, mem_buf, len);
1847
            put_packet(s, "OK");
1848
            break;
1849
        }
1850
#endif /* !CONFIG_USER_ONLY */
1851
        if (strncmp(p, "Supported", 9) == 0) {
1852
            snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
1853
#ifdef GDB_CORE_XML
1854
            strcat(buf, ";qXfer:features:read+");
1855
#endif
1856
            put_packet(s, buf);
1857
            break;
1858
        }
1859
#ifdef GDB_CORE_XML
1860
        if (strncmp(p, "Xfer:features:read:", 19) == 0) {
1861
            const char *xml;
1862
            target_ulong total_len;
1863

    
1864
            gdb_has_xml = 1;
1865
            p += 19;
1866
            xml = get_feature_xml(p, &p);
1867
            if (!xml) {
1868
                snprintf(buf, sizeof(buf), "E00");
1869
                put_packet(s, buf);
1870
                break;
1871
            }
1872

    
1873
            if (*p == ':')
1874
                p++;
1875
            addr = strtoul(p, (char **)&p, 16);
1876
            if (*p == ',')
1877
                p++;
1878
            len = strtoul(p, (char **)&p, 16);
1879

    
1880
            total_len = strlen(xml);
1881
            if (addr > total_len) {
1882
                snprintf(buf, sizeof(buf), "E00");
1883
                put_packet(s, buf);
1884
                break;
1885
            }
1886
            if (len > (MAX_PACKET_LENGTH - 5) / 2)
1887
                len = (MAX_PACKET_LENGTH - 5) / 2;
1888
            if (len < total_len - addr) {
1889
                buf[0] = 'm';
1890
                len = memtox(buf + 1, xml + addr, len);
1891
            } else {
1892
                buf[0] = 'l';
1893
                len = memtox(buf + 1, xml + addr, total_len - addr);
1894
            }
1895
            put_packet_binary(s, buf, len + 1);
1896
            break;
1897
        }
1898
#endif
1899
        /* Unrecognised 'q' command.  */
1900
        goto unknown_command;
1901

    
1902
    default:
1903
    unknown_command:
1904
        /* put empty packet */
1905
        buf[0] = '\0';
1906
        put_packet(s, buf);
1907
        break;
1908
    }
1909
    return RS_IDLE;
1910
}
1911

    
1912
void gdb_set_stop_cpu(CPUState *env)
1913
{
1914
    gdbserver_state->c_cpu = env;
1915
    gdbserver_state->g_cpu = env;
1916
}
1917

    
1918
#ifndef CONFIG_USER_ONLY
1919
static void gdb_vm_state_change(void *opaque, int running, int reason)
1920
{
1921
    GDBState *s = gdbserver_state;
1922
    CPUState *env = s->c_cpu;
1923
    char buf[256];
1924
    const char *type;
1925
    int ret;
1926

    
1927
    if (running || (reason != EXCP_DEBUG && reason != EXCP_INTERRUPT) ||
1928
        s->state == RS_INACTIVE || s->state == RS_SYSCALL)
1929
        return;
1930

    
1931
    /* disable single step if it was enable */
1932
    cpu_single_step(env, 0);
1933

    
1934
    if (reason == EXCP_DEBUG) {
1935
        if (env->watchpoint_hit) {
1936
            switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
1937
            case BP_MEM_READ:
1938
                type = "r";
1939
                break;
1940
            case BP_MEM_ACCESS:
1941
                type = "a";
1942
                break;
1943
            default:
1944
                type = "";
1945
                break;
1946
            }
1947
            snprintf(buf, sizeof(buf),
1948
                     "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
1949
                     GDB_SIGNAL_TRAP, env->cpu_index+1, type,
1950
                     env->watchpoint_hit->vaddr);
1951
            put_packet(s, buf);
1952
            env->watchpoint_hit = NULL;
1953
            return;
1954
        }
1955
        tb_flush(env);
1956
        ret = GDB_SIGNAL_TRAP;
1957
    } else {
1958
        ret = GDB_SIGNAL_INT;
1959
    }
1960
    snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, env->cpu_index+1);
1961
    put_packet(s, buf);
1962
}
1963
#endif
1964

    
1965
/* Send a gdb syscall request.
1966
   This accepts limited printf-style format specifiers, specifically:
1967
    %x  - target_ulong argument printed in hex.
1968
    %lx - 64-bit argument printed in hex.
1969
    %s  - string pointer (target_ulong) and length (int) pair.  */
1970
void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
1971
{
1972
    va_list va;
1973
    char buf[256];
1974
    char *p;
1975
    target_ulong addr;
1976
    uint64_t i64;
1977
    GDBState *s;
1978

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

    
2030
static void gdb_read_byte(GDBState *s, int ch)
2031
{
2032
    int i, csum;
2033
    uint8_t reply;
2034

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

    
2106
#ifdef CONFIG_USER_ONLY
2107
int
2108
gdb_queuesig (void)
2109
{
2110
    GDBState *s;
2111

    
2112
    s = gdbserver_state;
2113

    
2114
    if (gdbserver_fd < 0 || s->fd < 0)
2115
        return 0;
2116
    else
2117
        return 1;
2118
}
2119

    
2120
int
2121
gdb_handlesig (CPUState *env, int sig)
2122
{
2123
  GDBState *s;
2124
  char buf[256];
2125
  int n;
2126

    
2127
  s = gdbserver_state;
2128
  if (gdbserver_fd < 0 || s->fd < 0)
2129
    return sig;
2130

    
2131
  /* disable single step if it was enabled */
2132
  cpu_single_step(env, 0);
2133
  tb_flush(env);
2134

    
2135
  if (sig != 0)
2136
    {
2137
      snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb (sig));
2138
      put_packet(s, buf);
2139
    }
2140
  /* put_packet() might have detected that the peer terminated the 
2141
     connection.  */
2142
  if (s->fd < 0)
2143
      return sig;
2144

    
2145
  sig = 0;
2146
  s->state = RS_IDLE;
2147
  s->running_state = 0;
2148
  while (s->running_state == 0) {
2149
      n = read (s->fd, buf, 256);
2150
      if (n > 0)
2151
        {
2152
          int i;
2153

    
2154
          for (i = 0; i < n; i++)
2155
            gdb_read_byte (s, buf[i]);
2156
        }
2157
      else if (n == 0 || errno != EAGAIN)
2158
        {
2159
          /* XXX: Connection closed.  Should probably wait for annother
2160
             connection before continuing.  */
2161
          return sig;
2162
        }
2163
  }
2164
  sig = s->signal;
2165
  s->signal = 0;
2166
  return sig;
2167
}
2168

    
2169
/* Tell the remote gdb that the process has exited.  */
2170
void gdb_exit(CPUState *env, int code)
2171
{
2172
  GDBState *s;
2173
  char buf[4];
2174

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

    
2179
  snprintf(buf, sizeof(buf), "W%02x", code);
2180
  put_packet(s, buf);
2181
}
2182

    
2183
/* Tell the remote gdb that the process has exited due to SIG.  */
2184
void gdb_signalled(CPUState *env, int sig)
2185
{
2186
  GDBState *s;
2187
  char buf[4];
2188

    
2189
  s = gdbserver_state;
2190
  if (gdbserver_fd < 0 || s->fd < 0)
2191
    return;
2192

    
2193
  snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb (sig));
2194
  put_packet(s, buf);
2195
}
2196

    
2197
static void gdb_accept(void)
2198
{
2199
    GDBState *s;
2200
    struct sockaddr_in sockaddr;
2201
    socklen_t len;
2202
    int val, fd;
2203

    
2204
    for(;;) {
2205
        len = sizeof(sockaddr);
2206
        fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
2207
        if (fd < 0 && errno != EINTR) {
2208
            perror("accept");
2209
            return;
2210
        } else if (fd >= 0) {
2211
            break;
2212
        }
2213
    }
2214

    
2215
    /* set short latency */
2216
    val = 1;
2217
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
2218

    
2219
    s = qemu_mallocz(sizeof(GDBState));
2220
    s->c_cpu = first_cpu;
2221
    s->g_cpu = first_cpu;
2222
    s->fd = fd;
2223
    gdb_has_xml = 0;
2224

    
2225
    gdbserver_state = s;
2226

    
2227
    fcntl(fd, F_SETFL, O_NONBLOCK);
2228
}
2229

    
2230
static int gdbserver_open(int port)
2231
{
2232
    struct sockaddr_in sockaddr;
2233
    int fd, val, ret;
2234

    
2235
    fd = socket(PF_INET, SOCK_STREAM, 0);
2236
    if (fd < 0) {
2237
        perror("socket");
2238
        return -1;
2239
    }
2240

    
2241
    /* allow fast reuse */
2242
    val = 1;
2243
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&val, sizeof(val));
2244

    
2245
    sockaddr.sin_family = AF_INET;
2246
    sockaddr.sin_port = htons(port);
2247
    sockaddr.sin_addr.s_addr = 0;
2248
    ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
2249
    if (ret < 0) {
2250
        perror("bind");
2251
        return -1;
2252
    }
2253
    ret = listen(fd, 0);
2254
    if (ret < 0) {
2255
        perror("listen");
2256
        return -1;
2257
    }
2258
    return fd;
2259
}
2260

    
2261
int gdbserver_start(int port)
2262
{
2263
    gdbserver_fd = gdbserver_open(port);
2264
    if (gdbserver_fd < 0)
2265
        return -1;
2266
    /* accept connections */
2267
    gdb_accept();
2268
    return 0;
2269
}
2270

    
2271
/* Disable gdb stub for child processes.  */
2272
void gdbserver_fork(CPUState *env)
2273
{
2274
    GDBState *s = gdbserver_state;
2275
    if (gdbserver_fd < 0 || s->fd < 0)
2276
      return;
2277
    close(s->fd);
2278
    s->fd = -1;
2279
    cpu_breakpoint_remove_all(env, BP_GDB);
2280
    cpu_watchpoint_remove_all(env, BP_GDB);
2281
}
2282
#else
2283
static int gdb_chr_can_receive(void *opaque)
2284
{
2285
  /* We can handle an arbitrarily large amount of data.
2286
   Pick the maximum packet size, which is as good as anything.  */
2287
  return MAX_PACKET_LENGTH;
2288
}
2289

    
2290
static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
2291
{
2292
    int i;
2293

    
2294
    for (i = 0; i < size; i++) {
2295
        gdb_read_byte(gdbserver_state, buf[i]);
2296
    }
2297
}
2298

    
2299
static void gdb_chr_event(void *opaque, int event)
2300
{
2301
    switch (event) {
2302
    case CHR_EVENT_RESET:
2303
        vm_stop(EXCP_INTERRUPT);
2304
        gdb_has_xml = 0;
2305
        break;
2306
    default:
2307
        break;
2308
    }
2309
}
2310

    
2311
static void gdb_monitor_output(GDBState *s, const char *msg, int len)
2312
{
2313
    char buf[MAX_PACKET_LENGTH];
2314

    
2315
    buf[0] = 'O';
2316
    if (len > (MAX_PACKET_LENGTH/2) - 1)
2317
        len = (MAX_PACKET_LENGTH/2) - 1;
2318
    memtohex(buf + 1, (uint8_t *)msg, len);
2319
    put_packet(s, buf);
2320
}
2321

    
2322
static int gdb_monitor_write(CharDriverState *chr, const uint8_t *buf, int len)
2323
{
2324
    const char *p = (const char *)buf;
2325
    int max_sz;
2326

    
2327
    max_sz = (sizeof(gdbserver_state->last_packet) - 2) / 2;
2328
    for (;;) {
2329
        if (len <= max_sz) {
2330
            gdb_monitor_output(gdbserver_state, p, len);
2331
            break;
2332
        }
2333
        gdb_monitor_output(gdbserver_state, p, max_sz);
2334
        p += max_sz;
2335
        len -= max_sz;
2336
    }
2337
    return len;
2338
}
2339

    
2340
int gdbserver_start(const char *port)
2341
{
2342
    GDBState *s;
2343
    char gdbstub_port_name[128];
2344
    int port_num;
2345
    char *p;
2346
    CharDriverState *chr = NULL;
2347
    CharDriverState *mon_chr;
2348

    
2349
    if (!port || !*port)
2350
      return -1;
2351
    if (strcmp(port, "none") != 0) {
2352
        port_num = strtol(port, &p, 10);
2353
        if (*p == 0) {
2354
            /* A numeric value is interpreted as a port number.  */
2355
            snprintf(gdbstub_port_name, sizeof(gdbstub_port_name),
2356
                     "tcp::%d,nowait,nodelay,server", port_num);
2357
            port = gdbstub_port_name;
2358
        }
2359

    
2360
        chr = qemu_chr_open("gdb", port, 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