Statistics
| Branch: | Revision:

root / gdbstub.c @ 1de7afc9

History | View | Annotate | Download (75.9 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, see <http://www.gnu.org/licenses/>.
18
 */
19
#include "config.h"
20
#include "qemu-common.h"
21
#ifdef CONFIG_USER_ONLY
22
#include <stdlib.h>
23
#include <stdio.h>
24
#include <stdarg.h>
25
#include <string.h>
26
#include <errno.h>
27
#include <unistd.h>
28
#include <fcntl.h>
29

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

    
38
#define MAX_PACKET_LENGTH 4096
39

    
40
#include "cpu.h"
41
#include "qemu/sockets.h"
42
#include "kvm.h"
43

    
44
#ifndef TARGET_CPU_MEMORY_RW_DEBUG
45
static inline int target_memory_rw_debug(CPUArchState *env, target_ulong addr,
46
                                         uint8_t *buf, int len, int is_write)
47
{
48
    return cpu_memory_rw_debug(env, addr, buf, len, is_write);
49
}
50
#else
51
/* target_memory_rw_debug() defined in cpu.h */
52
#endif
53

    
54
enum {
55
    GDB_SIGNAL_0 = 0,
56
    GDB_SIGNAL_INT = 2,
57
    GDB_SIGNAL_QUIT = 3,
58
    GDB_SIGNAL_TRAP = 5,
59
    GDB_SIGNAL_ABRT = 6,
60
    GDB_SIGNAL_ALRM = 14,
61
    GDB_SIGNAL_IO = 23,
62
    GDB_SIGNAL_XCPU = 24,
63
    GDB_SIGNAL_UNKNOWN = 143
64
};
65

    
66
#ifdef CONFIG_USER_ONLY
67

    
68
/* Map target signal numbers to GDB protocol signal numbers and vice
69
 * versa.  For user emulation's currently supported systems, we can
70
 * assume most signals are defined.
71
 */
72

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

    
236
enum {
237
    TARGET_SIGINT = 2,
238
    TARGET_SIGTRAP = 5
239
};
240

    
241
static int gdb_signal_table[] = {
242
    -1,
243
    -1,
244
    TARGET_SIGINT,
245
    -1,
246
    -1,
247
    TARGET_SIGTRAP
248
};
249
#endif
250

    
251
#ifdef CONFIG_USER_ONLY
252
static int target_signal_to_gdb (int sig)
253
{
254
    int i;
255
    for (i = 0; i < ARRAY_SIZE (gdb_signal_table); i++)
256
        if (gdb_signal_table[i] == sig)
257
            return i;
258
    return GDB_SIGNAL_UNKNOWN;
259
}
260
#endif
261

    
262
static int gdb_signal_to_target (int sig)
263
{
264
    if (sig < ARRAY_SIZE (gdb_signal_table))
265
        return gdb_signal_table[sig];
266
    else
267
        return -1;
268
}
269

    
270
//#define DEBUG_GDB
271

    
272
typedef struct GDBRegisterState {
273
    int base_reg;
274
    int num_regs;
275
    gdb_reg_cb get_reg;
276
    gdb_reg_cb set_reg;
277
    const char *xml;
278
    struct GDBRegisterState *next;
279
} GDBRegisterState;
280

    
281
enum RSState {
282
    RS_INACTIVE,
283
    RS_IDLE,
284
    RS_GETLINE,
285
    RS_CHKSUM1,
286
    RS_CHKSUM2,
287
};
288
typedef struct GDBState {
289
    CPUArchState *c_cpu; /* current CPU for step/continue ops */
290
    CPUArchState *g_cpu; /* current CPU for other ops */
291
    CPUArchState *query_cpu; /* for q{f|s}ThreadInfo */
292
    enum RSState state; /* parsing state */
293
    char line_buf[MAX_PACKET_LENGTH];
294
    int line_buf_index;
295
    int line_csum;
296
    uint8_t last_packet[MAX_PACKET_LENGTH + 4];
297
    int last_packet_len;
298
    int signal;
299
#ifdef CONFIG_USER_ONLY
300
    int fd;
301
    int running_state;
302
#else
303
    CharDriverState *chr;
304
    CharDriverState *mon_chr;
305
#endif
306
    char syscall_buf[256];
307
    gdb_syscall_complete_cb current_syscall_cb;
308
} GDBState;
309

    
310
/* By default use no IRQs and no timers while single stepping so as to
311
 * make single stepping like an ICE HW step.
312
 */
313
static int sstep_flags = SSTEP_ENABLE|SSTEP_NOIRQ|SSTEP_NOTIMER;
314

    
315
static GDBState *gdbserver_state;
316

    
317
/* This is an ugly hack to cope with both new and old gdb.
318
   If gdb sends qXfer:features:read then assume we're talking to a newish
319
   gdb that understands target descriptions.  */
320
static int gdb_has_xml;
321

    
322
#ifdef CONFIG_USER_ONLY
323
/* XXX: This is not thread safe.  Do we care?  */
324
static int gdbserver_fd = -1;
325

    
326
static int get_char(GDBState *s)
327
{
328
    uint8_t ch;
329
    int ret;
330

    
331
    for(;;) {
332
        ret = qemu_recv(s->fd, &ch, 1, 0);
333
        if (ret < 0) {
334
            if (errno == ECONNRESET)
335
                s->fd = -1;
336
            if (errno != EINTR && errno != EAGAIN)
337
                return -1;
338
        } else if (ret == 0) {
339
            close(s->fd);
340
            s->fd = -1;
341
            return -1;
342
        } else {
343
            break;
344
        }
345
    }
346
    return ch;
347
}
348
#endif
349

    
350
static enum {
351
    GDB_SYS_UNKNOWN,
352
    GDB_SYS_ENABLED,
353
    GDB_SYS_DISABLED,
354
} gdb_syscall_mode;
355

    
356
/* If gdb is connected when the first semihosting syscall occurs then use
357
   remote gdb syscalls.  Otherwise use native file IO.  */
358
int use_gdb_syscalls(void)
359
{
360
    if (gdb_syscall_mode == GDB_SYS_UNKNOWN) {
361
        gdb_syscall_mode = (gdbserver_state ? GDB_SYS_ENABLED
362
                                            : GDB_SYS_DISABLED);
363
    }
364
    return gdb_syscall_mode == GDB_SYS_ENABLED;
365
}
366

    
367
/* Resume execution.  */
368
static inline void gdb_continue(GDBState *s)
369
{
370
#ifdef CONFIG_USER_ONLY
371
    s->running_state = 1;
372
#else
373
    vm_start();
374
#endif
375
}
376

    
377
static void put_buffer(GDBState *s, const uint8_t *buf, int len)
378
{
379
#ifdef CONFIG_USER_ONLY
380
    int ret;
381

    
382
    while (len > 0) {
383
        ret = send(s->fd, buf, len, 0);
384
        if (ret < 0) {
385
            if (errno != EINTR && errno != EAGAIN)
386
                return;
387
        } else {
388
            buf += ret;
389
            len -= ret;
390
        }
391
    }
392
#else
393
    qemu_chr_fe_write(s->chr, buf, len);
394
#endif
395
}
396

    
397
static inline int fromhex(int v)
398
{
399
    if (v >= '0' && v <= '9')
400
        return v - '0';
401
    else if (v >= 'A' && v <= 'F')
402
        return v - 'A' + 10;
403
    else if (v >= 'a' && v <= 'f')
404
        return v - 'a' + 10;
405
    else
406
        return 0;
407
}
408

    
409
static inline int tohex(int v)
410
{
411
    if (v < 10)
412
        return v + '0';
413
    else
414
        return v - 10 + 'a';
415
}
416

    
417
static void memtohex(char *buf, const uint8_t *mem, int len)
418
{
419
    int i, c;
420
    char *q;
421
    q = buf;
422
    for(i = 0; i < len; i++) {
423
        c = mem[i];
424
        *q++ = tohex(c >> 4);
425
        *q++ = tohex(c & 0xf);
426
    }
427
    *q = '\0';
428
}
429

    
430
static void hextomem(uint8_t *mem, const char *buf, int len)
431
{
432
    int i;
433

    
434
    for(i = 0; i < len; i++) {
435
        mem[i] = (fromhex(buf[0]) << 4) | fromhex(buf[1]);
436
        buf += 2;
437
    }
438
}
439

    
440
/* return -1 if error, 0 if OK */
441
static int put_packet_binary(GDBState *s, const char *buf, int len)
442
{
443
    int csum, i;
444
    uint8_t *p;
445

    
446
    for(;;) {
447
        p = s->last_packet;
448
        *(p++) = '$';
449
        memcpy(p, buf, len);
450
        p += len;
451
        csum = 0;
452
        for(i = 0; i < len; i++) {
453
            csum += buf[i];
454
        }
455
        *(p++) = '#';
456
        *(p++) = tohex((csum >> 4) & 0xf);
457
        *(p++) = tohex((csum) & 0xf);
458

    
459
        s->last_packet_len = p - s->last_packet;
460
        put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
461

    
462
#ifdef CONFIG_USER_ONLY
463
        i = get_char(s);
464
        if (i < 0)
465
            return -1;
466
        if (i == '+')
467
            break;
468
#else
469
        break;
470
#endif
471
    }
472
    return 0;
473
}
474

    
475
/* return -1 if error, 0 if OK */
476
static int put_packet(GDBState *s, const char *buf)
477
{
478
#ifdef DEBUG_GDB
479
    printf("reply='%s'\n", buf);
480
#endif
481

    
482
    return put_packet_binary(s, buf, strlen(buf));
483
}
484

    
485
/* The GDB remote protocol transfers values in target byte order.  This means
486
   we can use the raw memory access routines to access the value buffer.
487
   Conveniently, these also handle the case where the buffer is mis-aligned.
488
 */
489
#define GET_REG8(val) do { \
490
    stb_p(mem_buf, val); \
491
    return 1; \
492
    } while(0)
493
#define GET_REG16(val) do { \
494
    stw_p(mem_buf, val); \
495
    return 2; \
496
    } while(0)
497
#define GET_REG32(val) do { \
498
    stl_p(mem_buf, val); \
499
    return 4; \
500
    } while(0)
501
#define GET_REG64(val) do { \
502
    stq_p(mem_buf, val); \
503
    return 8; \
504
    } while(0)
