Statistics
| Branch: | Revision:

root / gdbstub.c @ fad6cb1a

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

    
214
enum {
215
    TARGET_SIGINT = 2,
216
    TARGET_SIGTRAP = 5
217
};
218

    
219
static int gdb_signal_table[] = {
220
    -1,
221
    -1,
222
    TARGET_SIGINT,
223
    -1,
224
    -1,
225
    TARGET_SIGTRAP
226
};
227
#endif
228

    
229
#ifdef CONFIG_USER_ONLY
230
static int target_signal_to_gdb (int sig)
231
{
232
    int i;
233
    for (i = 0; i < ARRAY_SIZE (gdb_signal_table); i++)
234
        if (gdb_signal_table[i] == sig)
235
            return i;
236
    return GDB_SIGNAL_UNKNOWN;
237
}
238
#endif
239

    
240
static int gdb_signal_to_target (int sig)
241
{
242
    if (sig < ARRAY_SIZE (gdb_signal_table))
243
        return gdb_signal_table[sig];
244
    else
245
        return -1;
246
}
247

    
248
//#define DEBUG_GDB
249

    
250
typedef struct GDBRegisterState {
251
    int base_reg;
252
    int num_regs;
253
    gdb_reg_cb get_reg;
254
    gdb_reg_cb set_reg;
255
    const char *xml;
256
    struct GDBRegisterState *next;
257
} GDBRegisterState;
258

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

    
285
/* By default use no IRQs and no timers while single stepping so as to
286
 * make single stepping like an ICE HW step.
287
 */
288
static int sstep_flags = SSTEP_ENABLE|SSTEP_NOIRQ|SSTEP_NOTIMER;
289

    
290
static GDBState *gdbserver_state;
291

    
292
/* This is an ugly hack to cope with both new and old gdb.
293
   If gdb sends qXfer:features:read then assume we're talking to a newish
294
   gdb that understands target descriptions.  */
295
static int gdb_has_xml;
296

    
297
#ifdef CONFIG_USER_ONLY
298
/* XXX: This is not thread safe.  Do we care?  */
299
static int gdbserver_fd = -1;
300

    
301
static int get_char(GDBState *s)
302
{
303
    uint8_t ch;
304
    int ret;
305

    
306
    for(;;) {
307
        ret = recv(s->fd, &ch, 1, 0);
308
        if (ret < 0) {
309
            if (errno == ECONNRESET)
310
                s->fd = -1;
311
            if (errno != EINTR && errno != EAGAIN)
312
                return -1;
313
        } else if (ret == 0) {
314
            close(s->fd);
315
            s->fd = -1;
316
            return -1;
317
        } else {
318
            break;
319
        }
320
    }
321
    return ch;
322
}
323
#endif
324

    
325
static gdb_syscall_complete_cb gdb_current_syscall_cb;
326

    
327
enum {
328
    GDB_SYS_UNKNOWN,
329
    GDB_SYS_ENABLED,
330
    GDB_SYS_DISABLED,
331
} gdb_syscall_mode;
332

    
333
/* If gdb is connected when the first semihosting syscall occurs then use
334
   remote gdb syscalls.  Otherwise use native file IO.  */
