Statistics
| Branch: | Revision:

root / gdbstub.c @ ceecf1d1

History | View | Annotate | Download (57.4 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
#define NUM_CORE_REGS 71
624

    
625
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
626
{
627
    if (n < 32) {
628
        /* gprs */
629
        GET_REGL(env->gpr[n]);
630
    } else if (n < 64) {
631
        /* fprs */
632
        stfq_p(mem_buf, env->fpr[n-32]);
633
        return 8;
634
    } else {
635
        switch (n) {
636
        case 64: GET_REGL(env->nip);
637
        case 65: GET_REGL(env->msr);
638
        case 66:
639
            {
640
                uint32_t cr = 0;
641
                int i;
642
                for (i = 0; i < 8; i++)
643
                    cr |= env->crf[i] << (32 - ((i + 1) * 4));
644
                GET_REG32(cr);
645
            }
646
        case 67: GET_REGL(env->lr);
647
        case 68: GET_REGL(env->ctr);
648
        case 69: GET_REGL(env->xer);
649
        case 70: GET_REG32(0); /* fpscr */
650
        }
651
    }
652
    return 0;
653
}
654

    
655
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
656
{
657
    if (n < 32) {
658
        /* gprs */
659
        env->gpr[n] = ldtul_p(mem_buf);
660
        return sizeof(target_ulong);
661
    } else if (n < 64) {
662
        /* fprs */
663
        env->fpr[n-32] = ldfq_p(mem_buf);
664
        return 8;
665
    } else {
666
        switch (n) {
667
        case 64:
668
            env->nip = ldtul_p(mem_buf);
669
            return sizeof(target_ulong);
670
        case 65:
671
            ppc_store_msr(env, ldtul_p(mem_buf));
672
            return sizeof(target_ulong);
673
        case 66:
674
            {
675
                uint32_t cr = ldl_p(mem_buf);
676
                int i;
677
                for (i = 0; i < 8; i++)
678
                    env->crf[i] = (cr >> (32 - ((i + 1) * 4))) & 0xF;
679
                return 4;
680
            }
681
        case 67:
682
            env->lr = ldtul_p(mem_buf);
683
            return sizeof(target_ulong);
684
        case 68:
685
            env->ctr = ldtul_p(mem_buf);
686
            return sizeof(target_ulong);
687
        case 69:
688
            env->xer = ldtul_p(mem_buf);
689
            return sizeof(target_ulong);
690
        case 70:
691
            /* fpscr */
692
            return 4;
693
        }
694
    }
695
    return 0;
696
}
697

    
698
#elif defined (TARGET_SPARC)
699

    
700
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
701
#define NUM_CORE_REGS 86
702
#else
703
#define NUM_CORE_REGS 72
704
#endif
705

    
706
#ifdef TARGET_ABI32
707
#define GET_REGA(val) GET_REG32(val)
708
#else
709
#define GET_REGA(val) GET_REGL(val)
710
#endif
711

    
712
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
713
{
714
    if (n < 8) {
715
        /* g0..g7 */
716
        GET_REGA(env->gregs[n]);
717
    }
718
    if (n < 32) {
719
        /* register window */
720
        GET_REGA(env->regwptr[n - 8]);
721
    }
722
#if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
723
    if (n < 64) {
724
        /* fprs */
725
        GET_REG32(*((uint32_t *)&env->fpr[n - 32]));
726
    }
727
    /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
728
    switch (n) {
729
    case 64: GET_REGA(env->y);
730
    case 65: GET_REGA(GET_PSR(env));
731
    case 66: GET_REGA(env->wim);
732
    case 67: GET_REGA(env->tbr);
733
    case 68: GET_REGA(env->pc);
734
    case 69: GET_REGA(env->npc);
735
    case 70: GET_REGA(env->fsr);
736
    case 71: GET_REGA(0); /* csr */
737
    default: GET_REGA(0);
738
    }
739
#else
740
    if (n < 64) {
741
        /* f0-f31 */
742
        GET_REG32(*((uint32_t *)&env->fpr[n - 32]));
743
    }
744
    if (n < 80) {
745
        /* f32-f62 (double width, even numbers only) */
746
        uint64_t val;
747

    
748
        val = (uint64_t)*((uint32_t *)&env->fpr[(n - 64) * 2 + 32]) << 32;
749
        val |= *((uint32_t *)&env->fpr[(n - 64) * 2 + 33]);
750
        GET_REG64(val);
751
    }
752
    switch (n) {
753
    case 80: GET_REGL(env->pc);
754
    case 81: GET_REGL(env->npc);
755
    case 82: GET_REGL(((uint64_t)GET_CCR(env) << 32) |
756
                           ((env->asi & 0xff) << 24) |
757
                           ((env->pstate & 0xfff) << 8) |
758
                           GET_CWP64(env));
759
    case 83: GET_REGL(env->fsr);
760
    case 84: GET_REGL(env->fprs);
761
    case 85: GET_REGL(env->y);
762
    }
763
#endif
764
    return 0;
765
}
766

    
767
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
768
{
769
#if defined(TARGET_ABI32)
770
    abi_ulong tmp;
771

    
772
    tmp = ldl_p(mem_buf);
773
#else
774
    target_ulong tmp;
775

    
776
    tmp = ldtul_p(mem_buf);
777
#endif
778

    
779
    if (n < 8) {
780
        /* g0..g7 */
781
        env->gregs[n] = tmp;
782
    } else if (n < 32) {
783
        /* register window */
784
        env->regwptr[n - 8] = tmp;
785
    }
786
#if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
787
    else if (n < 64) {
788
        /* fprs */
789
        *((uint32_t *)&env->fpr[n - 32]) = tmp;
790
    } else {
791
        /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
792
        switch (n) {
793
        case 64: env->y = tmp; break;
794
        case 65: PUT_PSR(env, tmp); break;
795
        case 66: env->wim = tmp; break;
796
        case 67: env->tbr = tmp; break;
797
        case 68: env->pc = tmp; break;
798
        case 69: env->npc = tmp; break;
799
        case 70: env->fsr = tmp; break;
800
        default: return 0;
801
        }
802
    }
803
    return 4;
804
#else
805
    else if (n < 64) {
806
        /* f0-f31 */
807
        env->fpr[n] = ldfl_p(mem_buf);
808
        return 4;
809
    } else if (n < 80) {
810
        /* f32-f62 (double width, even numbers only) */
811
        *((uint32_t *)&env->fpr[(n - 64) * 2 + 32]) = tmp >> 32;
812
        *((uint32_t *)&env->fpr[(n - 64) * 2 + 33]) = tmp;
813
    } else {
814
        switch (n) {
815
        case 80: env->pc = tmp; break;
816
        case 81: env->npc = tmp; break;
817
        case 82:
818
            PUT_CCR(env, tmp >> 32);
819
            env->asi = (tmp >> 24) & 0xff;
820
            env->pstate = (tmp >> 8) & 0xfff;
821
            PUT_CWP64(env, tmp & 0xff);
822
            break;
823
        case 83: env->fsr = tmp; break;
824
        case 84: env->fprs = tmp; break;
825
        case 85: env->y = tmp; break;
826
        default: return 0;
827
        }
828
    }
829
    return 8;
830
#endif
831
}
832
#elif defined (TARGET_ARM)
833

    
834
/* Old gdb always expect FPA registers.  Newer (xml-aware) gdb only expect
835
   whatever the target description contains.  Due to a historical mishap
836
   the FPA registers appear in between core integer regs and the CPSR.
837
   We hack round this by giving the FPA regs zero size when talking to a
838
   newer gdb.  */
839
#define NUM_CORE_REGS 26
840
#define GDB_CORE_XML "arm-core.xml"
841

    
842
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
843
{
844
    if (n < 16) {
845
        /* Core integer register.  */
846
        GET_REG32(env->regs[n]);
847
    }
848
    if (n < 24) {
849
        /* FPA registers.  */
850
        if (gdb_has_xml)
851
            return 0;
852
        memset(mem_buf, 0, 12);
853
        return 12;
854
    }
855
    switch (n) {
856
    case 24:
857
        /* FPA status register.  */
858
        if (gdb_has_xml)
859
            return 0;
860
        GET_REG32(0);
861
    case 25:
862
        /* CPSR */
863
        GET_REG32(cpsr_read(env));
864
    }
865
    /* Unknown register.  */
866
    return 0;
867
}
868

    
869
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
870
{
871
    uint32_t tmp;
872

    
873
    tmp = ldl_p(mem_buf);
874

    
875
    /* Mask out low bit of PC to workaround gdb bugs.  This will probably
876
       cause problems if we ever implement the Jazelle DBX extensions.  */
877
    if (n == 15)
878
        tmp &= ~1;
879

    
880
    if (n < 16) {
881
        /* Core integer register.  */
882
        env->regs[n] = tmp;
883
        return 4;
884
    }
885
    if (n < 24) { /* 16-23 */
886
        /* FPA registers (ignored).  */
887
        if (gdb_has_xml)
888
            return 0;
889
        return 12;
890
    }
891
    switch (n) {
892
    case 24:
893
        /* FPA status register (ignored).  */
894
        if (gdb_has_xml)
895
            return 0;
896
        return 4;
897
    case 25:
898
        /* CPSR */
899
        cpsr_write (env, tmp, 0xffffffff);
900
        return 4;
901
    }
902
    /* Unknown register.  */
903
    return 0;
904
}
905

    
906
#elif defined (TARGET_M68K)
907

    
908
#define NUM_CORE_REGS 18
909

    
910
#define GDB_CORE_XML "cf-core.xml"
911

    
912
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
913
{
914
    if (n < 8) {
915
        /* D0-D7 */
916
        GET_REG32(env->dregs[n]);
917
    } else if (n < 16) {
918
        /* A0-A7 */
919
        GET_REG32(env->aregs[n - 8]);
920
    } else {
921
        switch (n) {
922
        case 16: GET_REG32(env->sr);
923
        case 17: GET_REG32(env->pc);
924
        }
925
    }
926
    /* FP registers not included here because they vary between
927
       ColdFire and m68k.  Use XML bits for these.  */
928
    return 0;
929
}
930

    
931
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
932
{
933
    uint32_t tmp;
934

    
935
    tmp = ldl_p(mem_buf);
936

    
937
    if (n < 8) {
938
        /* D0-D7 */
939
        env->dregs[n] = tmp;
940
    } else if (n < 8) {
941
        /* A0-A7 */
942
        env->aregs[n - 8] = tmp;
943
    } else {
944
        switch (n) {
945
        case 16: env->sr = tmp; break;
946
        case 17: env->pc = tmp; break;
947
        default: return 0;
948
        }
949
    }
950
    return 4;
951
}
952
#elif defined (TARGET_MIPS)
953

    
954
#define NUM_CORE_REGS 73
955

    
956
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
957
{
958
    if (n < 32) {
959
        GET_REGL(env->active_tc.gpr[n]);
960
    }
961
    if (env->CP0_Config1 & (1 << CP0C1_FP)) {
962
        if (n >= 38 && n < 70) {
963
            if (env->CP0_Status & (1 << CP0St_FR))
964
                GET_REGL(env->active_fpu.fpr[n - 38].d);
965
            else
966
                GET_REGL(env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX]);
967
        }
968
        switch (n) {
969
        case 70: GET_REGL((int32_t)env->active_fpu.fcr31);
970
        case 71: GET_REGL((int32_t)env->active_fpu.fcr0);
971
        }
972
    }
973
    switch (n) {
974
    case 32: GET_REGL((int32_t)env->CP0_Status);
975
    case 33: GET_REGL(env->active_tc.LO[0]);
976
    case 34: GET_REGL(env->active_tc.HI[0]);
977
    case 35: GET_REGL(env->CP0_BadVAddr);
978
    case 36: GET_REGL((int32_t)env->CP0_Cause);
979
    case 37: GET_REGL(env->active_tc.PC);
980
    case 72: GET_REGL(0); /* fp */
981
    case 89: GET_REGL((int32_t)env->CP0_PRid);
982
    }
983
    if (n >= 73 && n <= 88) {
984
        /* 16 embedded regs.  */
985
        GET_REGL(0);
986
    }
987

    
988
    return 0;
989
}
990

    
991
/* convert MIPS rounding mode in FCR31 to IEEE library */
992
static unsigned int ieee_rm[] =
993
  {
994
    float_round_nearest_even,
995
    float_round_to_zero,
996
    float_round_up,
997
    float_round_down
998
  };