505

    
506
#if TARGET_LONG_BITS == 64
507
#define GET_REGL(val) GET_REG64(val)
508
#define ldtul_p(addr) ldq_p(addr)
509
#else
510
#define GET_REGL(val) GET_REG32(val)
511
#define ldtul_p(addr) ldl_p(addr)
512
#endif
513

    
514
#if defined(TARGET_I386)
515

    
516
#ifdef TARGET_X86_64
517
static const int gpr_map[16] = {
518
    R_EAX, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI, R_EBP, R_ESP,
519
    8, 9, 10, 11, 12, 13, 14, 15
520
};
521
#else
522
#define gpr_map gpr_map32
523
#endif
524
static const int gpr_map32[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
525

    
526
#define NUM_CORE_REGS (CPU_NB_REGS * 2 + 25)
527

    
528
#define IDX_IP_REG      CPU_NB_REGS
529
#define IDX_FLAGS_REG   (IDX_IP_REG + 1)
530
#define IDX_SEG_REGS    (IDX_FLAGS_REG + 1)
531
#define IDX_FP_REGS     (IDX_SEG_REGS + 6)
532
#define IDX_XMM_REGS    (IDX_FP_REGS + 16)
533
#define IDX_MXCSR_REG   (IDX_XMM_REGS + CPU_NB_REGS)
534

    
535
static int cpu_gdb_read_register(CPUX86State *env, uint8_t *mem_buf, int n)
536
{
537
    if (n < CPU_NB_REGS) {
538
        if (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK) {
539
            GET_REG64(env->regs[gpr_map[n]]);
540
        } else if (n < CPU_NB_REGS32) {
541
            GET_REG32(env->regs[gpr_map32[n]]);
542
        }
543
    } else if (n >= IDX_FP_REGS && n < IDX_FP_REGS + 8) {
544
#ifdef USE_X86LDOUBLE
545
        /* FIXME: byteswap float values - after fixing fpregs layout. */
546
        memcpy(mem_buf, &env->fpregs[n - IDX_FP_REGS], 10);
547
#else
548
        memset(mem_buf, 0, 10);
549
#endif
550
        return 10;
551
    } else if (n >= IDX_XMM_REGS && n < IDX_XMM_REGS + CPU_NB_REGS) {
552
        n -= IDX_XMM_REGS;
553
        if (n < CPU_NB_REGS32 ||
554
            (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK)) {
555
            stq_p(mem_buf, env->xmm_regs[n].XMM_Q(0));
556
            stq_p(mem_buf + 8, env->xmm_regs[n].XMM_Q(1));
557
            return 16;
558
        }
559
    } else {
560
        switch (n) {
561
        case IDX_IP_REG:
562
            if (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK) {
563
                GET_REG64(env->eip);
564
            } else {
565
                GET_REG32(env->eip);
566
            }
567
        case IDX_FLAGS_REG: GET_REG32(env->eflags);
568

    
569
        case IDX_SEG_REGS:     GET_REG32(env->segs[R_CS].selector);
570
        case IDX_SEG_REGS + 1: GET_REG32(env->segs[R_SS].selector);
571
        case IDX_SEG_REGS + 2: GET_REG32(env->segs[R_DS].selector);
572
        case IDX_SEG_REGS + 3: GET_REG32(env->segs[R_ES].selector);
573
        case IDX_SEG_REGS + 4: GET_REG32(env->segs[R_FS].selector);
574
        case IDX_SEG_REGS + 5: GET_REG32(env->segs[R_GS].selector);
575

    
576
        case IDX_FP_REGS + 8:  GET_REG32(env->fpuc);
577
        case IDX_FP_REGS + 9:  GET_REG32((env->fpus & ~0x3800) |
578
                                         (env->fpstt & 0x7) << 11);
579
        case IDX_FP_REGS + 10: GET_REG32(0); /* ftag */
580
        case IDX_FP_REGS + 11: GET_REG32(0); /* fiseg */
581
        case IDX_FP_REGS + 12: GET_REG32(0); /* fioff */
582
        case IDX_FP_REGS + 13: GET_REG32(0); /* foseg */
583
        case IDX_FP_REGS + 14: GET_REG32(0); /* fooff */
584
        case IDX_FP_REGS + 15: GET_REG32(0); /* fop */
585

    
586
        case IDX_MXCSR_REG: GET_REG32(env->mxcsr);
587
        }
588
    }
589
    return 0;
590
}
591

    
592
static int cpu_x86_gdb_load_seg(CPUX86State *env, int sreg, uint8_t *mem_buf)
593
{
594
    uint16_t selector = ldl_p(mem_buf);
595

    
596
    if (selector != env->segs[sreg].selector) {
597
#if defined(CONFIG_USER_ONLY)
598
        cpu_x86_load_seg(env, sreg, selector);
599
#else
600
        unsigned int limit, flags;
601
        target_ulong base;
602

    
603
        if (!(env->cr[0] & CR0_PE_MASK) || (env->eflags & VM_MASK)) {
604
            base = selector << 4;
605
            limit = 0xffff;
606
            flags = 0;
607
        } else {
608
            if (!cpu_x86_get_descr_debug(env, selector, &base, &limit, &flags))
609
                return 4;
610
        }
611
        cpu_x86_load_seg_cache(env, sreg, selector, base, limit, flags);
612
#endif
613
    }
614
    return 4;
615
}
616

    
617
static int cpu_gdb_write_register(CPUX86State *env, uint8_t *mem_buf, int n)
618
{
619
    uint32_t tmp;
620

    
621
    if (n < CPU_NB_REGS) {
622
        if (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK) {
623
            env->regs[gpr_map[n]] = ldtul_p(mem_buf);
624
            return sizeof(target_ulong);
625
        } else if (n < CPU_NB_REGS32) {
626
            n = gpr_map32[n];
627
            env->regs[n] &= ~0xffffffffUL;
628
            env->regs[n] |= (uint32_t)ldl_p(mem_buf);
629
            return 4;
630
        }
631
    } else if (n >= IDX_FP_REGS && n < IDX_FP_REGS + 8) {
632
#ifdef USE_X86LDOUBLE
633
        /* FIXME: byteswap float values - after fixing fpregs layout. */
634
        memcpy(&env->fpregs[n - IDX_FP_REGS], mem_buf, 10);
635
#endif
636
        return 10;
637
    } else if (n >= IDX_XMM_REGS && n < IDX_XMM_REGS + CPU_NB_REGS) {
638
        n -= IDX_XMM_REGS;
639
        if (n < CPU_NB_REGS32 ||
640
            (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK)) {
641
            env->xmm_regs[n].XMM_Q(0) = ldq_p(mem_buf);
642
            env->xmm_regs[n].XMM_Q(1) = ldq_p(mem_buf + 8);
643
            return 16;
644
        }
645
    } else {
646
        switch (n) {
647
        case IDX_IP_REG:
648
            if (TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK) {
649
                env->eip = ldq_p(mem_buf);
650
                return 8;
651
            } else {
652
                env->eip &= ~0xffffffffUL;
653
                env->eip |= (uint32_t)ldl_p(mem_buf);
654
                return 4;
655
            }
656
        case IDX_FLAGS_REG:
657
            env->eflags = ldl_p(mem_buf);
658
            return 4;
659

    
660
        case IDX_SEG_REGS:     return cpu_x86_gdb_load_seg(env, R_CS, mem_buf);
661
        case IDX_SEG_REGS + 1: return cpu_x86_gdb_load_seg(env, R_SS, mem_buf);
662
        case IDX_SEG_REGS + 2: return cpu_x86_gdb_load_seg(env, R_DS, mem_buf);
663
        case IDX_SEG_REGS + 3: return cpu_x86_gdb_load_seg(env, R_ES, mem_buf);
664
        case IDX_SEG_REGS + 4: return cpu_x86_gdb_load_seg(env, R_FS, mem_buf);
665
        case IDX_SEG_REGS + 5: return cpu_x86_gdb_load_seg(env, R_GS, mem_buf);
666

    
667
        case IDX_FP_REGS + 8:
668
            env->fpuc = ldl_p(mem_buf);
669
            return 4;
670
        case IDX_FP_REGS + 9:
671
            tmp = ldl_p(mem_buf);
672
            env->fpstt = (tmp >> 11) & 7;
673
            env->fpus = tmp & ~0x3800;
674
            return 4;
675
        case IDX_FP_REGS + 10: /* ftag */  return 4;
676
        case IDX_FP_REGS + 11: /* fiseg */ return 4;
677
        case IDX_FP_REGS + 12: /* fioff */ return 4;
678
        case IDX_FP_REGS + 13: /* foseg */ return 4;
679
        case IDX_FP_REGS + 14: /* fooff */ return 4;
680
        case IDX_FP_REGS + 15: /* fop */   return 4;
681

    
682
        case IDX_MXCSR_REG:
683
            env->mxcsr = ldl_p(mem_buf);
684
            return 4;
685
        }
686
    }
687
    /* Unrecognised register.  */
688
    return 0;
689
}
690

    
691
#elif defined (TARGET_PPC)
692

    
693
/* Old gdb always expects FP registers.  Newer (xml-aware) gdb only
694
   expects whatever the target description contains.  Due to a
695
   historical mishap the FP registers appear in between core integer
696
   regs and PC, MSR, CR, and so forth.  We hack round this by giving the
697
   FP regs zero size when talking to a newer gdb.  */
698
#define NUM_CORE_REGS 71
699
#if defined (TARGET_PPC64)
700
#define GDB_CORE_XML "power64-core.xml"
701
#else
702
#define GDB_CORE_XML "power-core.xml"
703
#endif
704

    
705
static int cpu_gdb_read_register(CPUPPCState *env, uint8_t *mem_buf, int n)
706
{
707
    if (n < 32) {
708
        /* gprs */
709
        GET_REGL(env->gpr[n]);
710
    } else if (n < 64) {
711
        /* fprs */
712
        if (gdb_has_xml)
713
            return 0;
714
        stfq_p(mem_buf, env->fpr[n-32]);
715
        return 8;
716
    } else {
717
        switch (n) {
718
        case 64: GET_REGL(env->nip);
719
        case 65: GET_REGL(env->msr);
720
        case 66:
721
            {
722
                uint32_t cr = 0;
723
                int i;
724
                for (i = 0; i < 8; i++)
725
                    cr |= env->crf[i] << (32 - ((i + 1) * 4));
726
                GET_REG32(cr);
727
            }
728
        case 67: GET_REGL(env->lr);
729
        case 68: GET_REGL(env->ctr);
730
        case 69: GET_REGL(env->xer);
731
        case 70:
732
            {
733
                if (gdb_has_xml)
734
                    return 0;
735
                GET_REG32(env->fpscr);
736
            }
737
        }
738
    }
739
    return 0;
740
}
741

    
742
static int cpu_gdb_write_register(CPUPPCState *env, uint8_t *mem_buf, int n)
743
{
744
    if (n < 32) {
745
        /* gprs */
746
        env->gpr[n] = ldtul_p(mem_buf);
747
        return sizeof(target_ulong);
748
    } else if (n < 64) {
749
        /* fprs */
750
        if (gdb_has_xml)
751
            return 0;
752
        env->fpr[n-32] = ldfq_p(mem_buf);
753
        return 8;
754
    } else {
755
        switch (n) {
756
        case 64:
757
            env->nip = ldtul_p(mem_buf);
758
            return sizeof(target_ulong);
759
        case 65:
760
            ppc_store_msr(env, ldtul_p(mem_buf));
761
            return sizeof(target_ulong);
762
        case 66:
763
            {
764
                uint32_t cr = ldl_p(mem_buf);
765
                int i;
766
                for (i = 0; i < 8; i++)
767
                    env->crf[i] = (cr >> (32 - ((i + 1) * 4))) & 0xF;
768
                return 4;
769
            }
770
        case 67:
771
            env->lr = ldtul_p(mem_buf);
772
            return sizeof(target_ulong);
773
        case 68:
774
            env->ctr = ldtul_p(mem_buf);
775
            return sizeof(target_ulong);
776
        case 69:
777
            env->xer = ldtul_p(mem_buf);
778
            return sizeof(target_ulong);
779
        case 70:
780
            /* fpscr */
781
            if (gdb_has_xml)
782
                return 0;
783
            return 4;
784
        }
785
    }
786
    return 0;
787
}
788

    
789
#elif defined (TARGET_SPARC)
790

    
791
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
792
#define NUM_CORE_REGS 86
793
#else
794
#define NUM_CORE_REGS 72
795
#endif
796

    
797
#ifdef TARGET_ABI32
798
#define GET_REGA(val) GET_REG32(val)
799
#else
800
#define GET_REGA(val) GET_REGL(val)
801
#endif
802

    
803
static int cpu_gdb_read_register(CPUSPARCState *env, uint8_t *mem_buf, int n)
804
{
805
    if (n < 8) {
806
        /* g0..g7 */
807
        GET_REGA(env->gregs[n]);
808
    }
809
    if (n < 32) {
810
        /* register window */
811
        GET_REGA(env->regwptr[n - 8]);
812
    }
813
#if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
814
    if (n < 64) {
815
        /* fprs */
816
        if (n & 1) {
817
            GET_REG32(env->fpr[(n - 32) / 2].l.lower);
818
        } else {
819
            GET_REG32(env->fpr[(n - 32) / 2].l.upper);
820
        }
821
    }
822
    /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
823
    switch (n) {
824
    case 64: GET_REGA(env->y);
825
    case 65: GET_REGA(cpu_get_psr(env));
826
    case 66: GET_REGA(env->wim);
827
    case 67: GET_REGA(env->tbr);
828
    case 68: GET_REGA(env->pc);
829
    case 69: GET_REGA(env->npc);
830
    case 70: GET_REGA(env->fsr);
831
    case 71: GET_REGA(0); /* csr */
832
    default: GET_REGA(0);
833
    }
834
#else
835
    if (n < 64) {
836
        /* f0-f31 */
837
        if (n & 1) {
838
            GET_REG32(env->fpr[(n - 32) / 2].l.lower);
839
        } else {
840
            GET_REG32(env->fpr[(n - 32) / 2].l.upper);
841
        }
842
    }
843
    if (n < 80) {
844
        /* f32-f62 (double width, even numbers only) */
845
        GET_REG64(env->fpr[(n - 32) / 2].ll);
846
    }
847
    switch (n) {
848
    case 80: GET_REGL(env->pc);
849
    case 81: GET_REGL(env->npc);
850
    case 82: GET_REGL((cpu_get_ccr(env) << 32) |
851
                      ((env->asi & 0xff) << 24) |
852
                      ((env->pstate & 0xfff) << 8) |
853
                      cpu_get_cwp64(env));
854
    case 83: GET_REGL(env->fsr);
855
    case 84: GET_REGL(env->fprs);
856
    case 85: GET_REGL(env->y);
857
    }
858
#endif
859
    return 0;
860
}
861

    
862
static int cpu_gdb_write_register(CPUSPARCState *env, uint8_t *mem_buf, int n)
863
{
864
#if defined(TARGET_ABI32)
865
    abi_ulong tmp;
866

    
867
    tmp = ldl_p(mem_buf);
868
#else
869
    target_ulong tmp;
870

    
871
    tmp = ldtul_p(mem_buf);
872
#endif
873

    
874
    if (n < 8) {
875
        /* g0..g7 */
876
        env->gregs[n] = tmp;
877
    } else if (n < 32) {
878
        /* register window */
879
        env->regwptr[n - 8] = tmp;
880
    }
881
#if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
882
    else if (n < 64) {
883
        /* fprs */
884
        /* f0-f31 */
885
        if (n & 1) {
886
            env->fpr[(n - 32) / 2].l.lower = tmp;
887
        } else {
888
            env->fpr[(n - 32) / 2].l.upper = tmp;
889
        }
890
    } else {
891
        /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */
892
        switch (n) {
893
        case 64: env->y = tmp; break;
894
        case 65: cpu_put_psr(env, tmp); break;
895
        case 66: env->wim = tmp; break;
896
        case 67: env->tbr = tmp; break;
897
        case 68: env->pc = tmp; break;
898
        case 69: env->npc = tmp; break;
899
        case 70: env->fsr = tmp; break;
900
        default: return 0;
901
        }
902
    }
903
    return 4;
904
#else
905
    else if (n < 64) {
906
        /* f0-f31 */
907
        tmp = ldl_p(mem_buf);
908
        if (n & 1) {
909
            env->fpr[(n - 32) / 2].l.lower = tmp;
910
        } else {
911
            env->fpr[(n - 32) / 2].l.upper = tmp;
912
        }
913
        return 4;
914
    } else if (n < 80) {
915
        /* f32-f62 (double width, even numbers only) */
916
        env->fpr[(n - 32) / 2].ll = tmp;
917
    } else {
918
        switch (n) {
919
        case 80: env->pc = tmp; break;
920
        case 81: env->npc = tmp; break;
921
        case 82:
922
            cpu_put_ccr(env, tmp >> 32);
923
            env->asi = (tmp >> 24) & 0xff;
924
            env->pstate = (tmp >> 8) & 0xfff;
925
            cpu_put_cwp64(env, tmp & 0xff);
926
            break;
927
        case 83: env->fsr = tmp; break;
928
        case 84: env->fprs = tmp; break;
929
        case 85: env->y = tmp; break;
930
        default: return 0;
931
        }
932
    }
933
    return 8;
934
#endif
935
}
936
#elif defined (TARGET_ARM)
937

    
938
/* Old gdb always expect FPA registers.  Newer (xml-aware) gdb only expect
939
   whatever the target description contains.  Due to a historical mishap
940
   the FPA registers appear in between core integer regs and the CPSR.
941
   We hack round this by giving the FPA regs zero size when talking to a
942
   newer gdb.  */
943
#define NUM_CORE_REGS 26
944
#define GDB_CORE_XML "arm-core.xml"
945

    
946
static int cpu_gdb_read_register(CPUARMState *env, uint8_t *mem_buf, int n)
947
{
948
    if (n < 16) {
949
        /* Core integer register.  */
950
        GET_REG32(env->regs[n]);
951
    }
952
    if (n < 24) {
953
        /* FPA registers.  */
954
        if (gdb_has_xml)
955
            return 0;
956
        memset(mem_buf, 0, 12);
957
        return 12;
958
    }
959
    switch (n) {
960
    case 24:
961
        /* FPA status register.  */
962
        if (gdb_has_xml)
963
            return 0;
964
        GET_REG32(0);
965
    case 25:
966
        /* CPSR */
967
        GET_REG32(cpsr_read(env));
968
    }
969
    /* Unknown register.  */
970
    return 0;
971
}
972

    
973
static int cpu_gdb_write_register(CPUARMState *env, uint8_t *mem_buf, int n)
974
{
975
    uint32_t tmp;
976

    
977
    tmp = ldl_p(mem_buf);
978

    
979
    /* Mask out low bit of PC to workaround gdb bugs.  This will probably
980
       cause problems if we ever implement the Jazelle DBX extensions.  */
981
    if (n == 15)
982
        tmp &= ~1;
983

    
984
    if (n < 16) {
985
        /* Core integer register.  */
986
        env->regs[n] = tmp;
987
        return 4;
988
    }
989
    if (n < 24) { /* 16-23 */
990
        /* FPA registers (ignored).  */
991
        if (gdb_has_xml)
992
            return 0;
993
        return 12;
994
    }
995
    switch (n) {
996
    case 24:
997
        /* FPA status register (ignored).  */
998
        if (gdb_has_xml)
999
            return 0;
1000
        return 4;
1001
    case 25:
1002
        /* CPSR */
1003
        cpsr_write (env, tmp, 0xffffffff);
1004
        return 4;
1005
    }
1006
    /* Unknown register.  */
1007
    return 0;
1008
}
1009

    
1010
#elif defined (TARGET_M68K)
1011

    
1012
#define NUM_CORE_REGS 18
1013

    
1014
#define GDB_CORE_XML "cf-core.xml"
1015

    
1016
static int cpu_gdb_read_register(CPUM68KState *env, uint8_t *mem_buf, int n)
1017
{
1018
    if (n < 8) {
1019
        /* D0-D7 */
1020
        GET_REG32(env->dregs[n]);
1021
    } else if (n < 16) {
1022
        /* A0-A7 */
1023
        GET_REG32(env->aregs[n - 8]);
1024
    } else {
1025
        switch (n) {
1026
        case 16: GET_REG32(env->sr);
1027
        case 17: GET_REG32(env->pc);
1028
        }
1029
    }
1030
    /* FP registers not included here because they vary between
1031
       ColdFire and m68k.  Use XML bits for these.  */
1032
    return 0;
1033
}
1034

    
1035
static int cpu_gdb_write_register(CPUM68KState *env, uint8_t *mem_buf, int n)
1036
{
1037
    uint32_t tmp;
1038

    
1039
    tmp = ldl_p(mem_buf);
1040

    
1041
    if (n < 8) {
1042
        /* D0-D7 */
1043
        env->dregs[n] = tmp;
1044
    } else if (n < 16) {
1045
        /* A0-A7 */
1046
        env->aregs[n - 8] = tmp;
1047
    } else {
1048
        switch (n) {
1049
        case 16: env->sr = tmp; break;
1050
        case 17: env->pc = tmp; break;
1051
        default: return 0;
1052
        }
1053
    }
1054
    return 4;
1055
}
1056
#elif defined (TARGET_MIPS)
1057

    
1058
#define NUM_CORE_REGS 73
1059

    
1060
static int cpu_gdb_read_register(CPUMIPSState *env, uint8_t *mem_buf, int n)
1061
{
1062
    if (n < 32) {
1063
        GET_REGL(env->active_tc.gpr[n]);
1064
    }
1065
    if (env->CP0_Config1 & (1 << CP0C1_FP)) {
1066
        if (n >= 38 && n < 70) {
1067
            if (env->CP0_Status & (1 << CP0St_FR))
1068
                GET_REGL(env->active_fpu.fpr[n - 38].d);
1069
            else
1070
                GET_REGL(env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX]);
1071
        }
1072
        switch (n) {
1073
        case 70: GET_REGL((int32_t)env->active_fpu.fcr31);
1074
        case 71: GET_REGL((int32_t)env->active_fpu.fcr0);
1075
        }
1076
    }
1077
    switch (n) {
1078
    case 32: GET_REGL((int32_t)env->CP0_Status);
1079
    case 33: GET_REGL(env->active_tc.LO[0]);
1080
    case 34: GET_REGL(env->active_tc.HI[0]);
1081
    case 35: GET_REGL(env->CP0_BadVAddr);
1082
    case 36: GET_REGL((int32_t)env->CP0_Cause);
1083
    case 37: GET_REGL(env->active_tc.PC | !!(env->hflags & MIPS_HFLAG_M16));
1084
    case 72: GET_REGL(0); /* fp */
1085
    case 89: GET_REGL((int32_t)env->CP0_PRid);
1086
    }
1087
    if (n >= 73 && n <= 88) {
1088
        /* 16 embedded regs.  */
1089
        GET_REGL(0);
1090
    }
1091

    
1092
    return 0;
1093
}
1094

    
1095
/* convert MIPS rounding mode in FCR31 to IEEE library */
1096
static unsigned int ieee_rm[] =
1097
  {
1098
    float_round_nearest_even,
1099
    float_round_to_zero,
1100
    float_round_up,
1101
    float_round_down
1102
  };
