Statistics
| Branch: | Revision:

root / gdbstub.c @ 1eec614b

History | View | Annotate | Download (58 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 "qemu-char.h"
34
#include "sysemu.h"
35
#include "gdbstub.h"
36
#endif
37

    
38
#define MAX_PACKET_LENGTH 4096
39

    
40
#include "qemu_socket.h"
41

    
42

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

    
50
#ifdef CONFIG_USER_ONLY
51

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

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

    
220
enum {
221
    TARGET_SIGINT = 2,
222
    TARGET_SIGTRAP = 5
223
};
224

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

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

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

    
254
//#define DEBUG_GDB
255

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

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

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

    
296
static GDBState *gdbserver_state;
297

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

    
303
#ifdef CONFIG_USER_ONLY
304
/* XXX: This is not thread safe.  Do we care?  */
305
static int gdbserver_fd = -1;
306

    
307
static int get_char(GDBState *s)
308
{
309
    uint8_t ch;
310
    int ret;
311

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

    
331
static gdb_syscall_complete_cb gdb_current_syscall_cb;
332

    
333
enum {
334
    GDB_SYS_UNKNOWN,
335
    GDB_SYS_ENABLED,
336
    GDB_SYS_DISABLED,
337
} gdb_syscall_mode;
338

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

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

    
360
static void put_buffer(GDBState *s, const uint8_t *buf, int len)
361
{
362
#ifdef CONFIG_USER_ONLY
363
    int ret;
364

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

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

    
392
static inline int tohex(int v)
393
{
394
    if (v < 10)
395
        return v + '0';
396
    else
397
        return v - 10 + 'a';
398
}
399

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

    
413
static void hextomem(uint8_t *mem, const char *buf, int len)
414
{
415
    int i;
416

    
417
    for(i = 0; i < len; i++) {
418
        mem[i] = (fromhex(buf[0]) << 4) | fromhex(buf[1]);
419
        buf += 2;
420
    }
421
}
422

    
423
/* return -1 if error, 0 if OK */
424
static int put_packet_binary(GDBState *s, const char *buf, int len)
425
{
426
    int csum, i;
427
    uint8_t *p;
428

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

    
442
        s->last_packet_len = p - s->last_packet;
443
        put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
444

    
445
#ifdef CONFIG_USER_ONLY
446
        i = get_char(s);
447
        if (i < 0)
448
            return -1;
449
        if (i == '+')
450
            break;
451
#else
452
        break;
453
#endif
454
    }
455
    return 0;
456
}
457

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

    
465
    return put_packet_binary(s, buf, strlen(buf));
466
}
467

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

    
489
#if TARGET_LONG_BITS == 64
490
#define GET_REGL(val) GET_REG64(val)
491
#define ldtul_p(addr) ldq_p(addr)
492
#else
493
#define GET_REGL(val) GET_REG32(val)
494
#define ldtul_p(addr) ldl_p(addr)
495
#endif
496

    
497
#if defined(TARGET_I386)
498

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

    
508
#define NUM_CORE_REGS (CPU_NB_REGS * 2 + 25)
509

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

    
557
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int i)
558
{
559
    uint32_t tmp;
560

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

    
621
#elif defined (TARGET_PPC)
622

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

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

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

    
719
#elif defined (TARGET_SPARC)
720

    
721
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
722
#define NUM_CORE_REGS 86
723
#else
724
#define NUM_CORE_REGS 72
725
#endif
726

    
727
#ifdef TARGET_ABI32
728
#define GET_REGA(val) GET_REG32(val)
729
#else
730
#define GET_REGA(val) GET_REGL(val)
731
#endif
732

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

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

    
788
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
789
{
790
#if defined(TARGET_ABI32)
791
    abi_ulong tmp;
792

    
793
    tmp = ldl_p(mem_buf);
794
#else
795
    target_ulong tmp;
796

    
797
    tmp = ldtul_p(mem_buf);
798
#endif
799

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

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

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

    
890
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
891
{
892
    uint32_t tmp;
893

    
894
    tmp = ldl_p(mem_buf);
895

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

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

    
927
#elif defined (TARGET_M68K)
928

    
929
#define NUM_CORE_REGS 18
930

    
931
#define GDB_CORE_XML "cf-core.xml"
932

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

    
952
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
953
{
954
    uint32_t tmp;
955

    
956
    tmp = ldl_p(mem_buf);
957

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

    
975
#define NUM_CORE_REGS 73
976

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

    
1009
    return 0;
1010
}
1011

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

    
1023
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1024
{
1025
    target_ulong tmp;
1026

    
1027
    tmp = ldtul_p(mem_buf);
1028

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

    
1070
    return sizeof(target_ulong);
1071
}
1072
#elif defined (TARGET_SH4)
1073

    
1074
/* Hint: Use "set architecture sh4" in GDB to see fpu registers */
1075
/* FIXME: We should use XML for this.  */
1076

    
1077
#define NUM_CORE_REGS 59
1078

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

    
1110
    return 0;
1111
}
1112

    
1113
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1114
{
1115
    uint32_t tmp;
1116

    
1117
    tmp = ldl_p(mem_buf);
1118

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

    
1153
    return 4;
1154
}
1155
#elif defined (TARGET_CRIS)
1156

    
1157
#define NUM_CORE_REGS 49
1158

    
1159
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1160
{
1161
    uint8_t srs;
1162

    
1163
    srs = env->pregs[PR_SRS];
1164
    if (n < 16) {
1165
        GET_REG32(env->regs[n]);
1166
    }
1167

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

    
1183
    return 0;
1184
}
1185

    
1186
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1187
{
1188
    uint32_t tmp;
1189

    
1190
    if (n > 49)
1191
        return 0;
1192

    
1193
    tmp = ldl_p(mem_buf);
1194

    
1195
    if (n < 16) {
1196
        env->regs[n] = tmp;
1197
    }
1198

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

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

    
1213
    return 4;
1214
}
1215
#elif defined (TARGET_ALPHA)
1216

    
1217
#define NUM_CORE_REGS 65
1218

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

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

    
1243
    return 0;
1244
}
1245

    
1246
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1247
{
1248
    target_ulong tmp;
1249
    tmp = ldtul_p(mem_buf);
1250

    
1251
    if (n < 31) {
1252
        env->ir[n] = tmp;
1253
    }
1254

    
1255
    if (n > 31 && n < 63) {
1256
        env->fir[n - 32] = ldfl_p(mem_buf);
1257
    }
1258

    
1259
    if (n == 64 ) {
1260
       env->pc=tmp;
1261
    }
1262

    
1263
    return 8;
1264
}
1265
#else
1266

    
1267
#define NUM_CORE_REGS 0
1268

    
1269
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1270
{
1271
    return 0;
1272
}
1273

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

    
1279
#endif
1280

    
1281
static int num_g_regs = NUM_CORE_REGS;
1282

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

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

    
1305
static const char *get_feature_xml(const char *p, const char **newp)
1306
{
1307
    extern const char *const xml_builtin[][2];
1308
    size_t len;
1309
    int i;
1310
    const char *name;
1311
    static char target_xml[1024];
1312

    
1313
    len = 0;
1314
    while (p[len] && p[len] != ':')
1315
        len++;
1316
    *newp = p + len;
1317

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

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

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

    
1349
static int gdb_read_register(CPUState *env, uint8_t *mem_buf, int reg)
1350
{
1351
    GDBRegisterState *r;
1352

    
1353
    if (reg < NUM_CORE_REGS)
1354
        return cpu_gdb_read_register(env, mem_buf, reg);
1355

    
1356
    for (r = env->gdb_regs; r; r = r->next) {
1357
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1358
            return r->get_reg(env, mem_buf, reg - r->base_reg);
1359
        }
1360
    }
1361
    return 0;
1362
}
1363

    
1364
static int gdb_write_register(CPUState *env, uint8_t *mem_buf, int reg)
1365
{
1366
    GDBRegisterState *r;
1367

    
1368
    if (reg < NUM_CORE_REGS)
1369
        return cpu_gdb_write_register(env, mem_buf, reg);
1370

    
1371
    for (r = env->gdb_regs; r; r = r->next) {
1372
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1373
            return r->set_reg(env, mem_buf, reg - r->base_reg);
1374
        }
1375
    }
1376
    return 0;
1377
}
1378

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

    
1385
void gdb_register_coprocessor(CPUState * env,
1386
                             gdb_reg_cb get_reg, gdb_reg_cb set_reg,
1387
                             int num_regs, const char *xml, int g_pos)