335
int use_gdb_syscalls(void)
336
{
337
    if (gdb_syscall_mode == GDB_SYS_UNKNOWN) {
338
        gdb_syscall_mode = (gdbserver_state ? GDB_SYS_ENABLED
339
                                            : GDB_SYS_DISABLED);
340
    }
341
    return gdb_syscall_mode == GDB_SYS_ENABLED;
342
}
343

    
344
/* Resume execution.  */
345
static inline void gdb_continue(GDBState *s)
346
{
347
#ifdef CONFIG_USER_ONLY
348
    s->running_state = 1;
349
#else
350
    vm_start();
351
#endif
352
}
353

    
354
static void put_buffer(GDBState *s, const uint8_t *buf, int len)
355
{
356
#ifdef CONFIG_USER_ONLY
357
    int ret;
358

    
359
    while (len > 0) {
360
        ret = send(s->fd, buf, len, 0);
361
        if (ret < 0) {
362
            if (errno != EINTR && errno != EAGAIN)
363
                return;
364
        } else {
365
            buf += ret;
366
            len -= ret;
367
        }
368
    }
369
#else
370
    qemu_chr_write(s->chr, buf, len);
371
#endif
372
}
373

    
374
static inline int fromhex(int v)
375
{
376
    if (v >= '0' && v <= '9')
377
        return v - '0';
378
    else if (v >= 'A' && v <= 'F')
379
        return v - 'A' + 10;
380
    else if (v >= 'a' && v <= 'f')
381
        return v - 'a' + 10;
382
    else
383
        return 0;
384
}
385

    
386
static inline int tohex(int v)
387
{
388
    if (v < 10)
389
        return v + '0';
390
    else
391
        return v - 10 + 'a';
392
}
393

    
394
static void memtohex(char *buf, const uint8_t *mem, int len)
395
{
396
    int i, c;
397
    char *q;
398
    q = buf;
399
    for(i = 0; i < len; i++) {
400
        c = mem[i];
401
        *q++ = tohex(c >> 4);
402
        *q++ = tohex(c & 0xf);
403
    }
404
    *q = '\0';
405
}
406

    
407
static void hextomem(uint8_t *mem, const char *buf, int len)
408
{
409
    int i;
410

    
411
    for(i = 0; i < len; i++) {
412
        mem[i] = (fromhex(buf[0]) << 4) | fromhex(buf[1]);
413
        buf += 2;
414
    }
415
}
416

    
417
/* return -1 if error, 0 if OK */
418
static int put_packet_binary(GDBState *s, const char *buf, int len)
419
{
420
    int csum, i;
421
    uint8_t *p;
422

    
423
    for(;;) {
424
        p = s->last_packet;
425
        *(p++) = '$';
426
        memcpy(p, buf, len);
427
        p += len;
428
        csum = 0;
429
        for(i = 0; i < len; i++) {
430
            csum += buf[i];
431
        }
432
        *(p++) = '#';
433
        *(p++) = tohex((csum >> 4) & 0xf);
434
        *(p++) = tohex((csum) & 0xf);
435

    
436
        s->last_packet_len = p - s->last_packet;
437
        put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
438

    
439
#ifdef CONFIG_USER_ONLY
440
        i = get_char(s);
441
        if (i < 0)
442
            return -1;
443
        if (i == '+')
444
            break;
445
#else
446
        break;
447
#endif
448
    }
449
    return 0;
450
}
451

    
452
/* return -1 if error, 0 if OK */
453
static int put_packet(GDBState *s, const char *buf)
454
{
455
#ifdef DEBUG_GDB
456
    printf("reply='%s'\n", buf);
457
#endif
458

    
459
    return put_packet_binary(s, buf, strlen(buf));
460
}
461

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

    
483
#if TARGET_LONG_BITS == 64
484
#define GET_REGL(val) GET_REG64(val)
485
#define ldtul_p(addr) ldq_p(addr)
486
#else
487
#define GET_REGL(val) GET_REG32(val)
488
#define ldtul_p(addr) ldl_p(addr)
489
#endif
490

    
491
#if defined(TARGET_I386)
492

    
493
#ifdef TARGET_X86_64
494
static const int gpr_map[16] = {
495
    R_EAX, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI, R_EBP, R_ESP,
496
    8, 9, 10, 11, 12, 13, 14, 15
497
};
498
#else
499
static const int gpr_map[8] = {0, 1, 2, 3, 4, 5, 6, 7};
500
#endif
501

    
502
#define NUM_CORE_REGS (CPU_NB_REGS * 2 + 25)
503

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

    
551
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int i)
552
{
553
    uint32_t tmp;
554

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

    
615
#elif defined (TARGET_PPC)
616

    
617
#define NUM_CORE_REGS 71
618

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

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

    
692
#elif defined (TARGET_SPARC)
693

    
694
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
695
#define NUM_CORE_REGS 86
696
#else
697
#define NUM_CORE_REGS 73
698
#endif
699

    
700
#ifdef TARGET_ABI32
701
#define GET_REGA(val) GET_REG32(val)
702
#else
703
#define GET_REGA(val) GET_REGL(val)
704
#endif
705

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

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

    
761
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
762
{
763
#if defined(TARGET_ABI32)
764
    abi_ulong tmp;
765

    
766
    tmp = ldl_p(mem_buf);
767
#else
768
    target_ulong tmp;
769

    
770
    tmp = ldtul_p(mem_buf);
771
#endif
772

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

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

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

    
863
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
864
{
865
    uint32_t tmp;
866

    
867
    tmp = ldl_p(mem_buf);
868

    
869
    /* Mask out low bit of PC to workaround gdb bugs.  This will probably
870
       cause problems if we ever implement the Jazelle DBX extensions.  */
871
    if (n == 15)
872
        tmp &= ~1;
873

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

    
900
#elif defined (TARGET_M68K)
901

    
902
#define NUM_CORE_REGS 18
903

    
904
#define GDB_CORE_XML "cf-core.xml"
905

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

    
925
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
926
{
927
    uint32_t tmp;
928

    
929
    tmp = ldl_p(mem_buf);
930

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

    
948
#define NUM_CORE_REGS 73
949

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

    
982
    return 0;
983
}
984

    
985
/* convert MIPS rounding mode in FCR31 to IEEE library */
986
static unsigned int ieee_rm[] =
987
  {
988
    float_round_nearest_even,
989
    float_round_to_zero,
990
    float_round_up,
991
    float_round_down
992
  };
993
#define RESTORE_ROUNDING_MODE \
994
    set_float_rounding_mode(ieee_rm[env->active_fpu.fcr31 & 3], &env->active_fpu.fp_status)
995

    
996
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
997
{
998
    target_ulong tmp;
999

    
1000
    tmp = ldtul_p(mem_buf);
1001

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

    
1043
    return sizeof(target_ulong);
1044
}
1045
#elif defined (TARGET_SH4)
1046

    
1047
/* Hint: Use "set architecture sh4" in GDB to see fpu registers */
1048
/* FIXME: We should use XML for this.  */
1049

    
1050
#define NUM_CORE_REGS 59
1051

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

    
1083
    return 0;
1084
}
1085

    
1086
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1087
{
1088
    uint32_t tmp;
1089

    
1090
    tmp = ldl_p(mem_buf);
1091

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

    
1126
    return 4;
1127
}
1128
#elif defined (TARGET_CRIS)
1129

    
1130
#define NUM_CORE_REGS 49
1131

    
1132
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1133
{
1134
    uint8_t srs;
1135

    
1136
    srs = env->pregs[PR_SRS];
1137
    if (n < 16) {
1138
        GET_REG32(env->regs[n]);
1139
    }
1140

    
1141
    if (n >= 21 && n < 32) {
1142
        GET_REG32(env->pregs[n - 16]);
1143
    }
1144
    if (n >= 33 && n < 49) {
1145
        GET_REG32(env->sregs[srs][n - 33]);
1146
    }
1147
    switch (n) {
1148
    case 16: GET_REG8(env->pregs[0]);
1149
    case 17: GET_REG8(env->pregs[1]);
1150
    case 18: GET_REG32(env->pregs[2]);
1151
    case 19: GET_REG8(srs);
1152
    case 20: GET_REG16(env->pregs[4]);
1153
    case 32: GET_REG32(env->pc);
1154
    }
1155

    
1156
    return 0;
1157
}
1158

    
1159
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1160
{
1161
    uint32_t tmp;
1162

    
1163
    if (n > 49)
1164
        return 0;
1165

    
1166
    tmp = ldl_p(mem_buf);
1167

    
1168
    if (n < 16) {
1169
        env->regs[n] = tmp;
1170
    }
1171

    
1172
    if (n >= 21 && n < 32) {
1173
        env->pregs[n - 16] = tmp;
1174
    }
1175

    
1176
    /* FIXME: Should support function regs be writable?  */
1177
    switch (n) {
1178
    case 16: return 1;
1179
    case 17: return 1;
1180
    case 18: env->pregs[PR_PID] = tmp; break;
1181
    case 19: return 1;
1182
    case 20: return 2;
1183
    case 32: env->pc = tmp; break;
1184
    }
1185

    
1186
    return 4;
1187
}
1188
#elif defined (TARGET_ALPHA)
1189

    
1190
#define NUM_CORE_REGS 65
1191

    
1192
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1193
{
1194
    if (n < 31) {
1195
       GET_REGL(env->ir[n]);
1196
    }
1197
    else if (n == 31) {
1198
       GET_REGL(0);
1199
    }
1200
    else if (n<63) {
1201
       uint64_t val;
1202

    
1203
       val=*((uint64_t *)&env->fir[n-32]);
1204
       GET_REGL(val);
1205
    }
1206
    else if (n==63) {
1207
       GET_REGL(env->fpcr);
1208
    }
1209
    else if (n==64) {
1210
       GET_REGL(env->pc);
1211
    }
1212
    else {
1213
       GET_REGL(0);
1214
    }
1215

    
1216
    return 0;
1217
}
1218

    
1219
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1220
{
1221
    target_ulong tmp;
1222
    tmp = ldtul_p(mem_buf);
1223

    
1224
    if (n < 31) {
1225
        env->ir[n] = tmp;
1226
    }
1227

    
1228
    if (n > 31 && n < 63) {
1229
        env->fir[n - 32] = ldfl_p(mem_buf);
1230
    }
1231

    
1232
    if (n == 64 ) {
1233
       env->pc=tmp;
1234
    }
1235

    
1236
    return 8;
1237
}
1238
#else
1239

    
1240
#define NUM_CORE_REGS 0
1241

    
1242
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1243
{
1244
    return 0;
1245
}
1246

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

    
1252
#endif
1253

    
1254
static int num_g_regs = NUM_CORE_REGS;
1255

    
1256
#ifdef GDB_CORE_XML
1257
/* Encode data using the encoding for 'x' packets.  */
1258
static int memtox(char *buf, const char *mem, int len)
1259
{
1260
    char *p = buf;
1261
    char c;
1262

    
1263
    while (len--) {
1264
        c = *(mem++);
1265
        switch (c) {
1266
        case '#': case '$': case '*': case '}':
1267
            *(p++) = '}';
1268
            *(p++) = c ^ 0x20;
1269
            break;
1270
        default:
1271
            *(p++) = c;
1272
            break;
1273
        }
1274
    }
1275
    return p - buf;
1276
}
1277

    
1278
static const char *get_feature_xml(const char *p, const char **newp)
1279
{
1280
    extern const char *const xml_builtin[][2];
1281
    size_t len;
1282
    int i;
1283
    const char *name;
1284
    static char target_xml[1024];
1285

    
1286
    len = 0;
1287
    while (p[len] && p[len] != ':')
1288
        len++;
1289
    *newp = p + len;
1290

    
1291
    name = NULL;
1292
    if (strncmp(p, "target.xml", len) == 0) {
1293
        /* Generate the XML description for this CPU.  */
1294
        if (!target_xml[0]) {
1295
            GDBRegisterState *r;
1296

    
1297
            snprintf(target_xml, sizeof(target_xml),
1298
                     "<?xml version=\"1.0\"?>"
1299
                     "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
1300
                     "<target>"
1301
                     "<xi:include href=\"%s\"/>",
1302
                     GDB_CORE_XML);
1303

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

    
1322
static int gdb_read_register(CPUState *env, uint8_t *mem_buf, int reg)
1323
{
1324
    GDBRegisterState *r;
1325

    
1326
    if (reg < NUM_CORE_REGS)
1327
        return cpu_gdb_read_register(env, mem_buf, reg);
1328

    
1329
    for (r = env->gdb_regs; r; r = r->next) {
1330
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1331
            return r->get_reg(env, mem_buf, reg - r->base_reg);
1332
        }
1333
    }
1334
    return 0;
1335
}
1336

    
1337
static int gdb_write_register(CPUState *env, uint8_t *mem_buf, int reg)
1338
{
1339
    GDBRegisterState *r;
1340

    
1341
    if (reg < NUM_CORE_REGS)
1342
        return cpu_gdb_write_register(env, mem_buf, reg);
1343

    
1344
    for (r = env->gdb_regs; r; r = r->next) {
1345
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1346
            return r->set_reg(env, mem_buf, reg - r->base_reg);
1347
        }
1348
    }
1349
    return 0;
1350
}
1351

    
1352
/* Register a supplemental set of CPU registers.  If g_pos is nonzero it
1353
   specifies the first register number and these registers are included in
1354
   a standard "g" packet.  Direction is relative to gdb, i.e. get_reg is
1355
   gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
1356
 */
1357

    
1358
void gdb_register_coprocessor(CPUState * env,
1359
                             gdb_reg_cb get_reg, gdb_reg_cb set_reg,
1360
                             int num_regs, const char *xml, int g_pos)
1361
{
1362
    GDBRegisterState *s;
1363
    GDBRegisterState **p;
1364
    static int last_reg = NUM_CORE_REGS;
1365

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

    
1392
/* GDB breakpoint/watchpoint types */
1393
#define GDB_BREAKPOINT_SW        0
1394
#define GDB_BREAKPOINT_HW        1
1395
#define GDB_WATCHPOINT_WRITE     2
1396
#define GDB_WATCHPOINT_READ      3
1397
#define GDB_WATCHPOINT_ACCESS    4
1398

    
1399
#ifndef CONFIG_USER_ONLY
1400
static const int xlat_gdb_type[] = {
1401
    [GDB_WATCHPOINT_WRITE]  = BP_GDB | BP_MEM_WRITE,
1402
    [GDB_WATCHPOINT_READ]   = BP_GDB | BP_MEM_READ,
1403
    [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
1404
};
1405
#endif
1406

    
1407
static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
1408
{
1409
    CPUState *env;
1410
    int err = 0;
1411

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

    
1438
static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
1439
{
1440
    CPUState *env;
1441
    int err = 0;
1442

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

    
1468
static void gdb_breakpoint_remove_all(void)
1469
{
1470
    CPUState *env;
1471

    
1472
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
1473
        cpu_breakpoint_remove_all(env, BP_GDB);
1474
#ifndef CONFIG_USER_ONLY
1475
        cpu_watchpoint_remove_all(env, BP_GDB);
1476
#endif
1477
    }
1478
}
1479

    
1480
static int gdb_handle_packet(GDBState *s, const char *line_buf)
1481
{
1482
    CPUState *env;
1483
    const char *p;
1484
    int ch, reg_size, type, res, thread;
1485
    char buf[MAX_PACKET_LENGTH];
1486
    uint8_t mem_buf[MAX_PACKET_LENGTH];
1487
    uint8_t *registers;
1488
    target_ulong addr, len;
1489

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

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

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

    
1809
            gdb_has_xml = 1;
1810
            p += 19;
1811
            xml = get_feature_xml(p, &p);
1812
            if (!xml) {
1813
                snprintf(buf, sizeof(buf), "E00");
1814
                put_packet(s, buf);
1815
                break;
1816
            }
1817

    
1818
            if (*p == ':')
1819
                p++;
1820
            addr = strtoul(p, (char **)&p, 16);
1821
            if (*p == ',')
1822
                p++;
1823
            len = strtoul(p, (char **)&p, 16);
1824

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

    
1847
    default:
1848
    unknown_command:
1849
        /* put empty packet */
1850
        buf[0] = '\0';
1851
        put_packet(s, buf);
1852
        break;
1853
    }
1854
    return RS_IDLE;
1855
}
1856

    
1857
void gdb_set_stop_cpu(CPUState *env)
1858
{
1859
    gdbserver_state->c_cpu = env;
1860
    gdbserver_state->g_cpu = env;
1861
}
1862

    
1863
#ifndef CONFIG_USER_ONLY
1864
static void gdb_vm_stopped(void *opaque, int reason)
1865
{
1866
    GDBState *s = gdbserver_state;
1867
    CPUState *env = s->c_cpu;
1868
    char buf[256];
1869
    const char *type;
1870
    int ret;
1871

    
1872
    if (s->state == RS_SYSCALL)
1873
        return;
1874

    
1875
    /* disable single step if it was enable */
1876
    cpu_single_step(env, 0);
1877

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

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

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

    
1976
static void gdb_read_byte(GDBState *s, int ch)
1977
{
1978
    int i, csum;
1979
    uint8_t reply;
1980

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

    
2052
#ifdef CONFIG_USER_ONLY
2053
int
2054
gdb_queuesig (void)
2055
{
2056
    GDBState *s;
2057

    
2058
    s = gdbserver_state;
2059

    
2060
    if (gdbserver_fd < 0 || s->fd < 0)
2061
        return 0;
2062
    else
2063
        return 1;
2064
}
2065

    
2066
int
2067
gdb_handlesig (CPUState *env, int sig)
2068
{
2069
  GDBState *s;
2070
  char buf[256];
2071
  int n;
2072

    
2073
  s = gdbserver_state;
2074
  if (gdbserver_fd < 0 || s->fd < 0)
2075
    return sig;
2076

    
2077
  /* disable single step if it was enabled */
2078
  cpu_single_step(env, 0);
2079
  tb_flush(env);
2080

    
2081
  if (sig != 0)
2082
    {
2083
      snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb (sig));
2084
      put_packet(s, buf);
2085
    }
2086
  /* put_packet() might have detected that the peer terminated the 
2087
     connection.  */
2088
  if (s->fd < 0)
2089
      return sig;
2090

    
2091
  sig = 0;
2092
  s->state = RS_IDLE;
2093
  s->running_state = 0;
2094
  while (s->running_state == 0) {
2095
      n = read (s->fd, buf, 256);
2096
      if (n > 0)
2097
        {
2098
          int i;
2099

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

    
2115
/* Tell the remote gdb that the process has exited.  */
2116
void gdb_exit(CPUState *env, int code)
2117
{
2118
  GDBState *s;
2119
  char buf[4];
2120

    
2121
  s = gdbserver_state;
2122
  if (gdbserver_fd < 0 || s->fd < 0)
2123
    return;
2124

    
2125
  snprintf(buf, sizeof(buf), "W%02x", code);
2126
  put_packet(s, buf);
2127
}
2128

    
2129
/* Tell the remote gdb that the process has exited due to SIG.  */
2130
void gdb_signalled(CPUState *env, int sig)
2131
{
2132
  GDBState *s;
2133
  char buf[4];
2134

    
2135
  s = gdbserver_state;
2136
  if (gdbserver_fd < 0 || s->fd < 0)
2137
    return;
2138

    
2139
  snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb (sig));
2140
  put_packet(s, buf);
2141
}
2142

    
2143
static void gdb_accept(void)
2144
{
2145
    GDBState *s;
2146
    struct sockaddr_in sockaddr;
2147
    socklen_t len;
2148
    int val, fd;
2149

    
2150
    for(;;) {
2151
        len = sizeof(sockaddr);
2152
        fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
2153
        if (fd < 0 && errno != EINTR) {
2154
            perror("accept");
2155
            return;
2156
        } else if (fd >= 0) {
2157
            break;
2158
        }
2159
    }
2160

    
2161
    /* set short latency */
2162
    val = 1;
2163
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
2164

    
2165
    s = qemu_mallocz(sizeof(GDBState));
2166
    if (!s) {
2167
        errno = ENOMEM;
2168
        perror("accept");
2169
        return;
2170
    }
2171

    
2172
    memset (s, 0, sizeof (GDBState));
2173
    s->c_cpu = first_cpu;
2174
    s->g_cpu = first_cpu;
2175
    s->fd = fd;
2176
    gdb_has_xml = 0;
2177

    
2178
    gdbserver_state = s;
2179

    
2180
    fcntl(fd, F_SETFL, O_NONBLOCK);
2181
}
2182

    
2183
static int gdbserver_open(int port)
2184
{
2185
    struct sockaddr_in sockaddr;
2186
    int fd, val, ret;
2187

    
2188
    fd = socket(PF_INET, SOCK_STREAM, 0);
2189
    if (fd < 0) {
2190
        perror("socket");
2191
        return -1;
2192
    }
2193

    
2194
    /* allow fast reuse */
2195
    val = 1;
2196
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&val, sizeof(val));
2197

    
2198
    sockaddr.sin_family = AF_INET;
2199
    sockaddr.sin_port = htons(port);
2200
    sockaddr.sin_addr.s_addr = 0;
2201
    ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
2202
    if (ret < 0) {
2203
        perror("bind");
2204
        return -1;
2205
    }
2206
    ret = listen(fd, 0);
2207
    if (ret < 0) {
2208
        perror("listen");
2209
        return -1;
2210
    }
2211
    return fd;
2212
}
2213

    
2214
int gdbserver_start(int port)
2215
{
2216
    gdbserver_fd = gdbserver_open(port);
2217
    if (gdbserver_fd < 0)
2218
        return -1;
2219
    /* accept connections */
2220
    gdb_accept();
2221
    return 0;
2222
}
2223

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

    
2243
static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
2244
{
2245
    int i;
2246

    
2247
    for (i = 0; i < size; i++) {
2248
        gdb_read_byte(gdbserver_state, buf[i]);
2249
    }
2250
}
2251

    
2252
static void gdb_chr_event(void *opaque, int event)
2253
{
2254
    switch (event) {
2255
    case CHR_EVENT_RESET:
2256
        vm_stop(EXCP_INTERRUPT);
2257
        gdb_has_xml = 0;
2258
        break;
2259
    default:
2260
        break;
2261
    }
2262
}
2263

    
2264
int gdbserver_start(const char *port)
2265
{
2266
    GDBState *s;
2267
    char gdbstub_port_name[128];
2268
    int port_num;
2269
    char *p;
2270
    CharDriverState *chr;
2271

    
2272
    if (!port || !*port)
2273
      return -1;
2274

    
2275
    port_num = strtol(port, &p, 10);
2276
    if (*p == 0) {
2277
        /* A numeric value is interpreted as a port number.  */
2278
        snprintf(gdbstub_port_name, sizeof(gdbstub_port_name),
2279
                 "tcp::%d,nowait,nodelay,server", port_num);
2280
        port = gdbstub_port_name;
2281
    }
2282

    
2283
    chr = qemu_chr_open("gdb", port);
2284
    if (!chr)
2285
        return -1;
2286

    
2287
    s = qemu_mallocz(sizeof(GDBState));
2288
    if (!s) {
2289
        return -1;
2290
    }
2291
    s->c_cpu = first_cpu;
2292
    s->g_cpu = first_cpu;
2293
    s->chr = chr;
2294
    gdbserver_state = s;
2295
    qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
2296
                          gdb_chr_event, NULL);
2297
    qemu_add_vm_stop_handler(gdb_vm_stopped, NULL);
2298
    return 0;
2299
}
2300
#endif