1103
#define RESTORE_ROUNDING_MODE \
1104
    set_float_rounding_mode(ieee_rm[env->active_fpu.fcr31 & 3], &env->active_fpu.fp_status)
1105

    
1106
static int cpu_gdb_write_register(CPUMIPSState *env, uint8_t *mem_buf, int n)
1107
{
1108
    target_ulong tmp;
1109

    
1110
    tmp = ldtul_p(mem_buf);
1111

    
1112
    if (n < 32) {
1113
        env->active_tc.gpr[n] = tmp;
1114
        return sizeof(target_ulong);
1115
    }
1116
    if (env->CP0_Config1 & (1 << CP0C1_FP)
1117
            && n >= 38 && n < 73) {
1118
        if (n < 70) {
1119
            if (env->CP0_Status & (1 << CP0St_FR))
1120
              env->active_fpu.fpr[n - 38].d = tmp;
1121
            else
1122
              env->active_fpu.fpr[n - 38].w[FP_ENDIAN_IDX] = tmp;
1123
        }
1124
        switch (n) {
1125
        case 70:
1126
            env->active_fpu.fcr31 = tmp & 0xFF83FFFF;
1127
            /* set rounding mode */
1128
            RESTORE_ROUNDING_MODE;
1129
            break;
1130
        case 71: env->active_fpu.fcr0 = tmp; break;
1131
        }
1132
        return sizeof(target_ulong);
1133
    }
1134
    switch (n) {
1135
    case 32: env->CP0_Status = tmp; break;
1136
    case 33: env->active_tc.LO[0] = tmp; break;
1137
    case 34: env->active_tc.HI[0] = tmp; break;
1138
    case 35: env->CP0_BadVAddr = tmp; break;
1139
    case 36: env->CP0_Cause = tmp; break;
1140
    case 37:
1141
        env->active_tc.PC = tmp & ~(target_ulong)1;
1142
        if (tmp & 1) {
1143
            env->hflags |= MIPS_HFLAG_M16;
1144
        } else {
1145
            env->hflags &= ~(MIPS_HFLAG_M16);
1146
        }
1147
        break;
1148
    case 72: /* fp, ignored */ break;
1149
    default: 
1150
        if (n > 89)
1151
            return 0;
1152
        /* Other registers are readonly.  Ignore writes.  */
1153
        break;
1154
    }
1155

    
1156
    return sizeof(target_ulong);
1157
}
1158
#elif defined(TARGET_OPENRISC)
1159

    
1160
#define NUM_CORE_REGS (32 + 3)
1161

    
1162
static int cpu_gdb_read_register(CPUOpenRISCState *env, uint8_t *mem_buf, int n)
1163
{
1164
    if (n < 32) {
1165
        GET_REG32(env->gpr[n]);
1166
    } else {
1167
        switch (n) {
1168
        case 32:    /* PPC */
1169
            GET_REG32(env->ppc);
1170
            break;
1171

    
1172
        case 33:    /* NPC */
1173
            GET_REG32(env->npc);
1174
            break;
1175

    
1176
        case 34:    /* SR */
1177
            GET_REG32(env->sr);
1178
            break;
1179

    
1180
        default:
1181
            break;
1182
        }
1183
    }
1184
    return 0;
1185
}
1186

    
1187
static int cpu_gdb_write_register(CPUOpenRISCState *env,
1188
                                  uint8_t *mem_buf, int n)