1388
{
1389
    GDBRegisterState *s;
1390
    GDBRegisterState **p;
1391
    static int last_reg = NUM_CORE_REGS;
1392

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

    
1419
/* GDB breakpoint/watchpoint types */
1420
#define GDB_BREAKPOINT_SW        0
1421
#define GDB_BREAKPOINT_HW        1
1422
#define GDB_WATCHPOINT_WRITE     2
1423
#define GDB_WATCHPOINT_READ      3
1424
#define GDB_WATCHPOINT_ACCESS    4
1425

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

    
1434
static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
1435
{
1436
    CPUState *env;
1437
    int err = 0;
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
    switch (type) {
1471
    case GDB_BREAKPOINT_SW:
1472
    case GDB_BREAKPOINT_HW:
1473
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1474
            err = cpu_breakpoint_remove(env, addr, BP_GDB);
1475
            if (err)
1476
                break;
1477
        }
1478
        return err;
1479
#ifndef CONFIG_USER_ONLY
1480
    case GDB_WATCHPOINT_WRITE:
1481
    case GDB_WATCHPOINT_READ:
1482
    case GDB_WATCHPOINT_ACCESS:
1483
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1484
            err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]);
1485
            if (err)
1486
                break;
1487
        }
1488
        return err;
1489
#endif
1490
    default:
1491
        return -ENOSYS;
1492
    }
1493
}
1494

    
1495
static void gdb_breakpoint_remove_all(void)
1496
{
1497
    CPUState *env;
1498

    
1499
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
1500
        cpu_breakpoint_remove_all(env, BP_GDB);
1501
#ifndef CONFIG_USER_ONLY
1502
        cpu_watchpoint_remove_all(env, BP_GDB);
1503
#endif
1504
    }
1505
}
1506

    
1507
static int gdb_handle_packet(GDBState *s, const char *line_buf)
1508
{
1509
    CPUState *env;
1510
    const char *p;
1511
    int ch, reg_size, type, res, thread;
1512
    char buf[MAX_PACKET_LENGTH];
1513
    uint8_t mem_buf[MAX_PACKET_LENGTH];
1514
    uint8_t *registers;
1515
    target_ulong addr, len;
1516

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

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

    
1836
            gdb_has_xml = 1;
1837
            p += 19;
1838
            xml = get_feature_xml(p, &p);
1839
            if (!xml) {
1840
                snprintf(buf, sizeof(buf), "E00");
1841
                put_packet(s, buf);
1842
                break;
1843
            }
1844

    
1845
            if (*p == ':')
1846
                p++;
1847
            addr = strtoul(p, (char **)&p, 16);
1848
            if (*p == ',')
1849
                p++;
1850
            len = strtoul(p, (char **)&p, 16);
1851

    
1852
            total_len = strlen(xml);
1853
            if (addr > total_len) {
1854
                snprintf(buf, sizeof(buf), "E00");
1855
                put_packet(s, buf);
1856
                break;
1857
            }
1858
            if (len > (MAX_PACKET_LENGTH - 5) / 2)
1859
                len = (MAX_PACKET_LENGTH - 5) / 2;
1860
            if (len < total_len - addr) {
1861
                buf[0] = 'm';
1862
                len = memtox(buf + 1, xml + addr, len);
1863
            } else {
1864
                buf[0] = 'l';
1865
                len = memtox(buf + 1, xml + addr, total_len - addr);
1866
            }
1867
            put_packet_binary(s, buf, len + 1);
1868
            break;
1869
        }
1870
#endif
1871
        /* Unrecognised 'q' command.  */