999
#define RESTORE_ROUNDING_MODE \
1000
    set_float_rounding_mode(ieee_rm[env->active_fpu.fcr31 & 3], &env->active_fpu.fp_status)
1001

    
1002
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1003
{
1004
    target_ulong tmp;
1005

    
1006
    tmp = ldtul_p(mem_buf);
1007

    
1008
    if (n < 32) {
1009
        env->active_tc.gpr[n] = tmp;
1010
        return sizeof(target_ulong);
1011
    }
1012
    if (env->CP0_Config1 & (1 << CP0C1_FP)
1013
            && n >= 38 && n < 73) {
1014
        if (n < 70) {
1015
            if (env->CP0_Status & (1 << CP0St_FR))
1016
              env->active_fpu.fpr[n - 38].d = tmp;
1017
            else
1018
              env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX] = tmp;
1019
        }
1020
        switch (n) {
1021
        case 70:
1022
            env->active_fpu.fcr31 = tmp & 0xFF83FFFF;
1023
            /* set rounding mode */
1024
            RESTORE_ROUNDING_MODE;
1025
#ifndef CONFIG_SOFTFLOAT
1026
            /* no floating point exception for native float */
1027
            SET_FP_ENABLE(env->active_fpu.fcr31, 0);
1028
#endif
1029
            break;
1030
        case 71: env->active_fpu.fcr0 = tmp; break;
1031
        }
1032
        return sizeof(target_ulong);
1033
    }