1189
{
1190
    uint32_t tmp;
1191

    
1192
    if (n > NUM_CORE_REGS) {
1193
        return 0;
1194
    }
1195

    
1196
    tmp = ldl_p(mem_buf);
1197

    
1198
    if (n < 32) {
1199
        env->gpr[n] = tmp;
1200
    } else {
1201
        switch (n) {
1202
        case 32: /* PPC */
1203
            env->ppc = tmp;
1204
            break;
1205

    
1206
        case 33: /* NPC */
1207
            env->npc = tmp;
1208
            break;
1209

    
1210
        case 34: /* SR */
1211
            env->sr = tmp;
1212
            break;
1213

    
1214
        default:
1215
            break;
1216
        }
1217
    }
1218
    return 4;
1219
}
1220
#elif defined (TARGET_SH4)
1221

    
1222
/* Hint: Use "set architecture sh4" in GDB to see fpu registers */
1223
/* FIXME: We should use XML for this.  */
1224

    
1225
#define NUM_CORE_REGS 59
1226

    
1227
static int cpu_gdb_read_register(CPUSH4State *env, uint8_t *mem_buf, int n)
1228
{
1229
    switch (n) {
1230
    case 0 ... 7:
1231
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1232
            GET_REGL(env->gregs[n + 16]);
1233
        } else {
1234
            GET_REGL(env->gregs[n]);
1235
        }
1236
    case 8 ... 15:
1237
        GET_REGL(env->gregs[n]);
1238
    case 16:
1239
        GET_REGL(env->pc);
1240
    case 17:
1241
        GET_REGL(env->pr);
1242
    case 18:
1243
        GET_REGL(env->gbr);
1244
    case 19:
1245
        GET_REGL(env->vbr);
1246
    case 20:
1247
        GET_REGL(env->mach);
1248
    case 21:
1249
        GET_REGL(env->macl);
1250
    case 22:
1251
        GET_REGL(env->sr);
1252
    case 23:
1253
        GET_REGL(env->fpul);
1254
    case 24:
1255
        GET_REGL(env->fpscr);
1256
    case 25 ... 40:
1257
        if (env->fpscr & FPSCR_FR) {
1258
            stfl_p(mem_buf, env->fregs[n - 9]);
1259
        } else {
1260
            stfl_p(mem_buf, env->fregs[n - 25]);
1261
        }
1262
        return 4;
1263
    case 41:
1264
        GET_REGL(env->ssr);
1265
    case 42:
1266
        GET_REGL(env->spc);
1267
    case 43 ... 50:
1268
        GET_REGL(env->gregs[n - 43]);
1269
    case 51 ... 58:
1270
        GET_REGL(env->gregs[n - (51 - 16)]);
1271
    }
1272

    
1273
    return 0;
1274
}
1275

    
1276
static int cpu_gdb_write_register(CPUSH4State *env, uint8_t *mem_buf, int n)
1277
{
1278
    switch (n) {
1279
    case 0 ... 7:
1280
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1281
            env->gregs[n + 16] = ldl_p(mem_buf);
1282
        } else {
1283
            env->gregs[n] = ldl_p(mem_buf);
1284
        }
1285
        break;
1286
    case 8 ... 15:
1287
        env->gregs[n] = ldl_p(mem_buf);
1288
        break;
1289
    case 16:
1290
        env->pc = ldl_p(mem_buf);
1291
        break;
1292
    case 17:
1293
        env->pr = ldl_p(mem_buf);
1294
        break;
1295
    case 18:
1296
        env->gbr = ldl_p(mem_buf);
1297
        break;
1298
    case 19:
1299
        env->vbr = ldl_p(mem_buf);
1300
        break;
1301
    case 20:
1302
        env->mach = ldl_p(mem_buf);
1303
        break;
1304
    case 21:
1305
        env->macl = ldl_p(mem_buf);
1306
        break;
1307
    case 22:
1308
        env->sr = ldl_p(mem_buf);
1309
        break;
1310
    case 23:
1311
        env->fpul = ldl_p(mem_buf);
1312
        break;
1313
    case 24:
1314
        env->fpscr = ldl_p(mem_buf);
1315
        break;
1316
    case 25 ... 40:
1317
        if (env->fpscr & FPSCR_FR) {
1318
            env->fregs[n - 9] = ldfl_p(mem_buf);
1319
        } else {
1320
            env->fregs[n - 25] = ldfl_p(mem_buf);
1321
        }
1322
        break;
1323
    case 41:
1324
        env->ssr = ldl_p(mem_buf);
1325
        break;
1326
    case 42:
1327
        env->spc = ldl_p(mem_buf);
1328
        break;
1329
    case 43 ... 50:
1330
        env->gregs[n - 43] = ldl_p(mem_buf);
1331
        break;
1332
    case 51 ... 58:
1333
        env->gregs[n - (51 - 16)] = ldl_p(mem_buf);
1334
        break;
1335
    default: return 0;
1336
    }
1337

    
1338
    return 4;
1339
}
1340
#elif defined (TARGET_MICROBLAZE)
1341

    
1342
#define NUM_CORE_REGS (32 + 5)
1343

    
1344
static int cpu_gdb_read_register(CPUMBState *env, uint8_t *mem_buf, int n)
1345
{
1346
    if (n < 32) {
1347
        GET_REG32(env->regs[n]);
1348
    } else {
1349
        GET_REG32(env->sregs[n - 32]);
1350
    }
1351
    return 0;
1352
}
1353

    
1354
static int cpu_gdb_write_register(CPUMBState *env, uint8_t *mem_buf, int n)
1355
{
1356
    uint32_t tmp;
1357

    
1358
    if (n > NUM_CORE_REGS)
1359
        return 0;
1360

    
1361
    tmp = ldl_p(mem_buf);
1362

    
1363
    if (n < 32) {
1364
        env->regs[n] = tmp;
1365
    } else {
1366
        env->sregs[n - 32] = tmp;
1367
    }
1368
    return 4;
1369
}
1370
#elif defined (TARGET_CRIS)
1371

    
1372
#define NUM_CORE_REGS 49
1373

    
1374
static int
1375
read_register_crisv10(CPUCRISState *env, uint8_t *mem_buf, int n)
1376
{
1377
    if (n < 15) {
1378
        GET_REG32(env->regs[n]);
1379
    }
1380

    
1381
    if (n == 15) {
1382
        GET_REG32(env->pc);
1383
    }
1384

    
1385
    if (n < 32) {
1386
        switch (n) {
1387
        case 16:
1388
            GET_REG8(env->pregs[n - 16]);
1389
            break;
1390
        case 17:
1391
            GET_REG8(env->pregs[n - 16]);
1392
            break;
1393
        case 20:
1394
        case 21:
1395
            GET_REG16(env->pregs[n - 16]);
1396
            break;
1397
        default:
1398
            if (n >= 23) {
1399
                GET_REG32(env->pregs[n - 16]);
1400
            }
1401
            break;
1402
        }
1403
    }
1404
    return 0;
1405
}
1406

    
1407
static int cpu_gdb_read_register(CPUCRISState *env, uint8_t *mem_buf, int n)
1408
{
1409
    uint8_t srs;
1410

    
1411
    if (env->pregs[PR_VR] < 32)
1412
        return read_register_crisv10(env, mem_buf, n);
1413

    
1414
    srs = env->pregs[PR_SRS];
1415
    if (n < 16) {
1416
        GET_REG32(env->regs[n]);
1417
    }
1418

    
1419
    if (n >= 21 && n < 32) {
1420
        GET_REG32(env->pregs[n - 16]);
1421
    }
1422
    if (n >= 33 && n < 49) {
1423
        GET_REG32(env->sregs[srs][n - 33]);
1424
    }
1425
    switch (n) {
1426
    case 16: GET_REG8(env->pregs[0]);
1427
    case 17: GET_REG8(env->pregs[1]);
1428
    case 18: GET_REG32(env->pregs[2]);
1429
    case 19: GET_REG8(srs);
1430
    case 20: GET_REG16(env->pregs[4]);
1431
    case 32: GET_REG32(env->pc);
1432
    }
1433

    
1434
    return 0;
1435
}
1436

    
1437
static int cpu_gdb_write_register(CPUCRISState *env, uint8_t *mem_buf, int n)
1438
{
1439
    uint32_t tmp;
1440

    
1441
    if (n > 49)
1442
        return 0;
1443

    
1444
    tmp = ldl_p(mem_buf);
1445

    
1446
    if (n < 16) {
1447
        env->regs[n] = tmp;
1448
    }
1449

    
1450
    if (n >= 21 && n < 32) {
1451
        env->pregs[n - 16] = tmp;
1452
    }
1453

    
1454
    /* FIXME: Should support function regs be writable?  */
1455
    switch (n) {
1456
    case 16: return 1;
1457
    case 17: return 1;
1458
    case 18: env->pregs[PR_PID] = tmp; break;
1459
    case 19: return 1;
1460
    case 20: return 2;
1461
    case 32: env->pc = tmp; break;
1462
    }
1463

    
1464
    return 4;
1465
}
1466
#elif defined (TARGET_ALPHA)
1467

    
1468
#define NUM_CORE_REGS 67
1469

    
1470
static int cpu_gdb_read_register(CPUAlphaState *env, uint8_t *mem_buf, int n)
1471
{
1472
    uint64_t val;
1473
    CPU_DoubleU d;
1474

    
1475
    switch (n) {
1476
    case 0 ... 30:
1477
        val = env->ir[n];
1478
        break;
1479
    case 32 ... 62:
1480
        d.d = env->fir[n - 32];
1481
        val = d.ll;
1482
        break;
1483
    case 63:
1484
        val = cpu_alpha_load_fpcr(env);
1485
        break;
1486
    case 64:
1487
        val = env->pc;
1488
        break;
1489
    case 66:
1490
        val = env->unique;
1491
        break;
1492
    case 31:
1493
    case 65:
1494
        /* 31 really is the zero register; 65 is unassigned in the
1495
           gdb protocol, but is still required to occupy 8 bytes. */
1496
        val = 0;
1497
        break;
1498
    default:
1499
        return 0;
1500
    }
1501
    GET_REGL(val);
1502
}
1503

    
1504
static int cpu_gdb_write_register(CPUAlphaState *env, uint8_t *mem_buf, int n)
1505
{
1506
    target_ulong tmp = ldtul_p(mem_buf);
1507
    CPU_DoubleU d;
1508

    
1509
    switch (n) {
1510
    case 0 ... 30:
1511
        env->ir[n] = tmp;
1512
        break;
1513
    case 32 ... 62:
1514
        d.ll = tmp;
1515
        env->fir[n - 32] = d.d;
1516
        break;
1517
    case 63:
1518
        cpu_alpha_store_fpcr(env, tmp);
1519
        break;
1520
    case 64:
1521
        env->pc = tmp;
1522
        break;
1523
    case 66:
1524
        env->unique = tmp;
1525
        break;
1526
    case 31:
1527
    case 65:
1528
        /* 31 really is the zero register; 65 is unassigned in the
1529
           gdb protocol, but is still required to occupy 8 bytes. */
1530
        break;
1531
    default:
1532
        return 0;
1533
    }
1534
    return 8;
1535
}
1536
#elif defined (TARGET_S390X)
1537

    
1538
#define NUM_CORE_REGS S390_NUM_TOTAL_REGS
1539

    
1540
static int cpu_gdb_read_register(CPUS390XState *env, uint8_t *mem_buf, int n)
1541
{
1542
    switch (n) {
1543
        case S390_PSWM_REGNUM: GET_REGL(env->psw.mask); break;
1544
        case S390_PSWA_REGNUM: GET_REGL(env->psw.addr); break;
1545
        case S390_R0_REGNUM ... S390_R15_REGNUM:
1546
            GET_REGL(env->regs[n-S390_R0_REGNUM]); break;
1547
        case S390_A0_REGNUM ... S390_A15_REGNUM:
1548
            GET_REG32(env->aregs[n-S390_A0_REGNUM]); break;
1549
        case S390_FPC_REGNUM: GET_REG32(env->fpc); break;
1550
        case S390_F0_REGNUM ... S390_F15_REGNUM:
1551
            /* XXX */
1552
            break;
1553
        case S390_PC_REGNUM: GET_REGL(env->psw.addr); break;
1554
        case S390_CC_REGNUM:
1555
            env->cc_op = calc_cc(env, env->cc_op, env->cc_src, env->cc_dst,
1556
                                 env->cc_vr);
1557
            GET_REG32(env->cc_op);
1558
            break;
1559
    }
1560

    
1561
    return 0;
1562
}
1563

    
1564
static int cpu_gdb_write_register(CPUS390XState *env, uint8_t *mem_buf, int n)
1565
{
1566
    target_ulong tmpl;
1567
    uint32_t tmp32;
1568
    int r = 8;
1569
    tmpl = ldtul_p(mem_buf);
1570
    tmp32 = ldl_p(mem_buf);
1571

    
1572
    switch (n) {
1573
        case S390_PSWM_REGNUM: env->psw.mask = tmpl; break;
1574
        case S390_PSWA_REGNUM: env->psw.addr = tmpl; break;
1575
        case S390_R0_REGNUM ... S390_R15_REGNUM:
1576
            env->regs[n-S390_R0_REGNUM] = tmpl; break;
1577
        case S390_A0_REGNUM ... S390_A15_REGNUM:
1578
            env->aregs[n-S390_A0_REGNUM] = tmp32; r=4; break;
1579
        case S390_FPC_REGNUM: env->fpc = tmp32; r=4; break;
1580
        case S390_F0_REGNUM ... S390_F15_REGNUM:
1581
            /* XXX */
1582
            break;
1583
        case S390_PC_REGNUM: env->psw.addr = tmpl; break;
1584
        case S390_CC_REGNUM: env->cc_op = tmp32; r=4; break;
1585
    }
1586

    
1587
    return r;
1588
}
1589
#elif defined (TARGET_LM32)
1590

    
1591
#include "hw/lm32_pic.h"
1592
#define NUM_CORE_REGS (32 + 7)
1593

    
1594
static int cpu_gdb_read_register(CPULM32State *env, uint8_t *mem_buf, int n)
1595
{
1596
    if (n < 32) {
1597
        GET_REG32(env->regs[n]);
1598
    } else {
1599
        switch (n) {
1600
        case 32:
1601
            GET_REG32(env->pc);
1602
            break;
1603
        /* FIXME: put in right exception ID */
1604
        case 33:
1605
            GET_REG32(0);
1606
            break;
1607
        case 34:
1608
            GET_REG32(env->eba);
1609
            break;
1610
        case 35:
1611
            GET_REG32(env->deba);
1612
            break;
1613
        case 36:
1614
            GET_REG32(env->ie);
1615
            break;
1616
        case 37:
1617
            GET_REG32(lm32_pic_get_im(env->pic_state));
1618
            break;
1619
        case 38:
1620
            GET_REG32(lm32_pic_get_ip(env->pic_state));
1621
            break;
1622
        }
1623
    }
1624
    return 0;
1625
}
1626

    
1627
static int cpu_gdb_write_register(CPULM32State *env, uint8_t *mem_buf, int n)
1628
{
1629
    uint32_t tmp;
1630

    
1631
    if (n > NUM_CORE_REGS) {
1632
        return 0;
1633
    }
1634

    
1635
    tmp = ldl_p(mem_buf);
1636

    
1637
    if (n < 32) {
1638
        env->regs[n] = tmp;
1639
    } else {
1640
        switch (n) {
1641
        case 32:
1642
            env->pc = tmp;
1643
            break;
1644
        case 34:
1645
            env->eba = tmp;
1646
            break;
1647
        case 35:
1648
            env->deba = tmp;
1649
            break;
1650
        case 36:
1651
            env->ie = tmp;
1652
            break;
1653
        case 37:
1654
            lm32_pic_set_im(env->pic_state, tmp);
1655
            break;
1656
        case 38:
1657
            lm32_pic_set_ip(env->pic_state, tmp);
1658
            break;
1659
        }
1660
    }
1661
    return 4;
1662
}
1663
#elif defined(TARGET_XTENSA)
1664

    
1665
/* Use num_core_regs to see only non-privileged registers in an unmodified gdb.
1666
 * Use num_regs to see all registers. gdb modification is required for that:
1667
 * reset bit 0 in the 'flags' field of the registers definitions in the
1668
 * gdb/xtensa-config.c inside gdb source tree or inside gdb overlay.
1669
 */