1872
        goto unknown_command;
1873

    
1874
    default:
1875
    unknown_command:
1876
        /* put empty packet */
1877
        buf[0] = '\0';
1878
        put_packet(s, buf);
1879
        break;
1880
    }
1881
    return RS_IDLE;
1882
}
1883

    
1884
void gdb_set_stop_cpu(CPUState *env)
1885
{
1886
    gdbserver_state->c_cpu = env;
1887
    gdbserver_state->g_cpu = env;
1888
}
1889

    
1890
#ifndef CONFIG_USER_ONLY
1891
static void gdb_vm_state_change(void *opaque, int running, int reason)
1892
{
1893
    GDBState *s = gdbserver_state;
1894
    CPUState *env = s->c_cpu;
1895
    char buf[256];
1896
    const char *type;
1897
    int ret;
1898

    
1899
    if (running || (reason != EXCP_DEBUG && reason != EXCP_INTERRUPT) ||
1900
        s->state == RS_SYSCALL)
1901
        return;
1902

    
1903
    /* disable single step if it was enable */
1904
    cpu_single_step(env, 0);
1905

    
1906
    if (reason == EXCP_DEBUG) {
1907
        if (env->watchpoint_hit) {
1908
            switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
1909
            case BP_MEM_READ:
1910
                type = "r";
1911
                break;
1912
            case BP_MEM_ACCESS:
1913
                type = "a";
1914
                break;
1915
            default:
1916
                type = "";
1917
                break;
1918
            }
1919
            snprintf(buf, sizeof(buf),
1920
                     "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
1921
                     GDB_SIGNAL_TRAP, env->cpu_index+1, type,
1922
                     env->watchpoint_hit->vaddr);
1923
            put_packet(s, buf);
1924
            env->watchpoint_hit = NULL;
1925
            return;
1926
        }
1927
        tb_flush(env);
1928
        ret = GDB_SIGNAL_TRAP;
1929
    } else {
1930
        ret = GDB_SIGNAL_INT;
1931
    }
1932
    snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, env->cpu_index+1);
1933
    put_packet(s, buf);
1934
}
1935
#endif
1936

    
1937
/* Send a gdb syscall request.
1938
   This accepts limited printf-style format specifiers, specifically:
1939
    %x  - target_ulong argument printed in hex.
1940
    %lx - 64-bit argument printed in hex.
1941
    %s  - string pointer (target_ulong) and length (int) pair.  */
1942
void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
1943
{
1944
    va_list va;
1945
    char buf[256];
1946
    char *p;
1947
    target_ulong addr;
1948
    uint64_t i64;
1949
    GDBState *s;
1950

    
1951
    s = gdbserver_state;
1952
    if (!s)
1953
        return;
1954
    gdb_current_syscall_cb = cb;
1955
    s->state = RS_SYSCALL;
1956
#ifndef CONFIG_USER_ONLY
1957
    vm_stop(EXCP_DEBUG);
1958
#endif
1959
    s->state = RS_IDLE;
1960
    va_start(va, fmt);
1961
    p = buf;
1962
    *(p++) = 'F';
1963
    while (*fmt) {
1964
        if (*fmt == '%') {
1965
            fmt++;
1966
            switch (*fmt++) {
1967
            case 'x':
1968
                addr = va_arg(va, target_ulong);
1969
                p += snprintf(p, &buf[sizeof(buf)] - p, TARGET_FMT_lx, addr);
1970
                break;
1971
            case 'l':
1972
                if (*(fmt++) != 'x')
1973
                    goto bad_format;
1974
                i64 = va_arg(va, uint64_t);
1975
                p += snprintf(p, &buf[sizeof(buf)] - p, "%" PRIx64, i64);
1976
                break;
1977
            case 's':
1978
                addr = va_arg(va, target_ulong);
1979
                p += snprintf(p, &buf[sizeof(buf)] - p, TARGET_FMT_lx "/%x",
1980
                              addr, va_arg(va, int));
1981
                break;
1982
            default:
1983
            bad_format:
1984
                fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
1985
                        fmt - 1);
1986
                break;
1987
            }
1988
        } else {
1989
            *(p++) = *(fmt++);
1990
        }
1991
    }