1034
    switch (n) {
1035
    case 32: env->CP0_Status = tmp; break;
1036
    case 33: env->active_tc.LO[0] = tmp; break;
1037
    case 34: env->active_tc.HI[0] = tmp; break;
1038
    case 35: env->CP0_BadVAddr = tmp; break;
1039
    case 36: env->CP0_Cause = tmp; break;
1040
    case 37: env->active_tc.PC = tmp; break;
1041
    case 72: /* fp, ignored */ break;
1042
    default: 
1043
        if (n > 89)
1044
            return 0;
1045
        /* Other registers are readonly.  Ignore writes.  */
1046
        break;
1047
    }
1048

    
1049
    return sizeof(target_ulong);
1050
}
1051
#elif defined (TARGET_SH4)
1052

    
1053
/* Hint: Use "set architecture sh4" in GDB to see fpu registers */
1054
/* FIXME: We should use XML for this.  */
1055

    
1056
#define NUM_CORE_REGS 59
1057

    
1058
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1059
{
1060
    if (n < 8) {
1061
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1062
            GET_REGL(env->gregs[n + 16]);
1063
        } else {
1064
            GET_REGL(env->gregs[n]);
1065
        }
1066
    } else if (n < 16) {
1067
        GET_REGL(env->gregs[n - 8]);
1068
    } else if (n >= 25 && n < 41) {
1069
        GET_REGL(env->fregs[(n - 25) + ((env->fpscr & FPSCR_FR) ? 16 : 0)]);
1070
    } else if (n >= 43 && n < 51) {
1071
        GET_REGL(env->gregs[n - 43]);
1072
    } else if (n >= 51 && n < 59) {
1073
        GET_REGL(env->gregs[n - (51 - 16)]);
1074
    }
1075
    switch (n) {
1076
    case 16: GET_REGL(env->pc);
1077
    case 17: GET_REGL(env->pr);
1078
    case 18: GET_REGL(env->gbr);
1079
    case 19: GET_REGL(env->vbr);
1080
    case 20: GET_REGL(env->mach);
1081
    case 21: GET_REGL(env->macl);
1082
    case 22: GET_REGL(env->sr);
1083
    case 23: GET_REGL(env->fpul);
1084
    case 24: GET_REGL(env->fpscr);
1085
    case 41: GET_REGL(env->ssr);
1086
    case 42: GET_REGL(env->spc);
1087
    }
1088

    
1089
    return 0;
1090
}
1091

    
1092
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1093
{
1094
    uint32_t tmp;
1095

    
1096
    tmp = ldl_p(mem_buf);
1097

    
1098
    if (n < 8) {
1099
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1100
            env->gregs[n + 16] = tmp;
1101
        } else {
1102
            env->gregs[n] = tmp;
1103
        }
1104
        return 4;
1105
    } else if (n < 16) {
1106
        env->gregs[n - 8] = tmp;
1107
        return 4;
1108
    } else if (n >= 25 && n < 41) {
1109
        env->fregs[(n - 25) + ((env->fpscr & FPSCR_FR) ? 16 : 0)] = tmp;
1110
    } else if (n >= 43 && n < 51) {
1111
        env->gregs[n - 43] = tmp;
1112
        return 4;
1113
    } else if (n >= 51 && n < 59) {
1114
        env->gregs[n - (51 - 16)] = tmp;
1115
        return 4;
1116
    }