1670
#define NUM_CORE_REGS (env->config->gdb_regmap.num_regs)
1671
#define num_g_regs NUM_CORE_REGS
1672

    
1673
static int cpu_gdb_read_register(CPUXtensaState *env, uint8_t *mem_buf, int n)
1674
{
1675
    const XtensaGdbReg *reg = env->config->gdb_regmap.reg + n;
1676

    
1677
    if (n < 0 || n >= env->config->gdb_regmap.num_regs) {
1678
        return 0;
1679
    }
1680

    
1681
    switch (reg->type) {
1682
    case 9: /*pc*/
1683
        GET_REG32(env->pc);
1684
        break;
1685

    
1686
    case 1: /*ar*/
1687
        xtensa_sync_phys_from_window(env);
1688
        GET_REG32(env->phys_regs[(reg->targno & 0xff) % env->config->nareg]);
1689
        break;
1690

    
1691
    case 2: /*SR*/
1692
        GET_REG32(env->sregs[reg->targno & 0xff]);
1693
        break;
1694

    
1695
    case 3: /*UR*/
1696
        GET_REG32(env->uregs[reg->targno & 0xff]);
1697
        break;
1698

    
1699
    case 4: /*f*/
1700
        GET_REG32(float32_val(env->fregs[reg->targno & 0x0f]));
1701
        break;
1702

    
1703
    case 8: /*a*/
1704
        GET_REG32(env->regs[reg->targno & 0x0f]);
1705
        break;
1706

    
1707
    default:
1708
        qemu_log("%s from reg %d of unsupported type %d\n",
1709
                __func__, n, reg->type);
1710
        return 0;
1711
    }
1712
}
1713

    
1714
static int cpu_gdb_write_register(CPUXtensaState *env, uint8_t *mem_buf, int n)
1715
{
1716
    uint32_t tmp;
1717
    const XtensaGdbReg *reg = env->config->gdb_regmap.reg + n;
1718

    
1719
    if (n < 0 || n >= env->config->gdb_regmap.num_regs) {
1720
        return 0;
1721
    }
1722

    
1723
    tmp = ldl_p(mem_buf);
1724

    
1725
    switch (reg->type) {
1726
    case 9: /*pc*/
1727
        env->pc = tmp;
1728
        break;
1729

    
1730
    case 1: /*ar*/
1731
        env->phys_regs[(reg->targno & 0xff) % env->config->nareg] = tmp;
1732
        xtensa_sync_window_from_phys(env);
1733
        break;
1734

    
1735
    case 2: /*SR*/
1736
        env->sregs[reg->targno & 0xff] = tmp;
1737
        break;
1738

    
1739
    case 3: /*UR*/
1740
        env->uregs[reg->targno & 0xff] = tmp;
1741
        break;
1742

    
1743
    case 4: /*f*/
1744
        env->fregs[reg->targno & 0x0f] = make_float32(tmp);
1745
        break;
1746

    
1747
    case 8: /*a*/
1748
        env->regs[reg->targno & 0x0f] = tmp;
1749
        break;
1750

    
1751
    default:
1752
        qemu_log("%s to reg %d of unsupported type %d\n",
1753
                __func__, n, reg->type);
1754
        return 0;
1755
    }
1756

    
1757
    return 4;
1758
}
1759
#else
1760

    
1761
#define NUM_CORE_REGS 0
1762

    
1763
static int cpu_gdb_read_register(CPUArchState *env, uint8_t *mem_buf, int n)
1764
{
1765
    return 0;
1766
}
1767

    
1768
static int cpu_gdb_write_register(CPUArchState *env, uint8_t *mem_buf, int n)
1769
{
1770
    return 0;
1771
}
1772

    
1773
#endif
1774

    
1775
#if !defined(TARGET_XTENSA)
1776
static int num_g_regs = NUM_CORE_REGS;
1777
#endif
1778

    
1779
#ifdef GDB_CORE_XML
1780
/* Encode data using the encoding for 'x' packets.  */
1781
static int memtox(char *buf, const char *mem, int len)
1782
{
1783
    char *p = buf;
1784
    char c;
1785

    
1786
    while (len--) {
1787
        c = *(mem++);
1788
        switch (c) {
1789
        case '#': case '$': case '*': case '}':
1790
            *(p++) = '}';
1791
            *(p++) = c ^ 0x20;
1792
            break;
1793
        default:
1794
            *(p++) = c;
1795
            break;
1796
        }
1797
    }
1798
    return p - buf;
1799
}
1800

    
1801
static const char *get_feature_xml(const char *p, const char **newp)
1802
{
1803
    size_t len;
1804
    int i;
1805
    const char *name;
1806
    static char target_xml[1024];
1807

    
1808
    len = 0;
1809
    while (p[len] && p[len] != ':')
1810
        len++;
1811
    *newp = p + len;
1812

    
1813
    name = NULL;
1814
    if (strncmp(p, "target.xml", len) == 0) {
1815
        /* Generate the XML description for this CPU.  */
1816
        if (!target_xml[0]) {
1817
            GDBRegisterState *r;
1818

    
1819
            snprintf(target_xml, sizeof(target_xml),
1820
                     "<?xml version=\"1.0\"?>"
1821
                     "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
1822
                     "<target>"
1823
                     "<xi:include href=\"%s\"/>",
1824
                     GDB_CORE_XML);
1825

    
1826
            for (r = first_cpu->gdb_regs; r; r = r->next) {
1827
                pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\"");
1828
                pstrcat(target_xml, sizeof(target_xml), r->xml);
1829
                pstrcat(target_xml, sizeof(target_xml), "\"/>");
1830
            }
1831
            pstrcat(target_xml, sizeof(target_xml), "</target>");
1832
        }
1833
        return target_xml;
1834
    }
1835
    for (i = 0; ; i++) {
1836
        name = xml_builtin[i][0];
1837
        if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
1838
            break;
1839
    }
1840
    return name ? xml_builtin[i][1] : NULL;
1841
}
1842
#endif
1843

    
1844
static int gdb_read_register(CPUArchState *env, uint8_t *mem_buf, int reg)
1845
{
1846
    GDBRegisterState *r;
1847

    
1848
    if (reg < NUM_CORE_REGS)
1849
        return cpu_gdb_read_register(env, mem_buf, reg);
1850

    
1851
    for (r = env->gdb_regs; r; r = r->next) {
1852
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1853
            return r->get_reg(env, mem_buf, reg - r->base_reg);
1854
        }
1855
    }
1856
    return 0;
1857
}
1858

    
1859
static int gdb_write_register(CPUArchState *env, uint8_t *mem_buf, int reg)
1860
{
1861
    GDBRegisterState *r;
1862

    
1863
    if (reg < NUM_CORE_REGS)
1864
        return cpu_gdb_write_register(env, mem_buf, reg);
1865

    
1866
    for (r = env->gdb_regs; r; r = r->next) {
1867
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1868
            return r->set_reg(env, mem_buf, reg - r->base_reg);
1869
        }
1870
    }
1871
    return 0;
1872
}
1873

    
1874
#if !defined(TARGET_XTENSA)
1875
/* Register a supplemental set of CPU registers.  If g_pos is nonzero it
1876
   specifies the first register number and these registers are included in
1877
   a standard "g" packet.  Direction is relative to gdb, i.e. get_reg is
1878
   gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
1879
 */
1880

    
1881
void gdb_register_coprocessor(CPUArchState * env,
1882
                             gdb_reg_cb get_reg, gdb_reg_cb set_reg,
1883
                             int num_regs, const char *xml, int g_pos)
1884
{
1885
    GDBRegisterState *s;
1886
    GDBRegisterState **p;
1887
    static int last_reg = NUM_CORE_REGS;
1888

    
1889
    p = &env->gdb_regs;
1890
    while (*p) {
1891
        /* Check for duplicates.  */
1892
        if (strcmp((*p)->xml, xml) == 0)
1893
            return;
1894
        p = &(*p)->next;
1895
    }
1896

    
1897
    s = g_new0(GDBRegisterState, 1);
1898
    s->base_reg = last_reg;
1899
    s->num_regs = num_regs;
1900
    s->get_reg = get_reg;
1901
    s->set_reg = set_reg;
1902
    s->xml = xml;
1903

    
1904
    /* Add to end of list.  */
1905
    last_reg += num_regs;
1906
    *p = s;
1907
    if (g_pos) {
1908
        if (g_pos != s->base_reg) {
1909
            fprintf(stderr, "Error: Bad gdb register numbering for '%s'\n"
1910
                    "Expected %d got %d\n", xml, g_pos, s->base_reg);
1911
        } else {
1912
            num_g_regs = last_reg;
1913
        }
1914
    }
1915
}
1916
#endif
1917

    
1918
#ifndef CONFIG_USER_ONLY
1919
static const int xlat_gdb_type[] = {
1920
    [GDB_WATCHPOINT_WRITE]  = BP_GDB | BP_MEM_WRITE,
1921
    [GDB_WATCHPOINT_READ]   = BP_GDB | BP_MEM_READ,
1922
    [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
1923
};
1924
#endif
1925

    
1926
static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
1927
{
1928
    CPUArchState *env;
1929
    int err = 0;
1930

    
1931
    if (kvm_enabled())
1932
        return kvm_insert_breakpoint(gdbserver_state->c_cpu, addr, len, type);
1933

    
1934
    switch (type) {
1935
    case GDB_BREAKPOINT_SW:
1936
    case GDB_BREAKPOINT_HW:
1937
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1938
            err = cpu_breakpoint_insert(env, addr, BP_GDB, NULL);
1939
            if (err)
1940
                break;
1941
        }
1942
        return err;
1943
#ifndef CONFIG_USER_ONLY
1944
    case GDB_WATCHPOINT_WRITE:
1945
    case GDB_WATCHPOINT_READ:
1946
    case GDB_WATCHPOINT_ACCESS:
1947
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1948
            err = cpu_watchpoint_insert(env, addr, len, xlat_gdb_type[type],
1949
                                        NULL);
1950
            if (err)
1951
                break;
1952
        }
1953
        return err;
1954
#endif
1955
    default:
1956
        return -ENOSYS;
1957
    }