1992
    *p = 0;
1993
    va_end(va);
1994
    put_packet(s, buf);
1995
#ifdef CONFIG_USER_ONLY
1996
    gdb_handlesig(s->c_cpu, 0);
1997
#else
1998
    cpu_interrupt(s->c_cpu, CPU_INTERRUPT_EXIT);
1999
#endif
2000
}
2001

    
2002
static void gdb_read_byte(GDBState *s, int ch)
2003
{
2004
    int i, csum;
2005
    uint8_t reply;
2006

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

    
2078
#ifdef CONFIG_USER_ONLY
2079
int
2080
gdb_queuesig (void)
2081
{
2082
    GDBState *s;
2083

    
2084
    s = gdbserver_state;
2085

    
2086
    if (gdbserver_fd < 0 || s->fd < 0)
2087
        return 0;
2088
    else
2089
        return 1;
2090
}
2091

    
2092
int
2093
gdb_handlesig (CPUState *env, int sig)
2094
{
2095
  GDBState *s;
2096
  char buf[256];
2097
  int n;
2098

    
2099
  s = gdbserver_state;
2100
  if (gdbserver_fd < 0 || s->fd < 0)
2101
    return sig;
2102

    
2103
  /* disable single step if it was enabled */
2104
  cpu_single_step(env, 0);
2105
  tb_flush(env);
2106

    
2107
  if (sig != 0)
2108
    {
2109
      snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb (sig));
2110
      put_packet(s, buf);
2111
    }
2112
  /* put_packet() might have detected that the peer terminated the 
2113
     connection.  */
2114
  if (s->fd < 0)
2115
      return sig;
2116

    
2117
  sig = 0;
2118
  s->state = RS_IDLE;
2119
  s->running_state = 0;
2120
  while (s->running_state == 0) {
2121
      n = read (s->fd, buf, 256);
2122
      if (n > 0)
2123
        {
2124
          int i;
2125

    
2126
          for (i = 0; i < n; i++)
2127
            gdb_read_byte (s, buf[i]);
2128
        }
2129
      else if (n == 0 || errno != EAGAIN)
2130
        {
2131
          /* XXX: Connection closed.  Should probably wait for annother
2132
             connection before continuing.  */
2133
          return sig;
2134
        }
2135
  }
2136
  sig = s->signal;
2137
  s->signal = 0;
2138
  return sig;
2139
}
2140

    
2141
/* Tell the remote gdb that the process has exited.  */
2142
void gdb_exit(CPUState *env, int code)
2143
{
2144
  GDBState *s;
2145
  char buf[4];
2146

    
2147
  s = gdbserver_state;
2148
  if (gdbserver_fd < 0 || s->fd < 0)
2149
    return;
2150

    
2151
  snprintf(buf, sizeof(buf), "W%02x", code);
2152
  put_packet(s, buf);
2153
}
2154

    
2155
/* Tell the remote gdb that the process has exited due to SIG.  */
2156
void gdb_signalled(CPUState *env, int sig)
2157
{
2158
  GDBState *s;
2159
  char buf[4];
2160

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

    
2165
  snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb (sig));
2166
  put_packet(s, buf);