1117
    switch (n) {
1118
    case 16: env->pc = tmp;
1119
    case 17: env->pr = tmp;
1120
    case 18: env->gbr = tmp;
1121
    case 19: env->vbr = tmp;
1122
    case 20: env->mach = tmp;
1123
    case 21: env->macl = tmp;
1124
    case 22: env->sr = tmp;
1125
    case 23: env->fpul = tmp;
1126
    case 24: env->fpscr = tmp;
1127
    case 41: env->ssr = tmp;
1128
    case 42: env->spc = tmp;
1129
    default: return 0;
1130
    }
1131

    
1132
    return 4;
1133
}
1134
#elif defined (TARGET_CRIS)
1135

    
1136
#define NUM_CORE_REGS 49
1137

    
1138
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1139
{
1140
    uint8_t srs;
1141

    
1142
    srs = env->pregs[PR_SRS];
1143
    if (n < 16) {
1144
        GET_REG32(env->regs[n]);
1145
    }
1146

    
1147
    if (n >= 21 && n < 32) {
1148
        GET_REG32(env->pregs[n - 16]);
1149
    }
1150
    if (n >= 33 && n < 49) {
1151
        GET_REG32(env->sregs[srs][n - 33]);
1152
    }
1153
    switch (n) {
1154
    case 16: GET_REG8(env->pregs[0]);
1155
    case 17: GET_REG8(env->pregs[1]);
1156
    case 18: GET_REG32(env->pregs[2]);
1157
    case 19: GET_REG8(srs);
1158
    case 20: GET_REG16(env->pregs[4]);
1159
    case 32: GET_REG32(env->pc);
1160
    }
1161

    
1162
    return 0;
1163
}
1164

    
1165
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1166
{
1167
    uint32_t tmp;
1168

    
1169
    if (n > 49)
1170
        return 0;
1171

    
1172
    tmp = ldl_p(mem_buf);
1173

    
1174
    if (n < 16) {
1175
        env->regs[n] = tmp;
1176
    }
1177

    
1178
    if (n >= 21 && n < 32) {
1179
        env->pregs[n - 16] = tmp;
1180
    }
1181

    
1182
    /* FIXME: Should support function regs be writable?  */
1183
    switch (n) {
1184
    case 16: return 1;
1185
    case 17: return 1;
1186
    case 18: env->pregs[PR_PID] = tmp; break;
1187
    case 19: return 1;
1188
    case 20: return 2;
1189
    case 32: env->pc = tmp; break;
1190
    }
1191

    
1192
    return 4;
1193
}
1194
#elif defined (TARGET_ALPHA)
1195

    
1196
#define NUM_CORE_REGS 65
1197

    
1198
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1199
{
1200
    if (n < 31) {
1201
       GET_REGL(env->ir[n]);
1202
    }
1203
    else if (n == 31) {
1204
       GET_REGL(0);
1205
    }
1206
    else if (n<63) {
1207
       uint64_t val;
1208

    
1209
       val=*((uint64_t *)&env->fir[n-32]);
1210
       GET_REGL(val);
1211
    }
1212
    else if (n==63) {
1213
       GET_REGL(env->fpcr);
1214
    }
1215
    else if (n==64) {
1216
       GET_REGL(env->pc);
1217
    }
1218
    else {
1219
       GET_REGL(0);
1220
    }
1221

    
1222
    return 0;
1223
}
1224

    
1225
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1226
{
1227
    target_ulong tmp;
1228
    tmp = ldtul_p(mem_buf);
1229

    
1230
    if (n < 31) {
1231
        env->ir[n] = tmp;
1232
    }
1233

    
1234
    if (n > 31 && n < 63) {
1235
        env->fir[n - 32] = ldfl_p(mem_buf);
1236
    }
1237

    
1238
    if (n == 64 ) {
1239
       env->pc=tmp;
1240
    }
1241

    
1242
    return 8;
1243
}
1244
#else
1245

    
1246
#define NUM_CORE_REGS 0
1247

    
1248
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1249
{
1250
    return 0;
1251
}
1252

    
1253
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1254
{
1255
    return 0;
1256
}
1257

    
1258
#endif
1259

    
1260
static int num_g_regs = NUM_CORE_REGS;
1261

    
1262
#ifdef GDB_CORE_XML
1263
/* Encode data using the encoding for 'x' packets.  */
1264
static int memtox(char *buf, const char *mem, int len)
1265
{
1266
    char *p = buf;
1267
    char c;
1268

    
1269
    while (len--) {
1270
        c = *(mem++);
1271
        switch (c) {
1272
        case '#': case '$': case '*': case '}':
1273
            *(p++) = '}';
1274
            *(p++) = c ^ 0x20;
1275
            break;
1276
        default:
1277
            *(p++) = c;
1278
            break;
1279
        }
1280
    }
1281
    return p - buf;
1282
}
1283

    
1284
static const char *get_feature_xml(const char *p, const char **newp)
1285
{
1286
    extern const char *const xml_builtin[][2];
1287
    size_t len;
1288
    int i;
1289
    const char *name;
1290
    static char target_xml[1024];
1291

    
1292
    len = 0;
1293
    while (p[len] && p[len] != ':')
1294
        len++;
1295
    *newp = p + len;
1296

    
1297
    name = NULL;
1298
    if (strncmp(p, "target.xml", len) == 0) {
1299
        /* Generate the XML description for this CPU.  */
1300
        if (!target_xml[0]) {
1301
            GDBRegisterState *r;
1302

    
1303
            snprintf(target_xml, sizeof(target_xml),
1304
                     "<?xml version=\"1.0\"?>"
1305
                     "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
1306
                     "<target>"
1307
                     "<xi:include href=\"%s\"/>",
1308
                     GDB_CORE_XML);
1309

    
1310
            for (r = first_cpu->gdb_regs; r; r = r->next) {
1311
                strcat(target_xml, "<xi:include href=\"");
1312
                strcat(target_xml, r->xml);
1313
                strcat(target_xml, "\"/>");
1314
            }
1315
            strcat(target_xml, "</target>");
1316
        }
1317
        return target_xml;
1318
    }
1319
    for (i = 0; ; i++) {
1320
        name = xml_builtin[i][0];
1321
        if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
1322
            break;
1323
    }
1324
    return name ? xml_builtin[i][1] : NULL;
1325
}
1326
#endif
1327

    
1328
static int gdb_read_register(CPUState *env, uint8_t *mem_buf, int reg)
1329
{
1330
    GDBRegisterState *r;
1331

    
1332
    if (reg < NUM_CORE_REGS)
1333
        return cpu_gdb_read_register(env, mem_buf, reg);
1334

    
1335
    for (r = env->gdb_regs; r; r = r->next) {
1336
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1337
            return r->get_reg(env, mem_buf, reg - r->base_reg);
1338
        }
1339
    }