1958
}
1959

    
1960
static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
1961
{
1962
    CPUArchState *env;
1963
    int err = 0;
1964

    
1965
    if (kvm_enabled())
1966
        return kvm_remove_breakpoint(gdbserver_state->c_cpu, addr, len, type);
1967

    
1968
    switch (type) {
1969
    case GDB_BREAKPOINT_SW:
1970
    case GDB_BREAKPOINT_HW:
1971
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1972
            err = cpu_breakpoint_remove(env, addr, BP_GDB);
1973
            if (err)
1974
                break;
1975
        }
1976
        return err;
1977
#ifndef CONFIG_USER_ONLY
1978
    case GDB_WATCHPOINT_WRITE:
1979
    case GDB_WATCHPOINT_READ:
1980
    case GDB_WATCHPOINT_ACCESS:
1981
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1982
            err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]);
1983
            if (err)
1984
                break;
1985
        }
1986
        return err;
1987
#endif
1988
    default:
1989
        return -ENOSYS;
1990
    }
1991
}
1992

    
1993
static void gdb_breakpoint_remove_all(void)
1994
{
1995
    CPUArchState *env;
1996

    
1997
    if (kvm_enabled()) {
1998
        kvm_remove_all_breakpoints(gdbserver_state->c_cpu);
1999
        return;
2000
    }
2001

    
2002
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
2003
        cpu_breakpoint_remove_all(env, BP_GDB);
2004
#ifndef CONFIG_USER_ONLY
2005
        cpu_watchpoint_remove_all(env, BP_GDB);
2006
#endif
2007
    }
2008
}
2009

    
2010
static void gdb_set_cpu_pc(GDBState *s, target_ulong pc)
2011
{
2012
    cpu_synchronize_state(s->c_cpu);
2013
#if defined(TARGET_I386)
2014
    s->c_cpu->eip = pc;
2015
#elif defined (TARGET_PPC)
2016
    s->c_cpu->nip = pc;
2017
#elif defined (TARGET_SPARC)
2018
    s->c_cpu->pc = pc;
2019
    s->c_cpu->npc = pc + 4;
2020
#elif defined (TARGET_ARM)
2021
    s->c_cpu->regs[15] = pc;
2022
#elif defined (TARGET_SH4)
2023
    s->c_cpu->pc = pc;
2024
#elif defined (TARGET_MIPS)
2025
    s->c_cpu->active_tc.PC = pc & ~(target_ulong)1;
2026
    if (pc & 1) {
2027
        s->c_cpu->hflags |= MIPS_HFLAG_M16;
2028
    } else {
2029
        s->c_cpu->hflags &= ~(MIPS_HFLAG_M16);
2030
    }
2031
#elif defined (TARGET_MICROBLAZE)
2032
    s->c_cpu->sregs[SR_PC] = pc;
2033
#elif defined(TARGET_OPENRISC)
2034
    s->c_cpu->pc = pc;
2035
#elif defined (TARGET_CRIS)
2036
    s->c_cpu->pc = pc;
2037
#elif defined (TARGET_ALPHA)
2038
    s->c_cpu->pc = pc;
2039
#elif defined (TARGET_S390X)
2040
    s->c_cpu->psw.addr = pc;
2041
#elif defined (TARGET_LM32)
2042
    s->c_cpu->pc = pc;
2043
#elif defined(TARGET_XTENSA)
2044
    s->c_cpu->pc = pc;
2045
#endif
2046
}
2047

    
2048
static CPUArchState *find_cpu(uint32_t thread_id)
2049
{
2050
    CPUArchState *env;
2051

    
2052
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
2053
        if (cpu_index(env) == thread_id) {
2054
            return env;
2055
        }
2056
    }
2057

    
2058
    return NULL;
2059
}
2060

    
2061
static int gdb_handle_packet(GDBState *s, const char *line_buf)
2062
{
2063
    CPUArchState *env;
2064
    const char *p;
2065
    uint32_t thread;
2066
    int ch, reg_size, type, res;
2067
    char buf[MAX_PACKET_LENGTH];
2068
    uint8_t mem_buf[MAX_PACKET_LENGTH];
2069
    uint8_t *registers;
2070
    target_ulong addr, len;
2071

    
2072
#ifdef DEBUG_GDB
2073
    printf("command='%s'\n", line_buf);
2074
#endif
2075
    p = line_buf;
2076
    ch = *p++;
2077
    switch(ch) {
2078
    case '?':
2079
        /* TODO: Make this return the correct value for user-mode.  */
2080
        snprintf(buf, sizeof(buf), "T%02xthread:%02x;", GDB_SIGNAL_TRAP,
2081
                 cpu_index(s->c_cpu));
2082
        put_packet(s, buf);
2083
        /* Remove all the breakpoints when this query is issued,
2084
         * because gdb is doing and initial connect and the state
2085
         * should be cleaned up.
2086
         */
2087
        gdb_breakpoint_remove_all();
2088
        break;
2089
    case 'c':
2090
        if (*p != '\0') {
2091
            addr = strtoull(p, (char **)&p, 16);
2092
            gdb_set_cpu_pc(s, addr);
2093
        }
2094
        s->signal = 0;
2095
        gdb_continue(s);
2096
        return RS_IDLE;
2097
    case 'C':
2098
        s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16));
2099
        if (s->signal == -1)
2100
            s->signal = 0;
2101
        gdb_continue(s);
2102
        return RS_IDLE;
2103
    case 'v':
2104
        if (strncmp(p, "Cont", 4) == 0) {
2105
            int res_signal, res_thread;
2106

    
2107
            p += 4;
2108
            if (*p == '?') {
2109
                put_packet(s, "vCont;c;C;s;S");
2110
                break;
2111
            }
2112
            res = 0;
2113
            res_signal = 0;
2114
            res_thread = 0;
2115
            while (*p) {
2116
                int action, signal;
2117

    
2118
                if (*p++ != ';') {
2119
                    res = 0;
2120
                    break;
2121
                }
2122
                action = *p++;
2123
                signal = 0;
2124
                if (action == 'C' || action == 'S') {
2125
                    signal = strtoul(p, (char **)&p, 16);
2126
                } else if (action != 'c' && action != 's') {
2127
                    res = 0;
2128
                    break;
2129
                }
2130
                thread = 0;
2131
                if (*p == ':') {
2132
                    thread = strtoull(p+1, (char **)&p, 16);
2133
                }
2134
                action = tolower(action);
2135
                if (res == 0 || (res == 'c' && action == 's')) {
2136
                    res = action;
2137
                    res_signal = signal;
2138
                    res_thread = thread;
2139
                }
2140
            }
2141
            if (res) {
2142
                if (res_thread != -1 && res_thread != 0) {
2143
                    env = find_cpu(res_thread);
2144
                    if (env == NULL) {
2145
                        put_packet(s, "E22");
2146
                        break;
2147
                    }
2148
                    s->c_cpu = env;
2149
                }
2150
                if (res == 's') {
2151
                    cpu_single_step(s->c_cpu, sstep_flags);
2152
                }
2153
                s->signal = res_signal;
2154
                gdb_continue(s);
2155
                return RS_IDLE;
2156
            }
2157
            break;
2158
        } else {
2159
            goto unknown_command;
2160
        }
2161
    case 'k':
2162
#ifdef CONFIG_USER_ONLY
2163
        /* Kill the target */
2164
        fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
2165
        exit(0);
2166
#endif
2167
    case 'D':
2168
        /* Detach packet */
2169
        gdb_breakpoint_remove_all();
2170
        gdb_syscall_mode = GDB_SYS_DISABLED;
2171
        gdb_continue(s);
2172
        put_packet(s, "OK");
2173
        break;
2174
    case 's':
2175
        if (*p != '\0') {
2176
            addr = strtoull(p, (char **)&p, 16);
2177
            gdb_set_cpu_pc(s, addr);
2178
        }
2179
        cpu_single_step(s->c_cpu, sstep_flags);
2180
        gdb_continue(s);
2181
        return RS_IDLE;
2182
    case 'F':
2183
        {
2184
            target_ulong ret;
2185
            target_ulong err;
2186

    
2187
            ret = strtoull(p, (char **)&p, 16);
2188
            if (*p == ',') {
2189
                p++;
2190
                err = strtoull(p, (char **)&p, 16);
2191
            } else {
2192
                err = 0;
2193
            }
2194
            if (*p == ',')
2195
                p++;
2196
            type = *p;
2197
            if (s->current_syscall_cb) {
2198
                s->current_syscall_cb(s->c_cpu, ret, err);
2199
                s->current_syscall_cb = NULL;
2200
            }
2201
            if (type == 'C') {
2202
                put_packet(s, "T02");
2203
            } else {
2204
                gdb_continue(s);
2205
            }
2206
        }
2207
        break;
2208
    case 'g':
2209
        cpu_synchronize_state(s->g_cpu);
2210
        env = s->g_cpu;
2211
        len = 0;
2212
        for (addr = 0; addr < num_g_regs; addr++) {
2213
            reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr);
2214
            len += reg_size;
2215
        }
2216
        memtohex(buf, mem_buf, len);
2217
        put_packet(s, buf);
2218
        break;
2219
    case 'G':
2220
        cpu_synchronize_state(s->g_cpu);
2221
        env = s->g_cpu;
2222
        registers = mem_buf;
2223
        len = strlen(p) / 2;
2224
        hextomem((uint8_t *)registers, p, len);
2225
        for (addr = 0; addr < num_g_regs && len > 0; addr++) {
2226
            reg_size = gdb_write_register(s->g_cpu, registers, addr);
2227
            len -= reg_size;
2228
            registers += reg_size;
2229
        }
2230
        put_packet(s, "OK");
2231
        break;
2232
    case 'm':
2233
        addr = strtoull(p, (char **)&p, 16);
2234
        if (*p == ',')
2235
            p++;
2236
        len = strtoull(p, NULL, 16);
2237
        if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 0) != 0) {
2238
            put_packet (s, "E14");
2239
        } else {
2240
            memtohex(buf, mem_buf, len);
2241
            put_packet(s, buf);
2242
        }
2243
        break;
2244
    case 'M':
2245
        addr = strtoull(p, (char **)&p, 16);
2246
        if (*p == ',')
2247
            p++;
2248
        len = strtoull(p, (char **)&p, 16);
2249
        if (*p == ':')
2250
            p++;
2251
        hextomem(mem_buf, p, len);
2252
        if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 1) != 0) {
2253
            put_packet(s, "E14");
2254
        } else {
2255
            put_packet(s, "OK");
2256
        }
2257
        break;
2258
    case 'p':
2259
        /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
2260
           This works, but can be very slow.  Anything new enough to
2261
           understand XML also knows how to use this properly.  */
2262
        if (!gdb_has_xml)
2263
            goto unknown_command;
2264
        addr = strtoull(p, (char **)&p, 16);
2265
        reg_size = gdb_read_register(s->g_cpu, mem_buf, addr);
2266
        if (reg_size) {
2267
            memtohex(buf, mem_buf, reg_size);
2268
            put_packet(s, buf);
2269
        } else {
2270
            put_packet(s, "E14");
2271
        }
2272
        break;
2273
    case 'P':
2274
        if (!gdb_has_xml)
2275
            goto unknown_command;
2276
        addr = strtoull(p, (char **)&p, 16);
2277
        if (*p == '=')
2278
            p++;
2279
        reg_size = strlen(p) / 2;
2280
        hextomem(mem_buf, p, reg_size);
2281
        gdb_write_register(s->g_cpu, mem_buf, addr);
2282
        put_packet(s, "OK");
2283
        break;
2284
    case 'Z':
2285
    case 'z':
2286
        type = strtoul(p, (char **)&p, 16);
2287
        if (*p == ',')
2288
            p++;
2289
        addr = strtoull(p, (char **)&p, 16);
2290
        if (*p == ',')
2291
            p++;
2292
        len = strtoull(p, (char **)&p, 16);
2293
        if (ch == 'Z')
2294
            res = gdb_breakpoint_insert(addr, len, type);
2295
        else
2296
            res = gdb_breakpoint_remove(addr, len, type);
2297
        if (res >= 0)
2298
             put_packet(s, "OK");
2299
        else if (res == -ENOSYS)