2167
}
2168

    
2169
static void gdb_accept(void)
2170
{
2171
    GDBState *s;
2172
    struct sockaddr_in sockaddr;
2173
    socklen_t len;
2174
    int val, fd;
2175

    
2176
    for(;;) {
2177
        len = sizeof(sockaddr);
2178
        fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
2179
        if (fd < 0 && errno != EINTR) {
2180
            perror("accept");
2181
            return;
2182
        } else if (fd >= 0) {
2183
            break;
2184
        }
2185
    }
2186

    
2187
    /* set short latency */
2188
    val = 1;
2189
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
2190

    
2191
    s = qemu_mallocz(sizeof(GDBState));
2192

    
2193
    memset (s, 0, sizeof (GDBState));
2194
    s->c_cpu = first_cpu;
2195
    s->g_cpu = first_cpu;
2196
    s->fd = fd;
2197
    gdb_has_xml = 0;
2198

    
2199
    gdbserver_state = s;
2200

    
2201
    fcntl(fd, F_SETFL, O_NONBLOCK);
2202
}
2203

    
2204
static int gdbserver_open(int port)
2205
{
2206
    struct sockaddr_in sockaddr;
2207
    int fd, val, ret;
2208

    
2209
    fd = socket(PF_INET, SOCK_STREAM, 0);
2210
    if (fd < 0) {
2211
        perror("socket");
2212
        return -1;
2213
    }
2214

    
2215
    /* allow fast reuse */
2216
    val = 1;
2217
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&val, sizeof(val));
2218

    
2219
    sockaddr.sin_family = AF_INET;
2220
    sockaddr.sin_port = htons(port);
2221
    sockaddr.sin_addr.s_addr = 0;
2222
    ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
2223
    if (ret < 0) {
2224
        perror("bind");
2225
        return -1;
2226
    }
2227
    ret = listen(fd, 0);
2228
    if (ret < 0) {
2229
        perror("listen");
2230
        return -1;
2231
    }
2232
    return fd;
2233
}
2234

    
2235
int gdbserver_start(int port)
2236
{
2237
    gdbserver_fd = gdbserver_open(port);
2238
    if (gdbserver_fd < 0)
2239
        return -1;
2240
    /* accept connections */
2241
    gdb_accept();
2242
    return 0;
2243
}
2244

    
2245
/* Disable gdb stub for child processes.  */
2246
void gdbserver_fork(CPUState *env)
2247
{
2248
    GDBState *s = gdbserver_state;
2249
    if (gdbserver_fd < 0 || s->fd < 0)
2250
      return;
2251
    close(s->fd);
2252
    s->fd = -1;
2253
    cpu_breakpoint_remove_all(env, BP_GDB);
2254
    cpu_watchpoint_remove_all(env, BP_GDB);
2255
}
2256
#else
2257
static int gdb_chr_can_receive(void *opaque)
2258
{
2259
  /* We can handle an arbitrarily large amount of data.
2260
   Pick the maximum packet size, which is as good as anything.  */
2261
  return MAX_PACKET_LENGTH;
2262
}
2263

    
2264
static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
2265
{
2266
    int i;
2267

    
2268
    for (i = 0; i < size; i++) {
2269
        gdb_read_byte(gdbserver_state, buf[i]);
2270
    }
2271
}
2272

    
2273
static void gdb_chr_event(void *opaque, int event)
2274
{
2275
    switch (event) {
2276
    case CHR_EVENT_RESET:
2277
        vm_stop(EXCP_INTERRUPT);
2278
        gdb_has_xml = 0;
2279
        break;
2280
    default:
2281
        break;
2282
    }
2283
}
2284

    
2285
int gdbserver_start(const char *port)
2286
{
2287
    GDBState *s;
2288
    char gdbstub_port_name[128];
2289
    int port_num;
2290
    char *p;
2291
    CharDriverState *chr;
2292

    
2293
    if (!port || !*port)
2294
      return -1;
2295

    
2296
    port_num = strtol(port, &p, 10);
2297
    if (*p == 0) {
2298
        /* A numeric value is interpreted as a port number.  */
2299
        snprintf(gdbstub_port_name, sizeof(gdbstub_port_name),
2300
                 "tcp::%d,nowait,nodelay,server", port_num);
2301
        port = gdbstub_port_name;
2302
    }
2303

    
2304
    chr = qemu_chr_open("gdb", port, NULL);
2305
    if (!chr)
2306
        return -1;
2307

    
2308
    s = qemu_mallocz(sizeof(GDBState));
2309
    s->c_cpu = first_cpu;
2310
    s->g_cpu = first_cpu;
2311
    s->chr = chr;
2312
    gdbserver_state = s;
2313
    qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
2314
                          gdb_chr_event, NULL);
2315
    qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
2316
    return 0;
2317
}
2318
#endif