1340
    return 0;
1341
}
1342

    
1343
static int gdb_write_register(CPUState *env, uint8_t *mem_buf, int reg)
1344
{
1345
    GDBRegisterState *r;
1346

    
1347
    if (reg < NUM_CORE_REGS)
1348
        return cpu_gdb_write_register(env, mem_buf, reg);
1349

    
1350
    for (r = env->gdb_regs; r; r = r->next) {
1351
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1352
            return r->set_reg(env, mem_buf, reg - r->base_reg);
1353
        }
1354
    }
1355
    return 0;
1356
}
1357

    
1358
/* Register a supplemental set of CPU registers.  If g_pos is nonzero it
1359
   specifies the first register number and these registers are included in
1360
   a standard "g" packet.  Direction is relative to gdb, i.e. get_reg is
1361
   gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
1362
 */
1363

    
1364
void gdb_register_coprocessor(CPUState * env,
1365
                             gdb_reg_cb get_reg, gdb_reg_cb set_reg,
1366
                             int num_regs, const char *xml, int g_pos)
1367
{
1368
    GDBRegisterState *s;
1369
    GDBRegisterState **p;
1370
    static int last_reg = NUM_CORE_REGS;
1371

    
1372
    s = (GDBRegisterState *)qemu_mallocz(sizeof(GDBRegisterState));
1373
    s->base_reg = last_reg;
1374
    s->num_regs = num_regs;
1375
    s->get_reg = get_reg;
1376
    s->set_reg = set_reg;
1377
    s->xml = xml;
1378
    p = &env->gdb_regs;
1379
    while (*p) {
1380
        /* Check for duplicates.  */
1381
        if (strcmp((*p)->xml, xml) == 0)
1382
            return;
1383
        p = &(*p)->next;
1384
    }
1385
    /* Add to end of list.  */
1386
    last_reg += num_regs;
1387
    *p = s;
1388
    if (g_pos) {
1389
        if (g_pos != s->base_reg) {
1390
            fprintf(stderr, "Error: Bad gdb register numbering for '%s'\n"
1391
                    "Expected %d got %d\n", xml, g_pos, s->base_reg);
1392
        } else {
1393
            num_g_regs = last_reg;
1394
        }
1395
    }
1396
}
1397

    
1398
/* GDB breakpoint/watchpoint types */
1399
#define GDB_BREAKPOINT_SW        0
1400
#define GDB_BREAKPOINT_HW        1
1401
#define GDB_WATCHPOINT_WRITE     2
1402
#define GDB_WATCHPOINT_READ      3
1403
#define GDB_WATCHPOINT_ACCESS    4
1404

    
1405
#ifndef CONFIG_USER_ONLY
1406
static const int xlat_gdb_type[] = {
1407
    [GDB_WATCHPOINT_WRITE]  = BP_GDB | BP_MEM_WRITE,
1408
    [GDB_WATCHPOINT_READ]   = BP_GDB | BP_MEM_READ,
1409
    [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
1410
};
1411
#endif
1412

    
1413
static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
1414
{
1415
    CPUState *env;
1416
    int err = 0;
1417

    
1418
    switch (type) {
1419
    case GDB_BREAKPOINT_SW:
1420
    case GDB_BREAKPOINT_HW:
1421
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1422
            err = cpu_breakpoint_insert(env, addr, BP_GDB, NULL);
1423
            if (err)
1424
                break;
1425
        }
1426
        return err;
1427
#ifndef CONFIG_USER_ONLY
1428
    case GDB_WATCHPOINT_WRITE:
1429
    case GDB_WATCHPOINT_READ:
1430
    case GDB_WATCHPOINT_ACCESS:
1431
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1432
            err = cpu_watchpoint_insert(env, addr, len, xlat_gdb_type[type],
1433
                                        NULL);
1434
            if (err)
1435
                break;
1436
        }
1437
        return err;
1438
#endif
1439
    default:
1440
        return -ENOSYS;
1441
    }
1442
}
1443

    
1444
static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
1445
{
1446
    CPUState *env;
1447
    int err = 0;
1448

    
1449
    switch (type) {
1450
    case GDB_BREAKPOINT_SW:
1451
    case GDB_BREAKPOINT_HW:
1452
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1453
            err = cpu_breakpoint_remove(env, addr, BP_GDB);
1454
            if (err)
1455
                break;
1456
        }
1457
        return err;
1458
#ifndef CONFIG_USER_ONLY
1459
    case GDB_WATCHPOINT_WRITE:
1460
    case GDB_WATCHPOINT_READ:
1461
    case GDB_WATCHPOINT_ACCESS:
1462
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1463
            err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]);
1464
            if (err)
1465
                break;
1466
        }
1467
        return err;
1468
#endif
1469
    default:
1470
        return -ENOSYS;
1471
    }
1472
}
1473

    
1474
static void gdb_breakpoint_remove_all(void)
1475
{
1476
    CPUState *env;
1477

    
1478
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
1479
        cpu_breakpoint_remove_all(env, BP_GDB);
1480
#ifndef CONFIG_USER_ONLY
1481
        cpu_watchpoint_remove_all(env, BP_GDB);
1482
#endif
1483
    }