2300
            put_packet(s, "");
2301
        else
2302
            put_packet(s, "E22");
2303
        break;
2304
    case 'H':
2305
        type = *p++;
2306
        thread = strtoull(p, (char **)&p, 16);
2307
        if (thread == -1 || thread == 0) {
2308
            put_packet(s, "OK");
2309
            break;
2310
        }
2311
        env = find_cpu(thread);
2312
        if (env == NULL) {
2313
            put_packet(s, "E22");
2314
            break;
2315
        }
2316
        switch (type) {
2317
        case 'c':
2318
            s->c_cpu = env;
2319
            put_packet(s, "OK");
2320
            break;
2321
        case 'g':
2322
            s->g_cpu = env;
2323
            put_packet(s, "OK");
2324
            break;
2325
        default:
2326
             put_packet(s, "E22");
2327
             break;
2328
        }
2329
        break;
2330
    case 'T':
2331
        thread = strtoull(p, (char **)&p, 16);
2332
        env = find_cpu(thread);
2333

    
2334
        if (env != NULL) {
2335
            put_packet(s, "OK");
2336
        } else {
2337
            put_packet(s, "E22");
2338
        }
2339
        break;
2340
    case 'q':
2341
    case 'Q':
2342
        /* parse any 'q' packets here */
2343
        if (!strcmp(p,"qemu.sstepbits")) {
2344
            /* Query Breakpoint bit definitions */
2345
            snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
2346
                     SSTEP_ENABLE,
2347
                     SSTEP_NOIRQ,
2348
                     SSTEP_NOTIMER);
2349
            put_packet(s, buf);
2350
            break;
2351
        } else if (strncmp(p,"qemu.sstep",10) == 0) {
2352
            /* Display or change the sstep_flags */
2353
            p += 10;
2354
            if (*p != '=') {
2355
                /* Display current setting */
2356
                snprintf(buf, sizeof(buf), "0x%x", sstep_flags);
2357
                put_packet(s, buf);
2358
                break;
2359
            }
2360
            p++;
2361
            type = strtoul(p, (char **)&p, 16);
2362
            sstep_flags = type;
2363
            put_packet(s, "OK");
2364
            break;
2365
        } else if (strcmp(p,"C") == 0) {
2366
            /* "Current thread" remains vague in the spec, so always return
2367
             *  the first CPU (gdb returns the first thread). */
2368
            put_packet(s, "QC1");
2369
            break;
2370
        } else if (strcmp(p,"fThreadInfo") == 0) {
2371
            s->query_cpu = first_cpu;
2372
            goto report_cpuinfo;
2373
        } else if (strcmp(p,"sThreadInfo") == 0) {
2374
        report_cpuinfo:
2375
            if (s->query_cpu) {
2376
                snprintf(buf, sizeof(buf), "m%x", cpu_index(s->query_cpu));
2377
                put_packet(s, buf);
2378
                s->query_cpu = s->query_cpu->next_cpu;
2379
            } else
2380
                put_packet(s, "l");
2381
            break;
2382
        } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) {
2383
            thread = strtoull(p+16, (char **)&p, 16);
2384
            env = find_cpu(thread);
2385
            if (env != NULL) {
2386
                cpu_synchronize_state(env);
2387
                len = snprintf((char *)mem_buf, sizeof(mem_buf),
2388
                               "CPU#%d [%s]", env->cpu_index,
2389
                               env->halted ? "halted " : "running");
2390
                memtohex(buf, mem_buf, len);
2391
                put_packet(s, buf);
2392
            }
2393
            break;
2394
        }
2395
#ifdef CONFIG_USER_ONLY
2396
        else if (strncmp(p, "Offsets", 7) == 0) {
2397
            TaskState *ts = s->c_cpu->opaque;
2398

    
2399
            snprintf(buf, sizeof(buf),
2400
                     "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
2401
                     ";Bss=" TARGET_ABI_FMT_lx,
2402
                     ts->info->code_offset,
2403
                     ts->info->data_offset,
2404
                     ts->info->data_offset);
2405
            put_packet(s, buf);
2406
            break;
2407
        }
2408
#else /* !CONFIG_USER_ONLY */
2409
        else if (strncmp(p, "Rcmd,", 5) == 0) {
2410
            int len = strlen(p + 5);
2411

    
2412
            if ((len % 2) != 0) {
2413
                put_packet(s, "E01");
2414
                break;
2415
            }
2416
            hextomem(mem_buf, p + 5, len);
2417
            len = len / 2;
2418
            mem_buf[len++] = 0;
2419
            qemu_chr_be_write(s->mon_chr, mem_buf, len);
2420
            put_packet(s, "OK");
2421
            break;
2422
        }
2423
#endif /* !CONFIG_USER_ONLY */
2424
        if (strncmp(p, "Supported", 9) == 0) {
2425
            snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
2426
#ifdef GDB_CORE_XML
2427
            pstrcat(buf, sizeof(buf), ";qXfer:features:read+");
2428
#endif
2429
            put_packet(s, buf);
2430
            break;
2431
        }
2432
#ifdef GDB_CORE_XML
2433
        if (strncmp(p, "Xfer:features:read:", 19) == 0) {
2434
            const char *xml;
2435
            target_ulong total_len;
2436

    
2437
            gdb_has_xml = 1;
2438
            p += 19;
2439
            xml = get_feature_xml(p, &p);
2440
            if (!xml) {
2441
                snprintf(buf, sizeof(buf), "E00");
2442
                put_packet(s, buf);
2443
                break;
2444
            }
2445

    
2446
            if (*p == ':')
2447
                p++;
2448
            addr = strtoul(p, (char **)&p, 16);
2449
            if (*p == ',')
2450
                p++;
2451
            len = strtoul(p, (char **)&p, 16);
2452

    
2453
            total_len = strlen(xml);
2454
            if (addr > total_len) {
2455
                snprintf(buf, sizeof(buf), "E00");
2456
                put_packet(s, buf);
2457
                break;
2458
            }
2459
            if (len > (MAX_PACKET_LENGTH - 5) / 2)
2460
                len = (MAX_PACKET_LENGTH - 5) / 2;
2461
            if (len < total_len - addr) {
2462
                buf[0] = 'm';
2463
                len = memtox(buf + 1, xml + addr, len);
2464
            } else {
2465
                buf[0] = 'l';
2466
                len = memtox(buf + 1, xml + addr, total_len - addr);
2467
            }
2468
            put_packet_binary(s, buf, len + 1);
2469
            break;
2470
        }
2471
#endif
2472
        /* Unrecognised 'q' command.  */
2473
        goto unknown_command;
2474

    
2475
    default:
2476
    unknown_command:
2477
        /* put empty packet */
2478
        buf[0] = '\0';
2479
        put_packet(s, buf);
2480
        break;
2481
    }
2482
    return RS_IDLE;
2483
}
2484

    
2485
void gdb_set_stop_cpu(CPUArchState *env)
2486
{
2487
    gdbserver_state->c_cpu = env;
2488
    gdbserver_state->g_cpu = env;
2489
}
2490

    
2491
#ifndef CONFIG_USER_ONLY
2492
static void gdb_vm_state_change(void *opaque, int running, RunState state)
2493
{
2494
    GDBState *s = gdbserver_state;
2495
    CPUArchState *env = s->c_cpu;
2496
    char buf[256];
2497
    const char *type;
2498
    int ret;
2499

    
2500
    if (running || s->state == RS_INACTIVE) {
2501
        return;
2502
    }
2503
    /* Is there a GDB syscall waiting to be sent?  */
2504
    if (s->current_syscall_cb) {
2505
        put_packet(s, s->syscall_buf);
2506
        return;
2507
    }
2508
    switch (state) {
2509
    case RUN_STATE_DEBUG:
2510
        if (env->watchpoint_hit) {
2511
            switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
2512
            case BP_MEM_READ:
2513
                type = "r";
2514
                break;
2515
            case BP_MEM_ACCESS:
2516
                type = "a";
2517
                break;
2518
            default:
2519
                type = "";
2520
                break;
2521
            }
2522
            snprintf(buf, sizeof(buf),
2523
                     "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
2524
                     GDB_SIGNAL_TRAP, cpu_index(env), type,
2525
                     env->watchpoint_hit->vaddr);
2526
            env->watchpoint_hit = NULL;
2527
            goto send_packet;
2528
        }
2529
        tb_flush(env);
2530
        ret = GDB_SIGNAL_TRAP;
2531
        break;
2532
    case RUN_STATE_PAUSED:
2533
        ret = GDB_SIGNAL_INT;
2534
        break;
2535
    case RUN_STATE_SHUTDOWN:
2536
        ret = GDB_SIGNAL_QUIT;
2537
        break;
2538
    case RUN_STATE_IO_ERROR:
2539
        ret = GDB_SIGNAL_IO;
2540
        break;
2541
    case RUN_STATE_WATCHDOG:
2542
        ret = GDB_SIGNAL_ALRM;
2543
        break;
2544
    case RUN_STATE_INTERNAL_ERROR:
2545
        ret = GDB_SIGNAL_ABRT;
2546
        break;
2547
    case RUN_STATE_SAVE_VM:
2548
    case RUN_STATE_RESTORE_VM:
2549
        return;
2550
    case RUN_STATE_FINISH_MIGRATE:
2551
        ret = GDB_SIGNAL_XCPU;
2552
        break;
2553
    default:
2554
        ret = GDB_SIGNAL_UNKNOWN;
2555
        break;
2556
    }
2557
    snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, cpu_index(env));
2558

    
2559
send_packet:
2560
    put_packet(s, buf);
2561

    
2562
    /* disable single step if it was enabled */
2563
    cpu_single_step(env, 0);
2564
}
2565
#endif
2566

    
2567
/* Send a gdb syscall request.
2568
   This accepts limited printf-style format specifiers, specifically:
2569
    %x  - target_ulong argument printed in hex.
2570
    %lx - 64-bit argument printed in hex.
2571
    %s  - string pointer (target_ulong) and length (int) pair.  */
2572
void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
2573
{
2574
    va_list va;
2575
    char *p;
2576
    char *p_end;
2577
    target_ulong addr;
2578
    uint64_t i64;
2579
    GDBState *s;
2580

    
2581
    s = gdbserver_state;
2582
    if (!s)
2583
        return;
2584
    s->current_syscall_cb = cb;
2585
#ifndef CONFIG_USER_ONLY
2586
    vm_stop(RUN_STATE_DEBUG);
2587
#endif
2588
    va_start(va, fmt);
2589
    p = s->syscall_buf;
2590
    p_end = &s->syscall_buf[sizeof(s->syscall_buf)];
2591
    *(p++) = 'F';
2592
    while (*fmt) {
2593
        if (*fmt == '%') {
2594
            fmt++;
2595
            switch (*fmt++) {
2596
            case 'x':
2597
                addr = va_arg(va, target_ulong);
2598
                p += snprintf(p, p_end - p, TARGET_FMT_lx, addr);
2599
                break;
2600
            case 'l':
2601
                if (*(fmt++) != 'x')
2602
                    goto bad_format;
2603
                i64 = va_arg(va, uint64_t);
2604
                p += snprintf(p, p_end - p, "%" PRIx64, i64);
2605
                break;
2606
            case 's':
2607
                addr = va_arg(va, target_ulong);
2608
                p += snprintf(p, p_end - p, TARGET_FMT_lx "/%x",
2609
                              addr, va_arg(va, int));
2610
                break;
2611
            default:
2612
            bad_format:
2613
                fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
2614
                        fmt - 1);
2615
                break;
2616
            }
2617
        } else {
2618
            *(p++) = *(fmt++);
2619
        }
2620
    }
2621
    *p = 0;
2622
    va_end(va);
2623
#ifdef CONFIG_USER_ONLY
2624
    put_packet(s, s->syscall_buf);
2625
    gdb_handlesig(s->c_cpu, 0);
2626
#else
2627
    /* In this case wait to send the syscall packet until notification that
2628
       the CPU has stopped.  This must be done because if the packet is sent
2629
       now the reply from the syscall request could be received while the CPU
2630
       is still in the running state, which can cause packets to be dropped
2631
       and state transition 'T' packets to be sent while the syscall is still
2632
       being processed.  */
2633
    cpu_exit(s->c_cpu);