1484
}
1485

    
1486
static int gdb_handle_packet(GDBState *s, const char *line_buf)
1487
{
1488
    CPUState *env;
1489
    const char *p;
1490
    int ch, reg_size, type, res, thread;
1491
    char buf[MAX_PACKET_LENGTH];
1492
    uint8_t mem_buf[MAX_PACKET_LENGTH];
1493
    uint8_t *registers;
1494
    target_ulong addr, len;
1495

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

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

    
1792
            snprintf(buf, sizeof(buf),
1793
                     "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
1794
                     ";Bss=" TARGET_ABI_FMT_lx,
1795
                     ts->info->code_offset,
1796
                     ts->info->data_offset,
1797
                     ts->info->data_offset);
1798
            put_packet(s, buf);
1799
            break;
1800
        }
1801
#endif
1802
        if (strncmp(p, "Supported", 9) == 0) {
1803
            snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
1804
#ifdef GDB_CORE_XML
1805
            strcat(buf, ";qXfer:features:read+");
1806
#endif
1807
            put_packet(s, buf);
1808
            break;
1809
        }
1810
#ifdef GDB_CORE_XML
1811
        if (strncmp(p, "Xfer:features:read:", 19) == 0) {
1812
            const char *xml;
1813
            target_ulong total_len;
1814

    
1815
            gdb_has_xml = 1;
1816
            p += 19;
1817
            xml = get_feature_xml(p, &p);
1818
            if (!xml) {
1819
                snprintf(buf, sizeof(buf), "E00");
1820
                put_packet(s, buf);
1821
                break;
1822
            }
1823

    
1824
            if (*p == ':')
1825
                p++;
1826
            addr = strtoul(p, (char **)&p, 16);
1827
            if (*p == ',')
1828
                p++;
1829
            len = strtoul(p, (char **)&p, 16);
1830

    
1831
            total_len = strlen(xml);
1832
            if (addr > total_len) {
1833
                snprintf(buf, sizeof(buf), "E00");
1834
                put_packet(s, buf);
1835
                break;
1836
            }
1837
            if (len > (MAX_PACKET_LENGTH - 5) / 2)
1838
                len = (MAX_PACKET_LENGTH - 5) / 2;
1839
            if (len < total_len - addr) {
1840
                buf[0] = 'm';
1841
                len = memtox(buf + 1, xml + addr, len);
1842
            } else {
1843
                buf[0] = 'l';
1844
                len = memtox(buf + 1, xml + addr, total_len - addr);
1845
            }
1846
            put_packet_binary(s, buf, len + 1);
1847
            break;
1848
        }
1849
#endif
1850
        /* Unrecognised 'q' command.  */
1851
        goto unknown_command;
1852

    
1853
    default:
1854
    unknown_command:
1855
        /* put empty packet */
1856
        buf[0] = '\0';
1857
        put_packet(s, buf);
1858
        break;
1859
    }
1860
    return RS_IDLE;
1861
}
1862

    
1863
void gdb_set_stop_cpu(CPUState *env)
1864
{
1865
    gdbserver_state->c_cpu = env;
1866
    gdbserver_state->g_cpu = env;
1867
}
1868

    
1869
#ifndef CONFIG_USER_ONLY
1870
static void gdb_vm_stopped(void *opaque, int reason)
1871
{
1872
    GDBState *s = gdbserver_state;
1873
    CPUState *env = s->c_cpu;
1874
    char buf[256];
1875
    const char *type;
1876
    int ret;
1877

    
1878
    if (s->state == RS_SYSCALL)
1879
        return;
1880

    
1881
    /* disable single step if it was enable */
1882
    cpu_single_step(env, 0);
1883

    
1884
    if (reason == EXCP_DEBUG) {
1885
        if (env->watchpoint_hit) {
1886
            switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
1887
            case BP_MEM_READ:
1888
                type = "r";
1889
                break;
1890
            case BP_MEM_ACCESS:
1891
                type = "a";
1892
                break;
1893
            default:
1894
                type = "";
1895
                break;
1896
            }
1897
            snprintf(buf, sizeof(buf),
1898
                     "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
1899
                     GDB_SIGNAL_TRAP, env->cpu_index+1, type,
1900
                     env->watchpoint_hit->vaddr);
1901
            put_packet(s, buf);
1902
            env->watchpoint_hit = NULL;
1903
            return;
1904
        }
1905
        tb_flush(env);
1906
        ret = GDB_SIGNAL_TRAP;
1907
    } else if (reason == EXCP_INTERRUPT) {
1908
        ret = GDB_SIGNAL_INT;
1909
    } else {
1910
        ret = 0;
1911
    }
1912
    snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, env->cpu_index+1);
1913
    put_packet(s, buf);
1914
}
1915
#endif
1916

    
1917
/* Send a gdb syscall request.
1918
   This accepts limited printf-style format specifiers, specifically:
1919
    %x  - target_ulong argument printed in hex.
1920
    %lx - 64-bit argument printed in hex.
1921
    %s  - string pointer (target_ulong) and length (int) pair.  */
1922
void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
1923
{
1924
    va_list va;
1925
    char buf[256];
1926
    char *p;
1927
    target_ulong addr;
1928
    uint64_t i64;
1929
    GDBState *s;
1930

    
1931
    s = gdbserver_state;
1932
    if (!s)
1933
        return;
1934
    gdb_current_syscall_cb = cb;
1935
    s->state = RS_SYSCALL;
1936
#ifndef CONFIG_USER_ONLY
1937
    vm_stop(EXCP_DEBUG);
1938
#endif
1939
    s->state = RS_IDLE;
1940
    va_start(va, fmt);
1941
    p = buf;
1942
    *(p++) = 'F';
1943
    while (*fmt) {
1944
        if (*fmt == '%') {
1945
            fmt++;
1946
            switch (*fmt++) {
1947
            case 'x':
1948
                addr = va_arg(va, target_ulong);
1949
                p += snprintf(p, &buf[sizeof(buf)] - p, TARGET_FMT_lx, addr);
1950
                break;
1951
            case 'l':
1952
                if (*(fmt++) != 'x')
1953
                    goto bad_format;
1954
                i64 = va_arg(va, uint64_t);
1955
                p += snprintf(p, &buf[sizeof(buf)] - p, "%" PRIx64, i64);
1956
                break;
1957
            case 's':
1958
                addr = va_arg(va, target_ulong);
1959
                p += snprintf(p, &buf[sizeof(buf)] - p, TARGET_FMT_lx "/%x",
1960
                              addr, va_arg(va, int));
1961
                break;
1962
            default:
1963
            bad_format:
1964
                fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
1965
                        fmt - 1);
1966
                break;
1967
            }
1968
        } else {
1969
            *(p++) = *(fmt++);
1970
        }
1971
    }
1972
    *p = 0;
1973
    va_end(va);
1974
    put_packet(s, buf);
1975
#ifdef CONFIG_USER_ONLY
1976
    gdb_handlesig(s->c_cpu, 0);
1977
#else
1978
    cpu_interrupt(s->c_cpu, CPU_INTERRUPT_EXIT);
1979
#endif
1980
}
1981

    
1982
static void gdb_read_byte(GDBState *s, int ch)
1983
{
1984
    int i, csum;
1985
    uint8_t reply;
1986

    
1987
#ifndef CONFIG_USER_ONLY
1988
    if (s->last_packet_len) {
1989
        /* Waiting for a response to the last packet.  If we see the start
1990
           of a new command then abandon the previous response.  */
1991
        if (ch == '-') {
1992
#ifdef DEBUG_GDB
1993
            printf("Got NACK, retransmitting\n");
1994
#endif
1995
            put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
1996
        }
1997
#ifdef DEBUG_GDB
1998
        else if (ch == '+')
1999
            printf("Got ACK\n");
2000
        else
2001
            printf("Got '%c' when expecting ACK/NACK\n", ch);
2002
#endif
2003
        if (ch == '+' || ch == '$')
2004
            s->last_packet_len = 0;
2005
        if (ch != '$')
2006
            return;
2007
    }
2008
    if (vm_running) {
2009
        /* when the CPU is running, we cannot do anything except stop
2010
           it when receiving a char */
2011
        vm_stop(EXCP_INTERRUPT);
2012
    } else
2013
#endif
2014
    {
2015
        switch(s->state) {
2016
        case RS_IDLE:
2017
            if (ch == '$') {
2018
                s->line_buf_index = 0;
2019
                s->state = RS_GETLINE;
2020
            }
2021
            break;
2022
        case RS_GETLINE:
2023
            if (ch == '#') {
2024
            s->state = RS_CHKSUM1;
2025
            } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
2026
                s->state = RS_IDLE;
2027
            } else {
2028
            s->line_buf[s->line_buf_index++] = ch;
2029
            }
2030
            break;
2031
        case RS_CHKSUM1:
2032
            s->line_buf[s->line_buf_index] = '\0';
2033
            s->line_csum = fromhex(ch) << 4;
2034
            s->state = RS_CHKSUM2;
2035
            break;
2036
        case RS_CHKSUM2:
2037
            s->line_csum |= fromhex(ch);
2038
            csum = 0;
2039
            for(i = 0; i < s->line_buf_index; i++) {
2040
                csum += s->line_buf[i];
2041
            }
2042
            if (s->line_csum != (csum & 0xff)) {
2043
                reply = '-';
2044
                put_buffer(s, &reply, 1);
2045
                s->state = RS_IDLE;
2046
            } else {
2047
                reply = '+';
2048
                put_buffer(s, &reply, 1);
2049
                s->state = gdb_handle_packet(s, s->line_buf);
2050
            }
2051
            break;
2052
        default:
2053
            abort();
2054
        }
2055
    }
2056
}
2057

    
2058
#ifdef CONFIG_USER_ONLY
2059
int
2060
gdb_queuesig (void)
2061
{
2062
    GDBState *s;
2063

    
2064
    s = gdbserver_state;
2065

    
2066
    if (gdbserver_fd < 0 || s->fd < 0)
2067
        return 0;
2068
    else
2069
        return 1;
2070
}
2071

    
2072
int
2073
gdb_handlesig (CPUState *env, int sig)
2074
{
2075
  GDBState *s;
2076
  char buf[256];
2077
  int n;
2078

    
2079
  s = gdbserver_state;
2080
  if (gdbserver_fd < 0 || s->fd < 0)
2081
    return sig;
2082

    
2083
  /* disable single step if it was enabled */
2084
  cpu_single_step(env, 0);
2085
  tb_flush(env);
2086

    
2087
  if (sig != 0)
2088
    {
2089
      snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb (sig));
2090
      put_packet(s, buf);
2091
    }
2092
  /* put_packet() might have detected that the peer terminated the 
2093
     connection.  */
2094
  if (s->fd < 0)
2095
      return sig;
2096

    
2097
  sig = 0;
2098
  s->state = RS_IDLE;
2099
  s->running_state = 0;
2100
  while (s->running_state == 0) {
2101
      n = read (s->fd, buf, 256);
2102
      if (n > 0)
2103
        {
2104
          int i;
2105

    
2106
          for (i = 0; i < n; i++)
2107
            gdb_read_byte (s, buf[i]);
2108
        }
2109
      else if (n == 0 || errno != EAGAIN)
2110
        {
2111
          /* XXX: Connection closed.  Should probably wait for annother
2112
             connection before continuing.  */
2113
          return sig;
2114
        }
2115
  }
2116
  sig = s->signal;
2117
  s->signal = 0;