2634
#endif
2635
}
2636

    
2637
static void gdb_read_byte(GDBState *s, int ch)
2638
{
2639
    int i, csum;
2640
    uint8_t reply;
2641

    
2642
#ifndef CONFIG_USER_ONLY
2643
    if (s->last_packet_len) {
2644
        /* Waiting for a response to the last packet.  If we see the start
2645
           of a new command then abandon the previous response.  */
2646
        if (ch == '-') {
2647
#ifdef DEBUG_GDB
2648
            printf("Got NACK, retransmitting\n");
2649
#endif
2650
            put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
2651
        }
2652
#ifdef DEBUG_GDB
2653
        else if (ch == '+')
2654
            printf("Got ACK\n");
2655
        else
2656
            printf("Got '%c' when expecting ACK/NACK\n", ch);
2657
#endif
2658
        if (ch == '+' || ch == '$')
2659
            s->last_packet_len = 0;
2660
        if (ch != '$')
2661
            return;
2662
    }
2663
    if (runstate_is_running()) {
2664
        /* when the CPU is running, we cannot do anything except stop
2665
           it when receiving a char */
2666
        vm_stop(RUN_STATE_PAUSED);
2667
    } else
2668
#endif
2669
    {
2670
        switch(s->state) {
2671
        case RS_IDLE:
2672
            if (ch == '$') {
2673
                s->line_buf_index = 0;
2674
                s->state = RS_GETLINE;
2675
            }
2676
            break;
2677
        case RS_GETLINE:
2678
            if (ch == '#') {
2679
            s->state = RS_CHKSUM1;
2680
            } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
2681
                s->state = RS_IDLE;
2682
            } else {
2683
            s->line_buf[s->line_buf_index++] = ch;
2684
            }
2685
            break;
2686
        case RS_CHKSUM1:
2687
            s->line_buf[s->line_buf_index] = '\0';
2688
            s->line_csum = fromhex(ch) << 4;
2689
            s->state = RS_CHKSUM2;
2690
            break;
2691
        case RS_CHKSUM2:
2692
            s->line_csum |= fromhex(ch);
2693
            csum = 0;
2694
            for(i = 0; i < s->line_buf_index; i++) {
2695
                csum += s->line_buf[i];
2696
            }
2697
            if (s->line_csum != (csum & 0xff)) {
2698
                reply = '-';
2699
                put_buffer(s, &reply, 1);
2700
                s->state = RS_IDLE;
2701
            } else {
2702
                reply = '+';
2703
                put_buffer(s, &reply, 1);
2704
                s->state = gdb_handle_packet(s, s->line_buf);
2705
            }
2706
            break;
2707
        default:
2708
            abort();
2709
        }
2710
    }
2711
}
2712

    
2713
/* Tell the remote gdb that the process has exited.  */
2714
void gdb_exit(CPUArchState *env, int code)
2715
{
2716
  GDBState *s;
2717
  char buf[4];
2718

    
2719
  s = gdbserver_state;
2720
  if (!s) {
2721
      return;
2722
  }
2723
#ifdef CONFIG_USER_ONLY
2724
  if (gdbserver_fd < 0 || s->fd < 0) {
2725
      return;
2726
  }
2727
#endif
2728

    
2729
  snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
2730
  put_packet(s, buf);
2731

    
2732
#ifndef CONFIG_USER_ONLY
2733
  if (s->chr) {
2734
      qemu_chr_delete(s->chr);
2735
  }
2736
#endif
2737
}
2738

    
2739
#ifdef CONFIG_USER_ONLY
2740
int
2741
gdb_queuesig (void)
2742
{
2743
    GDBState *s;
2744

    
2745
    s = gdbserver_state;
2746

    
2747
    if (gdbserver_fd < 0 || s->fd < 0)
2748
        return 0;
2749
    else
2750
        return 1;
2751
}
2752

    
2753
int
2754
gdb_handlesig (CPUArchState *env, int sig)
2755
{
2756
  GDBState *s;
2757
  char buf[256];
2758
  int n;
2759

    
2760
  s = gdbserver_state;
2761
  if (gdbserver_fd < 0 || s->fd < 0)
2762
    return sig;
2763

    
2764
  /* disable single step if it was enabled */
2765
  cpu_single_step(env, 0);
2766
  tb_flush(env);
2767

    
2768
  if (sig != 0)
2769
    {
2770
      snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb (sig));
2771
      put_packet(s, buf);
2772
    }
2773
  /* put_packet() might have detected that the peer terminated the 
2774
     connection.  */
2775
  if (s->fd < 0)
2776
      return sig;
2777

    
2778
  sig = 0;
2779
  s->state = RS_IDLE;
2780
  s->running_state = 0;
2781
  while (s->running_state == 0) {
2782
      n = read (s->fd, buf, 256);
2783
      if (n > 0)
2784
        {
2785
          int i;
2786

    
2787
          for (i = 0; i < n; i++)
2788
            gdb_read_byte (s, buf[i]);
2789
        }
2790
      else if (n == 0 || errno != EAGAIN)
2791
        {
2792
          /* XXX: Connection closed.  Should probably wait for another
2793
             connection before continuing.  */
2794
          return sig;
2795
        }
2796
  }
2797
  sig = s->signal;
2798
  s->signal = 0;
2799
  return sig;
2800
}
2801

    
2802
/* Tell the remote gdb that the process has exited due to SIG.  */
2803
void gdb_signalled(CPUArchState *env, int sig)
2804
{
2805
  GDBState *s;
2806
  char buf[4];
2807

    
2808
  s = gdbserver_state;
2809
  if (gdbserver_fd < 0 || s->fd < 0)
2810
    return;
2811

    
2812
  snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb (sig));
2813
  put_packet(s, buf);
2814
}
2815

    
2816
static void gdb_accept(void)
2817
{
2818
    GDBState *s;
2819
    struct sockaddr_in sockaddr;
2820
    socklen_t len;
2821
    int val, fd;
2822

    
2823
    for(;;) {
2824
        len = sizeof(sockaddr);
2825
        fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
2826
        if (fd < 0 && errno != EINTR) {
2827
            perror("accept");
2828
            return;
2829
        } else if (fd >= 0) {
2830
#ifndef _WIN32
2831
            fcntl(fd, F_SETFD, FD_CLOEXEC);
2832
#endif
2833
            break;
2834
        }
2835
    }
2836

    
2837
    /* set short latency */
2838
    val = 1;
2839
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
2840

    
2841
    s = g_malloc0(sizeof(GDBState));
2842
    s->c_cpu = first_cpu;
2843
    s->g_cpu = first_cpu;
2844
    s->fd = fd;
2845
    gdb_has_xml = 0;
2846

    
2847
    gdbserver_state = s;
2848

    
2849
    fcntl(fd, F_SETFL, O_NONBLOCK);
2850
}
2851

    
2852
static int gdbserver_open(int port)
2853
{
2854
    struct sockaddr_in sockaddr;
2855
    int fd, val, ret;
2856

    
2857
    fd = socket(PF_INET, SOCK_STREAM, 0);
2858
    if (fd < 0) {
2859
        perror("socket");
2860
        return -1;
2861
    }
2862
#ifndef _WIN32
2863
    fcntl(fd, F_SETFD, FD_CLOEXEC);
2864
#endif
2865

    
2866
    /* allow fast reuse */
2867
    val = 1;
2868
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&val, sizeof(val));
2869

    
2870
    sockaddr.sin_family = AF_INET;
2871
    sockaddr.sin_port = htons(port);
2872
    sockaddr.sin_addr.s_addr = 0;
2873
    ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
2874
    if (ret < 0) {
2875
        perror("bind");
2876
        close(fd);
2877
        return -1;
2878
    }
2879
    ret = listen(fd, 0);
2880
    if (ret < 0) {
2881
        perror("listen");
2882
        close(fd);
2883
        return -1;
2884
    }
2885
    return fd;
2886
}
2887

    
2888
int gdbserver_start(int port)
2889
{
2890
    gdbserver_fd = gdbserver_open(port);
2891
    if (gdbserver_fd < 0)
2892
        return -1;
2893
    /* accept connections */
2894
    gdb_accept();
2895
    return 0;
2896
}
2897

    
2898
/* Disable gdb stub for child processes.  */
2899
void gdbserver_fork(CPUArchState *env)
2900
{
2901
    GDBState *s = gdbserver_state;
2902
    if (gdbserver_fd < 0 || s->fd < 0)
2903
      return;
2904
    close(s->fd);
2905
    s->fd = -1;
2906
    cpu_breakpoint_remove_all(env, BP_GDB);
2907
    cpu_watchpoint_remove_all(env, BP_GDB);
2908
}
2909
#else
2910
static int gdb_chr_can_receive(void *opaque)
2911
{
2912
  /* We can handle an arbitrarily large amount of data.
2913
   Pick the maximum packet size, which is as good as anything.  */
2914
  return MAX_PACKET_LENGTH;
2915
}
2916

    
2917
static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
2918
{
2919
    int i;
2920

    
2921
    for (i = 0; i < size; i++) {
2922
        gdb_read_byte(gdbserver_state, buf[i]);
2923
    }
2924
}
2925

    
2926
static void gdb_chr_event(void *opaque, int event)
2927
{
2928
    switch (event) {
2929
    case CHR_EVENT_OPENED:
2930
        vm_stop(RUN_STATE_PAUSED);
2931
        gdb_has_xml = 0;
2932
        break;
2933
    default:
2934
        break;
2935
    }
2936
}
2937

    
2938
static void gdb_monitor_output(GDBState *s, const char *msg, int len)
2939
{
2940
    char buf[MAX_PACKET_LENGTH];
2941

    
2942
    buf[0] = 'O';
2943
    if (len > (MAX_PACKET_LENGTH/2) - 1)
2944
        len = (MAX_PACKET_LENGTH/2) - 1;
2945
    memtohex(buf + 1, (uint8_t *)msg, len);
2946
    put_packet(s, buf);
2947
}
2948

    
2949
static int gdb_monitor_write(CharDriverState *chr, const uint8_t *buf, int len)
2950
{
2951
    const char *p = (const char *)buf;
2952
    int max_sz;
2953

    
2954
    max_sz = (sizeof(gdbserver_state->last_packet) - 2) / 2;
2955
    for (;;) {
2956
        if (len <= max_sz) {
2957
            gdb_monitor_output(gdbserver_state, p, len);
2958
            break;
2959
        }
2960
        gdb_monitor_output(gdbserver_state, p, max_sz);
2961
        p += max_sz;
2962
        len -= max_sz;
2963
    }
2964
    return len;
2965
}
2966

    
2967
#ifndef _WIN32
2968
static void gdb_sigterm_handler(int signal)
2969
{
2970
    if (runstate_is_running()) {
2971
        vm_stop(RUN_STATE_PAUSED);
2972
    }
2973
}
2974
#endif
2975

    
2976
int gdbserver_start(const char *device)
2977
{
2978
    GDBState *s;
2979
    char gdbstub_device_name[128];
2980
    CharDriverState *chr = NULL;
2981
    CharDriverState *mon_chr;
2982

    
2983
    if (!device)
2984
        return -1;
2985
    if (strcmp(device, "none") != 0) {
2986
        if (strstart(device, "tcp:", NULL)) {
2987
            /* enforce required TCP attributes */
2988
            snprintf(gdbstub_device_name, sizeof(gdbstub_device_name),
2989
                     "%s,nowait,nodelay,server", device);
2990
            device = gdbstub_device_name;
2991
        }
2992
#ifndef _WIN32
2993
        else if (strcmp(device, "stdio") == 0) {
2994
            struct sigaction act;
2995

    
2996
            memset(&act, 0, sizeof(act));
2997
            act.sa_handler = gdb_sigterm_handler;
2998
            sigaction(SIGINT, &act, NULL);
2999
        }
3000
#endif
3001
        chr = qemu_chr_new("gdb", device, NULL);
3002
        if (!chr)
3003
            return -1;
3004

    
3005
        qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
3006
                              gdb_chr_event, NULL);
3007
    }
3008

    
3009
    s = gdbserver_state;
3010
    if (!s) {
3011
        s = g_malloc0(sizeof(GDBState));
3012
        gdbserver_state = s;
3013

    
3014
        qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
3015

    
3016
        /* Initialize a monitor terminal for gdb */
3017
        mon_chr = g_malloc0(sizeof(*mon_chr));
3018
        mon_chr->chr_write = gdb_monitor_write;
3019
        monitor_init(mon_chr, 0);
3020
    } else {
3021
        if (s->chr)
3022
            qemu_chr_delete(s->chr);
3023
        mon_chr = s->mon_chr;
3024
        memset(s, 0, sizeof(GDBState));
3025
    }
3026
    s->c_cpu = first_cpu;
3027
    s->g_cpu = first_cpu;
3028
    s->chr = chr;
3029
    s->state = chr ? RS_IDLE : RS_INACTIVE;
3030
    s->mon_chr = mon_chr;
3031
    s->current_syscall_cb = NULL;
3032

    
3033
    return 0;
3034
}
3035
#endif