2118
  return sig;
2119
}
2120

    
2121
/* Tell the remote gdb that the process has exited.  */
2122
void gdb_exit(CPUState *env, int code)
2123
{
2124
  GDBState *s;
2125
  char buf[4];
2126

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

    
2131
  snprintf(buf, sizeof(buf), "W%02x", code);
2132
  put_packet(s, buf);
2133
}
2134

    
2135
/* Tell the remote gdb that the process has exited due to SIG.  */
2136
void gdb_signalled(CPUState *env, int sig)
2137
{
2138
  GDBState *s;
2139
  char buf[4];
2140

    
2141
  s = gdbserver_state;
2142
  if (gdbserver_fd < 0 || s->fd < 0)
2143
    return;
2144

    
2145
  snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb (sig));
2146
  put_packet(s, buf);
2147
}
2148

    
2149
static void gdb_accept(void)
2150
{
2151
    GDBState *s;
2152
    struct sockaddr_in sockaddr;
2153
    socklen_t len;
2154
    int val, fd;
2155

    
2156
    for(;;) {
2157
        len = sizeof(sockaddr);
2158
        fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
2159
        if (fd < 0 && errno != EINTR) {
2160
            perror("accept");
2161
            return;
2162
        } else if (fd >= 0) {
2163
            break;
2164
        }
2165
    }
2166

    
2167
    /* set short latency */
2168
    val = 1;
2169
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
2170

    
2171
    s = qemu_mallocz(sizeof(GDBState));
2172
    if (!s) {
2173
        errno = ENOMEM;
2174
        perror("accept");
2175
        return;
2176
    }
2177

    
2178
    memset (s, 0, sizeof (GDBState));
2179
    s->c_cpu = first_cpu;
2180
    s->g_cpu = first_cpu;
2181
    s->fd = fd;
2182
    gdb_has_xml = 0;
2183

    
2184
    gdbserver_state = s;
2185

    
2186
    fcntl(fd, F_SETFL, O_NONBLOCK);
2187
}
2188

    
2189
static int gdbserver_open(int port)
2190
{
2191
    struct sockaddr_in sockaddr;
2192
    int fd, val, ret;
2193

    
2194
    fd = socket(PF_INET, SOCK_STREAM, 0);
2195
    if (fd < 0) {
2196
        perror("socket");
2197
        return -1;
2198
    }
2199

    
2200
    /* allow fast reuse */
2201
    val = 1;
2202
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&val, sizeof(val));
2203

    
2204
    sockaddr.sin_family = AF_INET;
2205
    sockaddr.sin_port = htons(port);
2206
    sockaddr.sin_addr.s_addr = 0;
2207
    ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
2208
    if (ret < 0) {
2209
        perror("bind");
2210
        return -1;
2211
    }
2212
    ret = listen(fd, 0);
2213
    if (ret < 0) {
2214
        perror("listen");
2215
        return -1;
2216
    }
2217
    return fd;
2218
}
2219

    
2220
int gdbserver_start(int port)
2221
{
2222
    gdbserver_fd = gdbserver_open(port);
2223
    if (gdbserver_fd < 0)
2224
        return -1;
2225
    /* accept connections */
2226
    gdb_accept();
2227
    return 0;
2228
}
2229

    
2230
/* Disable gdb stub for child processes.  */
2231
void gdbserver_fork(CPUState *env)
2232
{
2233
    GDBState *s = gdbserver_state;
2234
    if (gdbserver_fd < 0 || s->fd < 0)
2235
      return;
2236
    close(s->fd);
2237
    s->fd = -1;
2238
    cpu_breakpoint_remove_all(env, BP_GDB);
2239
    cpu_watchpoint_remove_all(env, BP_GDB);
2240
}
2241
#else
2242
static int gdb_chr_can_receive(void *opaque)
2243
{
2244
  /* We can handle an arbitrarily large amount of data.
2245
   Pick the maximum packet size, which is as good as anything.  */
2246
  return MAX_PACKET_LENGTH;
2247
}
2248

    
2249
static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
2250
{
2251
    int i;
2252

    
2253
    for (i = 0; i < size; i++) {
2254
        gdb_read_byte(gdbserver_state, buf[i]);
2255
    }
2256
}
2257

    
2258
static void gdb_chr_event(void *opaque, int event)
2259
{
2260
    switch (event) {
2261
    case CHR_EVENT_RESET:
2262
        vm_stop(EXCP_INTERRUPT);
2263
        gdb_has_xml = 0;
2264
        break;
2265
    default:
2266
        break;
2267
    }
2268
}
2269

    
2270
int gdbserver_start(const char *port)
2271
{
2272
    GDBState *s;
2273
    char gdbstub_port_name[128];
2274
    int port_num;
2275
    char *p;
2276
    CharDriverState *chr;
2277

    
2278
    if (!port || !*port)
2279
      return -1;
2280

    
2281
    port_num = strtol(port, &p, 10);
2282
    if (*p == 0) {
2283
        /* A numeric value is interpreted as a port number.  */
2284
        snprintf(gdbstub_port_name, sizeof(gdbstub_port_name),
2285
                 "tcp::%d,nowait,nodelay,server", port_num);
2286
        port = gdbstub_port_name;
2287
    }
2288

    
2289
    chr = qemu_chr_open("gdb", port, NULL);
2290
    if (!chr)
2291
        return -1;
2292

    
2293
    s = qemu_mallocz(sizeof(GDBState));
2294
    if (!s) {
2295
        return -1;
2296
    }
2297
    s->c_cpu = first_cpu;
2298
    s->g_cpu = first_cpu;
2299
    s->chr = chr;
2300
    gdbserver_state = s;
2301
    qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
2302
                          gdb_chr_event, NULL);
2303
    qemu_add_vm_stop_handler(gdb_vm_stopped, NULL);
2304
    return 0;
2305
}
2306
#endif