Statistics
| Branch: | Revision:

root / gdbstub.c @ ef5b2344

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

    
38
#define MAX_PACKET_LENGTH 4096
39

    
40
#include "cpu.h"
41
#include "qemu_socket.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
    if (n < 8) {
1230
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1231
            GET_REGL(env->gregs[n + 16]);
1232
        } else {
1233
            GET_REGL(env->gregs[n]);
1234
        }
1235
    } else if (n < 16) {
1236
        GET_REGL(env->gregs[n]);
1237
    } else if (n >= 25 && n < 41) {
1238
        GET_REGL(env->fregs[(n - 25) + ((env->fpscr & FPSCR_FR) ? 16 : 0)]);
1239
    } else if (n >= 43 && n < 51) {
1240
        GET_REGL(env->gregs[n - 43]);
1241
    } else if (n >= 51 && n < 59) {
1242
        GET_REGL(env->gregs[n - (51 - 16)]);
1243
    }
1244
    switch (n) {
1245
    case 16: GET_REGL(env->pc);
1246
    case 17: GET_REGL(env->pr);
1247
    case 18: GET_REGL(env->gbr);
1248
    case 19: GET_REGL(env->vbr);
1249
    case 20: GET_REGL(env->mach);
1250
    case 21: GET_REGL(env->macl);
1251
    case 22: GET_REGL(env->sr);
1252
    case 23: GET_REGL(env->fpul);
1253
    case 24: GET_REGL(env->fpscr);
1254
    case 41: GET_REGL(env->ssr);
1255
    case 42: GET_REGL(env->spc);
1256
    }
1257

    
1258
    return 0;
1259
}
1260

    
1261
static int cpu_gdb_write_register(CPUSH4State *env, uint8_t *mem_buf, int n)
1262
{
1263
    uint32_t tmp;
1264

    
1265
    tmp = ldl_p(mem_buf);
1266

    
1267
    if (n < 8) {
1268
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
1269
            env->gregs[n + 16] = tmp;
1270
        } else {
1271
            env->gregs[n] = tmp;
1272
        }
1273
        return 4;
1274
    } else if (n < 16) {
1275
        env->gregs[n] = tmp;
1276
        return 4;
1277
    } else if (n >= 25 && n < 41) {
1278
        env->fregs[(n - 25) + ((env->fpscr & FPSCR_FR) ? 16 : 0)] = tmp;
1279
        return 4;
1280
    } else if (n >= 43 && n < 51) {
1281
        env->gregs[n - 43] = tmp;
1282
        return 4;
1283
    } else if (n >= 51 && n < 59) {
1284
        env->gregs[n - (51 - 16)] = tmp;
1285
        return 4;
1286
    }
1287
    switch (n) {
1288
    case 16: env->pc = tmp; break;
1289
    case 17: env->pr = tmp; break;
1290
    case 18: env->gbr = tmp; break;
1291
    case 19: env->vbr = tmp; break;
1292
    case 20: env->mach = tmp; break;
1293
    case 21: env->macl = tmp; break;
1294
    case 22: env->sr = tmp; break;
1295
    case 23: env->fpul = tmp; break;
1296
    case 24: env->fpscr = tmp; break;
1297
    case 41: env->ssr = tmp; break;
1298
    case 42: env->spc = tmp; break;
1299
    default: return 0;
1300
    }
1301

    
1302
    return 4;
1303
}
1304
#elif defined (TARGET_MICROBLAZE)
1305

    
1306
#define NUM_CORE_REGS (32 + 5)
1307

    
1308
static int cpu_gdb_read_register(CPUMBState *env, uint8_t *mem_buf, int n)
1309
{
1310
    if (n < 32) {
1311
        GET_REG32(env->regs[n]);
1312
    } else {
1313
        GET_REG32(env->sregs[n - 32]);
1314
    }
1315
    return 0;
1316
}
1317

    
1318
static int cpu_gdb_write_register(CPUMBState *env, uint8_t *mem_buf, int n)
1319
{
1320
    uint32_t tmp;
1321

    
1322
    if (n > NUM_CORE_REGS)
1323
        return 0;
1324

    
1325
    tmp = ldl_p(mem_buf);
1326

    
1327
    if (n < 32) {
1328
        env->regs[n] = tmp;
1329
    } else {
1330
        env->sregs[n - 32] = tmp;
1331
    }
1332
    return 4;
1333
}
1334
#elif defined (TARGET_CRIS)
1335

    
1336
#define NUM_CORE_REGS 49
1337

    
1338
static int
1339
read_register_crisv10(CPUCRISState *env, uint8_t *mem_buf, int n)
1340
{
1341
    if (n < 15) {
1342
        GET_REG32(env->regs[n]);
1343
    }
1344

    
1345
    if (n == 15) {
1346
        GET_REG32(env->pc);
1347
    }
1348

    
1349
    if (n < 32) {
1350
        switch (n) {
1351
        case 16:
1352
            GET_REG8(env->pregs[n - 16]);
1353
            break;
1354
        case 17:
1355
            GET_REG8(env->pregs[n - 16]);
1356
            break;
1357
        case 20:
1358
        case 21:
1359
            GET_REG16(env->pregs[n - 16]);
1360
            break;
1361
        default:
1362
            if (n >= 23) {
1363
                GET_REG32(env->pregs[n - 16]);
1364
            }
1365
            break;
1366
        }
1367
    }
1368
    return 0;
1369
}
1370

    
1371
static int cpu_gdb_read_register(CPUCRISState *env, uint8_t *mem_buf, int n)
1372
{
1373
    uint8_t srs;
1374

    
1375
    if (env->pregs[PR_VR] < 32)
1376
        return read_register_crisv10(env, mem_buf, n);
1377

    
1378
    srs = env->pregs[PR_SRS];
1379
    if (n < 16) {
1380
        GET_REG32(env->regs[n]);
1381
    }
1382

    
1383
    if (n >= 21 && n < 32) {
1384
        GET_REG32(env->pregs[n - 16]);
1385
    }
1386
    if (n >= 33 && n < 49) {
1387
        GET_REG32(env->sregs[srs][n - 33]);
1388
    }
1389
    switch (n) {
1390
    case 16: GET_REG8(env->pregs[0]);
1391
    case 17: GET_REG8(env->pregs[1]);
1392
    case 18: GET_REG32(env->pregs[2]);
1393
    case 19: GET_REG8(srs);
1394
    case 20: GET_REG16(env->pregs[4]);
1395
    case 32: GET_REG32(env->pc);
1396
    }
1397

    
1398
    return 0;
1399
}
1400

    
1401
static int cpu_gdb_write_register(CPUCRISState *env, uint8_t *mem_buf, int n)
1402
{
1403
    uint32_t tmp;
1404

    
1405
    if (n > 49)
1406
        return 0;
1407

    
1408
    tmp = ldl_p(mem_buf);
1409

    
1410
    if (n < 16) {
1411
        env->regs[n] = tmp;
1412
    }
1413

    
1414
    if (n >= 21 && n < 32) {
1415
        env->pregs[n - 16] = tmp;
1416
    }
1417

    
1418
    /* FIXME: Should support function regs be writable?  */
1419
    switch (n) {
1420
    case 16: return 1;
1421
    case 17: return 1;
1422
    case 18: env->pregs[PR_PID] = tmp; break;
1423
    case 19: return 1;
1424
    case 20: return 2;
1425
    case 32: env->pc = tmp; break;
1426
    }
1427

    
1428
    return 4;
1429
}
1430
#elif defined (TARGET_ALPHA)
1431

    
1432
#define NUM_CORE_REGS 67
1433

    
1434
static int cpu_gdb_read_register(CPUAlphaState *env, uint8_t *mem_buf, int n)
1435
{
1436
    uint64_t val;
1437
    CPU_DoubleU d;
1438

    
1439
    switch (n) {
1440
    case 0 ... 30:
1441
        val = env->ir[n];
1442
        break;
1443
    case 32 ... 62:
1444
        d.d = env->fir[n - 32];
1445
        val = d.ll;
1446
        break;
1447
    case 63:
1448
        val = cpu_alpha_load_fpcr(env);
1449
        break;
1450
    case 64:
1451
        val = env->pc;
1452
        break;
1453
    case 66:
1454
        val = env->unique;
1455
        break;
1456
    case 31:
1457
    case 65:
1458
        /* 31 really is the zero register; 65 is unassigned in the
1459
           gdb protocol, but is still required to occupy 8 bytes. */
1460
        val = 0;
1461
        break;
1462
    default:
1463
        return 0;
1464
    }
1465
    GET_REGL(val);
1466
}
1467

    
1468
static int cpu_gdb_write_register(CPUAlphaState *env, uint8_t *mem_buf, int n)
1469
{
1470
    target_ulong tmp = ldtul_p(mem_buf);
1471
    CPU_DoubleU d;
1472

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

    
1502
#define NUM_CORE_REGS S390_NUM_TOTAL_REGS
1503

    
1504
static int cpu_gdb_read_register(CPUS390XState *env, uint8_t *mem_buf, int n)
1505
{
1506
    switch (n) {
1507
        case S390_PSWM_REGNUM: GET_REGL(env->psw.mask); break;
1508
        case S390_PSWA_REGNUM: GET_REGL(env->psw.addr); break;
1509
        case S390_R0_REGNUM ... S390_R15_REGNUM:
1510
            GET_REGL(env->regs[n-S390_R0_REGNUM]); break;
1511
        case S390_A0_REGNUM ... S390_A15_REGNUM:
1512
            GET_REG32(env->aregs[n-S390_A0_REGNUM]); break;
1513
        case S390_FPC_REGNUM: GET_REG32(env->fpc); break;
1514
        case S390_F0_REGNUM ... S390_F15_REGNUM:
1515
            /* XXX */
1516
            break;
1517
        case S390_PC_REGNUM: GET_REGL(env->psw.addr); break;
1518
        case S390_CC_REGNUM:
1519
            env->cc_op = calc_cc(env, env->cc_op, env->cc_src, env->cc_dst,
1520
                                 env->cc_vr);
1521
            GET_REG32(env->cc_op);
1522
            break;
1523
    }
1524

    
1525
    return 0;
1526
}
1527

    
1528
static int cpu_gdb_write_register(CPUS390XState *env, uint8_t *mem_buf, int n)
1529
{
1530
    target_ulong tmpl;
1531
    uint32_t tmp32;
1532
    int r = 8;
1533
    tmpl = ldtul_p(mem_buf);
1534
    tmp32 = ldl_p(mem_buf);
1535

    
1536
    switch (n) {
1537
        case S390_PSWM_REGNUM: env->psw.mask = tmpl; break;
1538
        case S390_PSWA_REGNUM: env->psw.addr = tmpl; break;
1539
        case S390_R0_REGNUM ... S390_R15_REGNUM:
1540
            env->regs[n-S390_R0_REGNUM] = tmpl; break;
1541
        case S390_A0_REGNUM ... S390_A15_REGNUM:
1542
            env->aregs[n-S390_A0_REGNUM] = tmp32; r=4; break;
1543
        case S390_FPC_REGNUM: env->fpc = tmp32; r=4; break;
1544
        case S390_F0_REGNUM ... S390_F15_REGNUM:
1545
            /* XXX */
1546
            break;
1547
        case S390_PC_REGNUM: env->psw.addr = tmpl; break;
1548
        case S390_CC_REGNUM: env->cc_op = tmp32; r=4; break;
1549
    }
1550

    
1551
    return r;
1552
}
1553
#elif defined (TARGET_LM32)
1554

    
1555
#include "hw/lm32_pic.h"
1556
#define NUM_CORE_REGS (32 + 7)
1557

    
1558
static int cpu_gdb_read_register(CPULM32State *env, uint8_t *mem_buf, int n)
1559
{
1560
    if (n < 32) {
1561
        GET_REG32(env->regs[n]);
1562
    } else {
1563
        switch (n) {
1564
        case 32:
1565
            GET_REG32(env->pc);
1566
            break;
1567
        /* FIXME: put in right exception ID */
1568
        case 33:
1569
            GET_REG32(0);
1570
            break;
1571
        case 34:
1572
            GET_REG32(env->eba);
1573
            break;
1574
        case 35:
1575
            GET_REG32(env->deba);
1576
            break;
1577
        case 36:
1578
            GET_REG32(env->ie);
1579
            break;
1580
        case 37:
1581
            GET_REG32(lm32_pic_get_im(env->pic_state));
1582
            break;
1583
        case 38:
1584
            GET_REG32(lm32_pic_get_ip(env->pic_state));
1585
            break;
1586
        }
1587
    }
1588
    return 0;
1589
}
1590

    
1591
static int cpu_gdb_write_register(CPULM32State *env, uint8_t *mem_buf, int n)
1592
{
1593
    uint32_t tmp;
1594

    
1595
    if (n > NUM_CORE_REGS) {
1596
        return 0;
1597
    }
1598

    
1599
    tmp = ldl_p(mem_buf);
1600

    
1601
    if (n < 32) {
1602
        env->regs[n] = tmp;
1603
    } else {
1604
        switch (n) {
1605
        case 32:
1606
            env->pc = tmp;
1607
            break;
1608
        case 34:
1609
            env->eba = tmp;
1610
            break;
1611
        case 35:
1612
            env->deba = tmp;
1613
            break;
1614
        case 36:
1615
            env->ie = tmp;
1616
            break;
1617
        case 37:
1618
            lm32_pic_set_im(env->pic_state, tmp);
1619
            break;
1620
        case 38:
1621
            lm32_pic_set_ip(env->pic_state, tmp);
1622
            break;
1623
        }
1624
    }
1625
    return 4;
1626
}
1627
#elif defined(TARGET_XTENSA)
1628

    
1629
/* Use num_core_regs to see only non-privileged registers in an unmodified gdb.
1630
 * Use num_regs to see all registers. gdb modification is required for that:
1631
 * reset bit 0 in the 'flags' field of the registers definitions in the
1632
 * gdb/xtensa-config.c inside gdb source tree or inside gdb overlay.
1633
 */
1634
#define NUM_CORE_REGS (env->config->gdb_regmap.num_regs)
1635
#define num_g_regs NUM_CORE_REGS
1636

    
1637
static int cpu_gdb_read_register(CPUXtensaState *env, uint8_t *mem_buf, int n)
1638
{
1639
    const XtensaGdbReg *reg = env->config->gdb_regmap.reg + n;
1640

    
1641
    if (n < 0 || n >= env->config->gdb_regmap.num_regs) {
1642
        return 0;
1643
    }
1644

    
1645
    switch (reg->type) {
1646
    case 9: /*pc*/
1647
        GET_REG32(env->pc);
1648
        break;
1649

    
1650
    case 1: /*ar*/
1651
        xtensa_sync_phys_from_window(env);
1652
        GET_REG32(env->phys_regs[(reg->targno & 0xff) % env->config->nareg]);
1653
        break;
1654

    
1655
    case 2: /*SR*/
1656
        GET_REG32(env->sregs[reg->targno & 0xff]);
1657
        break;
1658

    
1659
    case 3: /*UR*/
1660
        GET_REG32(env->uregs[reg->targno & 0xff]);
1661
        break;
1662

    
1663
    case 8: /*a*/
1664
        GET_REG32(env->regs[reg->targno & 0x0f]);
1665
        break;
1666

    
1667
    default:
1668
        qemu_log("%s from reg %d of unsupported type %d\n",
1669
                __func__, n, reg->type);
1670
        return 0;
1671
    }
1672
}
1673

    
1674
static int cpu_gdb_write_register(CPUXtensaState *env, uint8_t *mem_buf, int n)
1675
{
1676
    uint32_t tmp;
1677
    const XtensaGdbReg *reg = env->config->gdb_regmap.reg + n;
1678

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

    
1683
    tmp = ldl_p(mem_buf);
1684

    
1685
    switch (reg->type) {
1686
    case 9: /*pc*/
1687
        env->pc = tmp;
1688
        break;
1689

    
1690
    case 1: /*ar*/
1691
        env->phys_regs[(reg->targno & 0xff) % env->config->nareg] = tmp;
1692
        xtensa_sync_window_from_phys(env);
1693
        break;
1694

    
1695
    case 2: /*SR*/
1696
        env->sregs[reg->targno & 0xff] = tmp;
1697
        break;
1698

    
1699
    case 3: /*UR*/
1700
        env->uregs[reg->targno & 0xff] = tmp;
1701
        break;
1702

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

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

    
1713
    return 4;
1714
}
1715
#else
1716

    
1717
#define NUM_CORE_REGS 0
1718

    
1719
static int cpu_gdb_read_register(CPUArchState *env, uint8_t *mem_buf, int n)
1720
{
1721
    return 0;
1722
}
1723

    
1724
static int cpu_gdb_write_register(CPUArchState *env, uint8_t *mem_buf, int n)
1725
{
1726
    return 0;
1727
}
1728

    
1729
#endif
1730

    
1731
#if !defined(TARGET_XTENSA)
1732
static int num_g_regs = NUM_CORE_REGS;
1733
#endif
1734

    
1735
#ifdef GDB_CORE_XML
1736
/* Encode data using the encoding for 'x' packets.  */
1737
static int memtox(char *buf, const char *mem, int len)
1738
{
1739
    char *p = buf;
1740
    char c;
1741

    
1742
    while (len--) {
1743
        c = *(mem++);
1744
        switch (c) {
1745
        case '#': case '$': case '*': case '}':
1746
            *(p++) = '}';
1747
            *(p++) = c ^ 0x20;
1748
            break;
1749
        default:
1750
            *(p++) = c;
1751
            break;
1752
        }
1753
    }
1754
    return p - buf;
1755
}
1756

    
1757
static const char *get_feature_xml(const char *p, const char **newp)
1758
{
1759
    size_t len;
1760
    int i;
1761
    const char *name;
1762
    static char target_xml[1024];
1763

    
1764
    len = 0;
1765
    while (p[len] && p[len] != ':')
1766
        len++;
1767
    *newp = p + len;
1768

    
1769
    name = NULL;
1770
    if (strncmp(p, "target.xml", len) == 0) {
1771
        /* Generate the XML description for this CPU.  */
1772
        if (!target_xml[0]) {
1773
            GDBRegisterState *r;
1774

    
1775
            snprintf(target_xml, sizeof(target_xml),
1776
                     "<?xml version=\"1.0\"?>"
1777
                     "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
1778
                     "<target>"
1779
                     "<xi:include href=\"%s\"/>",
1780
                     GDB_CORE_XML);
1781

    
1782
            for (r = first_cpu->gdb_regs; r; r = r->next) {
1783
                pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\"");
1784
                pstrcat(target_xml, sizeof(target_xml), r->xml);
1785
                pstrcat(target_xml, sizeof(target_xml), "\"/>");
1786
            }
1787
            pstrcat(target_xml, sizeof(target_xml), "</target>");
1788
        }
1789
        return target_xml;
1790
    }
1791
    for (i = 0; ; i++) {
1792
        name = xml_builtin[i][0];
1793
        if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
1794
            break;
1795
    }
1796
    return name ? xml_builtin[i][1] : NULL;
1797
}
1798
#endif
1799

    
1800
static int gdb_read_register(CPUArchState *env, uint8_t *mem_buf, int reg)
1801
{
1802
    GDBRegisterState *r;
1803

    
1804
    if (reg < NUM_CORE_REGS)
1805
        return cpu_gdb_read_register(env, mem_buf, reg);
1806

    
1807
    for (r = env->gdb_regs; r; r = r->next) {
1808
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1809
            return r->get_reg(env, mem_buf, reg - r->base_reg);
1810
        }
1811
    }
1812
    return 0;
1813
}
1814

    
1815
static int gdb_write_register(CPUArchState *env, uint8_t *mem_buf, int reg)
1816
{
1817
    GDBRegisterState *r;
1818

    
1819
    if (reg < NUM_CORE_REGS)
1820
        return cpu_gdb_write_register(env, mem_buf, reg);
1821

    
1822
    for (r = env->gdb_regs; r; r = r->next) {
1823
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
1824
            return r->set_reg(env, mem_buf, reg - r->base_reg);
1825
        }
1826
    }
1827
    return 0;
1828
}
1829

    
1830
#if !defined(TARGET_XTENSA)
1831
/* Register a supplemental set of CPU registers.  If g_pos is nonzero it
1832
   specifies the first register number and these registers are included in
1833
   a standard "g" packet.  Direction is relative to gdb, i.e. get_reg is
1834
   gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
1835
 */
1836

    
1837
void gdb_register_coprocessor(CPUArchState * env,
1838
                             gdb_reg_cb get_reg, gdb_reg_cb set_reg,
1839
                             int num_regs, const char *xml, int g_pos)
1840
{
1841
    GDBRegisterState *s;
1842
    GDBRegisterState **p;
1843
    static int last_reg = NUM_CORE_REGS;
1844

    
1845
    p = &env->gdb_regs;
1846
    while (*p) {
1847
        /* Check for duplicates.  */
1848
        if (strcmp((*p)->xml, xml) == 0)
1849
            return;
1850
        p = &(*p)->next;
1851
    }
1852

    
1853
    s = g_new0(GDBRegisterState, 1);
1854
    s->base_reg = last_reg;
1855
    s->num_regs = num_regs;
1856
    s->get_reg = get_reg;
1857
    s->set_reg = set_reg;
1858
    s->xml = xml;
1859

    
1860
    /* Add to end of list.  */
1861
    last_reg += num_regs;
1862
    *p = s;
1863
    if (g_pos) {
1864
        if (g_pos != s->base_reg) {
1865
            fprintf(stderr, "Error: Bad gdb register numbering for '%s'\n"
1866
                    "Expected %d got %d\n", xml, g_pos, s->base_reg);
1867
        } else {
1868
            num_g_regs = last_reg;
1869
        }
1870
    }
1871
}
1872
#endif
1873

    
1874
#ifndef CONFIG_USER_ONLY
1875
static const int xlat_gdb_type[] = {
1876
    [GDB_WATCHPOINT_WRITE]  = BP_GDB | BP_MEM_WRITE,
1877
    [GDB_WATCHPOINT_READ]   = BP_GDB | BP_MEM_READ,
1878
    [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
1879
};
1880
#endif
1881

    
1882
static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
1883
{
1884
    CPUArchState *env;
1885
    int err = 0;
1886

    
1887
    if (kvm_enabled())
1888
        return kvm_insert_breakpoint(gdbserver_state->c_cpu, addr, len, type);
1889

    
1890
    switch (type) {
1891
    case GDB_BREAKPOINT_SW:
1892
    case GDB_BREAKPOINT_HW:
1893
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1894
            err = cpu_breakpoint_insert(env, addr, BP_GDB, NULL);
1895
            if (err)
1896
                break;
1897
        }
1898
        return err;
1899
#ifndef CONFIG_USER_ONLY
1900
    case GDB_WATCHPOINT_WRITE:
1901
    case GDB_WATCHPOINT_READ:
1902
    case GDB_WATCHPOINT_ACCESS:
1903
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1904
            err = cpu_watchpoint_insert(env, addr, len, xlat_gdb_type[type],
1905
                                        NULL);
1906
            if (err)
1907
                break;
1908
        }
1909
        return err;
1910
#endif
1911
    default:
1912
        return -ENOSYS;
1913
    }
1914
}
1915

    
1916
static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
1917
{
1918
    CPUArchState *env;
1919
    int err = 0;
1920

    
1921
    if (kvm_enabled())
1922
        return kvm_remove_breakpoint(gdbserver_state->c_cpu, addr, len, type);
1923

    
1924
    switch (type) {
1925
    case GDB_BREAKPOINT_SW:
1926
    case GDB_BREAKPOINT_HW:
1927
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1928
            err = cpu_breakpoint_remove(env, addr, BP_GDB);
1929
            if (err)
1930
                break;
1931
        }
1932
        return err;
1933
#ifndef CONFIG_USER_ONLY
1934
    case GDB_WATCHPOINT_WRITE:
1935
    case GDB_WATCHPOINT_READ:
1936
    case GDB_WATCHPOINT_ACCESS:
1937
        for (env = first_cpu; env != NULL; env = env->next_cpu) {
1938
            err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]);
1939
            if (err)
1940
                break;
1941
        }
1942
        return err;
1943
#endif
1944
    default:
1945
        return -ENOSYS;
1946
    }
1947
}
1948

    
1949
static void gdb_breakpoint_remove_all(void)
1950
{
1951
    CPUArchState *env;
1952

    
1953
    if (kvm_enabled()) {
1954
        kvm_remove_all_breakpoints(gdbserver_state->c_cpu);
1955
        return;
1956
    }
1957

    
1958
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
1959
        cpu_breakpoint_remove_all(env, BP_GDB);
1960
#ifndef CONFIG_USER_ONLY
1961
        cpu_watchpoint_remove_all(env, BP_GDB);
1962
#endif
1963
    }
1964
}
1965

    
1966
static void gdb_set_cpu_pc(GDBState *s, target_ulong pc)
1967
{
1968
    cpu_synchronize_state(s->c_cpu);
1969
#if defined(TARGET_I386)
1970
    s->c_cpu->eip = pc;
1971
#elif defined (TARGET_PPC)
1972
    s->c_cpu->nip = pc;
1973
#elif defined (TARGET_SPARC)
1974
    s->c_cpu->pc = pc;
1975
    s->c_cpu->npc = pc + 4;
1976
#elif defined (TARGET_ARM)
1977
    s->c_cpu->regs[15] = pc;
1978
#elif defined (TARGET_SH4)
1979
    s->c_cpu->pc = pc;
1980
#elif defined (TARGET_MIPS)
1981
    s->c_cpu->active_tc.PC = pc & ~(target_ulong)1;
1982
    if (pc & 1) {
1983
        s->c_cpu->hflags |= MIPS_HFLAG_M16;
1984
    } else {
1985
        s->c_cpu->hflags &= ~(MIPS_HFLAG_M16);
1986
    }
1987
#elif defined (TARGET_MICROBLAZE)
1988
    s->c_cpu->sregs[SR_PC] = pc;
1989
#elif defined(TARGET_OPENRISC)
1990
    s->c_cpu->pc = pc;
1991
#elif defined (TARGET_CRIS)
1992
    s->c_cpu->pc = pc;
1993
#elif defined (TARGET_ALPHA)
1994
    s->c_cpu->pc = pc;
1995
#elif defined (TARGET_S390X)
1996
    s->c_cpu->psw.addr = pc;
1997
#elif defined (TARGET_LM32)
1998
    s->c_cpu->pc = pc;
1999
#elif defined(TARGET_XTENSA)
2000
    s->c_cpu->pc = pc;
2001
#endif
2002
}
2003

    
2004
static CPUArchState *find_cpu(uint32_t thread_id)
2005
{
2006
    CPUArchState *env;
2007

    
2008
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
2009
        if (cpu_index(env) == thread_id) {
2010
            return env;
2011
        }
2012
    }
2013

    
2014
    return NULL;
2015
}
2016

    
2017
static int gdb_handle_packet(GDBState *s, const char *line_buf)
2018
{
2019
    CPUArchState *env;
2020
    const char *p;
2021
    uint32_t thread;
2022
    int ch, reg_size, type, res;
2023
    char buf[MAX_PACKET_LENGTH];
2024
    uint8_t mem_buf[MAX_PACKET_LENGTH];
2025
    uint8_t *registers;
2026
    target_ulong addr, len;
2027

    
2028
#ifdef DEBUG_GDB
2029
    printf("command='%s'\n", line_buf);
2030
#endif
2031
    p = line_buf;
2032
    ch = *p++;
2033
    switch(ch) {
2034
    case '?':
2035
        /* TODO: Make this return the correct value for user-mode.  */
2036
        snprintf(buf, sizeof(buf), "T%02xthread:%02x;", GDB_SIGNAL_TRAP,
2037
                 cpu_index(s->c_cpu));
2038
        put_packet(s, buf);
2039
        /* Remove all the breakpoints when this query is issued,
2040
         * because gdb is doing and initial connect and the state
2041
         * should be cleaned up.
2042
         */
2043
        gdb_breakpoint_remove_all();
2044
        break;
2045
    case 'c':
2046
        if (*p != '\0') {
2047
            addr = strtoull(p, (char **)&p, 16);
2048
            gdb_set_cpu_pc(s, addr);
2049
        }
2050
        s->signal = 0;
2051
        gdb_continue(s);
2052
        return RS_IDLE;
2053
    case 'C':
2054
        s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16));
2055
        if (s->signal == -1)
2056
            s->signal = 0;
2057
        gdb_continue(s);
2058
        return RS_IDLE;
2059
    case 'v':
2060
        if (strncmp(p, "Cont", 4) == 0) {
2061
            int res_signal, res_thread;
2062

    
2063
            p += 4;
2064
            if (*p == '?') {
2065
                put_packet(s, "vCont;c;C;s;S");
2066
                break;
2067
            }
2068
            res = 0;
2069
            res_signal = 0;
2070
            res_thread = 0;
2071
            while (*p) {
2072
                int action, signal;
2073

    
2074
                if (*p++ != ';') {
2075
                    res = 0;
2076
                    break;
2077
                }
2078
                action = *p++;
2079
                signal = 0;
2080
                if (action == 'C' || action == 'S') {
2081
                    signal = strtoul(p, (char **)&p, 16);
2082
                } else if (action != 'c' && action != 's') {
2083
                    res = 0;
2084
                    break;
2085
                }
2086
                thread = 0;
2087
                if (*p == ':') {
2088
                    thread = strtoull(p+1, (char **)&p, 16);
2089
                }
2090
                action = tolower(action);
2091
                if (res == 0 || (res == 'c' && action == 's')) {
2092
                    res = action;
2093
                    res_signal = signal;
2094
                    res_thread = thread;
2095
                }
2096
            }
2097
            if (res) {
2098
                if (res_thread != -1 && res_thread != 0) {
2099
                    env = find_cpu(res_thread);
2100
                    if (env == NULL) {
2101
                        put_packet(s, "E22");
2102
                        break;
2103
                    }
2104
                    s->c_cpu = env;
2105
                }
2106
                if (res == 's') {
2107
                    cpu_single_step(s->c_cpu, sstep_flags);
2108
                }
2109
                s->signal = res_signal;
2110
                gdb_continue(s);
2111
                return RS_IDLE;
2112
            }
2113
            break;
2114
        } else {
2115
            goto unknown_command;
2116
        }
2117
    case 'k':
2118
#ifdef CONFIG_USER_ONLY
2119
        /* Kill the target */
2120
        fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
2121
        exit(0);
2122
#endif
2123
    case 'D':
2124
        /* Detach packet */
2125
        gdb_breakpoint_remove_all();
2126
        gdb_syscall_mode = GDB_SYS_DISABLED;
2127
        gdb_continue(s);
2128
        put_packet(s, "OK");
2129
        break;
2130
    case 's':
2131
        if (*p != '\0') {
2132
            addr = strtoull(p, (char **)&p, 16);
2133
            gdb_set_cpu_pc(s, addr);
2134
        }
2135
        cpu_single_step(s->c_cpu, sstep_flags);
2136
        gdb_continue(s);
2137
        return RS_IDLE;
2138
    case 'F':
2139
        {
2140
            target_ulong ret;
2141
            target_ulong err;
2142

    
2143
            ret = strtoull(p, (char **)&p, 16);
2144
            if (*p == ',') {
2145
                p++;
2146
                err = strtoull(p, (char **)&p, 16);
2147
            } else {
2148
                err = 0;
2149
            }
2150
            if (*p == ',')
2151
                p++;
2152
            type = *p;
2153
            if (s->current_syscall_cb) {
2154
                s->current_syscall_cb(s->c_cpu, ret, err);
2155
                s->current_syscall_cb = NULL;
2156
            }
2157
            if (type == 'C') {
2158
                put_packet(s, "T02");
2159
            } else {
2160
                gdb_continue(s);
2161
            }
2162
        }
2163
        break;
2164
    case 'g':
2165
        cpu_synchronize_state(s->g_cpu);
2166
        env = s->g_cpu;
2167
        len = 0;
2168
        for (addr = 0; addr < num_g_regs; addr++) {
2169
            reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr);
2170
            len += reg_size;
2171
        }
2172
        memtohex(buf, mem_buf, len);
2173
        put_packet(s, buf);
2174
        break;
2175
    case 'G':
2176
        cpu_synchronize_state(s->g_cpu);
2177
        env = s->g_cpu;
2178
        registers = mem_buf;
2179
        len = strlen(p) / 2;
2180
        hextomem((uint8_t *)registers, p, len);
2181
        for (addr = 0; addr < num_g_regs && len > 0; addr++) {
2182
            reg_size = gdb_write_register(s->g_cpu, registers, addr);
2183
            len -= reg_size;
2184
            registers += reg_size;
2185
        }
2186
        put_packet(s, "OK");
2187
        break;
2188
    case 'm':
2189
        addr = strtoull(p, (char **)&p, 16);
2190
        if (*p == ',')
2191
            p++;
2192
        len = strtoull(p, NULL, 16);
2193
        if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 0) != 0) {
2194
            put_packet (s, "E14");
2195
        } else {
2196
            memtohex(buf, mem_buf, len);
2197
            put_packet(s, buf);
2198
        }
2199
        break;
2200
    case 'M':
2201
        addr = strtoull(p, (char **)&p, 16);
2202
        if (*p == ',')
2203
            p++;
2204
        len = strtoull(p, (char **)&p, 16);
2205
        if (*p == ':')
2206
            p++;
2207
        hextomem(mem_buf, p, len);
2208
        if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 1) != 0) {
2209
            put_packet(s, "E14");
2210
        } else {
2211
            put_packet(s, "OK");
2212
        }
2213
        break;
2214
    case 'p':
2215
        /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
2216
           This works, but can be very slow.  Anything new enough to
2217
           understand XML also knows how to use this properly.  */
2218
        if (!gdb_has_xml)
2219
            goto unknown_command;
2220
        addr = strtoull(p, (char **)&p, 16);
2221
        reg_size = gdb_read_register(s->g_cpu, mem_buf, addr);
2222
        if (reg_size) {
2223
            memtohex(buf, mem_buf, reg_size);
2224
            put_packet(s, buf);
2225
        } else {
2226
            put_packet(s, "E14");
2227
        }
2228
        break;
2229
    case 'P':
2230
        if (!gdb_has_xml)
2231
            goto unknown_command;
2232
        addr = strtoull(p, (char **)&p, 16);
2233
        if (*p == '=')
2234
            p++;
2235
        reg_size = strlen(p) / 2;
2236
        hextomem(mem_buf, p, reg_size);
2237
        gdb_write_register(s->g_cpu, mem_buf, addr);
2238
        put_packet(s, "OK");
2239
        break;
2240
    case 'Z':
2241
    case 'z':
2242
        type = strtoul(p, (char **)&p, 16);
2243
        if (*p == ',')
2244
            p++;
2245
        addr = strtoull(p, (char **)&p, 16);
2246
        if (*p == ',')
2247
            p++;
2248
        len = strtoull(p, (char **)&p, 16);
2249
        if (ch == 'Z')
2250
            res = gdb_breakpoint_insert(addr, len, type);
2251
        else
2252
            res = gdb_breakpoint_remove(addr, len, type);
2253
        if (res >= 0)
2254
             put_packet(s, "OK");
2255
        else if (res == -ENOSYS)
2256
            put_packet(s, "");
2257
        else
2258
            put_packet(s, "E22");
2259
        break;
2260
    case 'H':
2261
        type = *p++;
2262
        thread = strtoull(p, (char **)&p, 16);
2263
        if (thread == -1 || thread == 0) {
2264
            put_packet(s, "OK");
2265
            break;
2266
        }
2267
        env = find_cpu(thread);
2268
        if (env == NULL) {
2269
            put_packet(s, "E22");
2270
            break;
2271
        }
2272
        switch (type) {
2273
        case 'c':
2274
            s->c_cpu = env;
2275
            put_packet(s, "OK");
2276
            break;
2277
        case 'g':
2278
            s->g_cpu = env;
2279
            put_packet(s, "OK");
2280
            break;
2281
        default:
2282
             put_packet(s, "E22");
2283
             break;
2284
        }
2285
        break;
2286
    case 'T':
2287
        thread = strtoull(p, (char **)&p, 16);
2288
        env = find_cpu(thread);
2289

    
2290
        if (env != NULL) {
2291
            put_packet(s, "OK");
2292
        } else {
2293
            put_packet(s, "E22");
2294
        }
2295
        break;
2296
    case 'q':
2297
    case 'Q':
2298
        /* parse any 'q' packets here */
2299
        if (!strcmp(p,"qemu.sstepbits")) {
2300
            /* Query Breakpoint bit definitions */
2301
            snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
2302
                     SSTEP_ENABLE,
2303
                     SSTEP_NOIRQ,
2304
                     SSTEP_NOTIMER);
2305
            put_packet(s, buf);
2306
            break;
2307
        } else if (strncmp(p,"qemu.sstep",10) == 0) {
2308
            /* Display or change the sstep_flags */
2309
            p += 10;
2310
            if (*p != '=') {
2311
                /* Display current setting */
2312
                snprintf(buf, sizeof(buf), "0x%x", sstep_flags);
2313
                put_packet(s, buf);
2314
                break;
2315
            }
2316
            p++;
2317
            type = strtoul(p, (char **)&p, 16);
2318
            sstep_flags = type;
2319
            put_packet(s, "OK");
2320
            break;
2321
        } else if (strcmp(p,"C") == 0) {
2322
            /* "Current thread" remains vague in the spec, so always return
2323
             *  the first CPU (gdb returns the first thread). */
2324
            put_packet(s, "QC1");
2325
            break;
2326
        } else if (strcmp(p,"fThreadInfo") == 0) {
2327
            s->query_cpu = first_cpu;
2328
            goto report_cpuinfo;
2329
        } else if (strcmp(p,"sThreadInfo") == 0) {
2330
        report_cpuinfo:
2331
            if (s->query_cpu) {
2332
                snprintf(buf, sizeof(buf), "m%x", cpu_index(s->query_cpu));
2333
                put_packet(s, buf);
2334
                s->query_cpu = s->query_cpu->next_cpu;
2335
            } else
2336
                put_packet(s, "l");
2337
            break;
2338
        } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) {
2339
            thread = strtoull(p+16, (char **)&p, 16);
2340
            env = find_cpu(thread);
2341
            if (env != NULL) {
2342
                cpu_synchronize_state(env);
2343
                len = snprintf((char *)mem_buf, sizeof(mem_buf),
2344
                               "CPU#%d [%s]", env->cpu_index,
2345
                               env->halted ? "halted " : "running");
2346
                memtohex(buf, mem_buf, len);
2347
                put_packet(s, buf);
2348
            }
2349
            break;
2350
        }
2351
#ifdef CONFIG_USER_ONLY
2352
        else if (strncmp(p, "Offsets", 7) == 0) {
2353
            TaskState *ts = s->c_cpu->opaque;
2354

    
2355
            snprintf(buf, sizeof(buf),
2356
                     "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
2357
                     ";Bss=" TARGET_ABI_FMT_lx,
2358
                     ts->info->code_offset,
2359
                     ts->info->data_offset,
2360
                     ts->info->data_offset);
2361
            put_packet(s, buf);
2362
            break;
2363
        }
2364
#else /* !CONFIG_USER_ONLY */
2365
        else if (strncmp(p, "Rcmd,", 5) == 0) {
2366
            int len = strlen(p + 5);
2367

    
2368
            if ((len % 2) != 0) {
2369
                put_packet(s, "E01");
2370
                break;
2371
            }
2372
            hextomem(mem_buf, p + 5, len);
2373
            len = len / 2;
2374
            mem_buf[len++] = 0;
2375
            qemu_chr_be_write(s->mon_chr, mem_buf, len);
2376
            put_packet(s, "OK");
2377
            break;
2378
        }
2379
#endif /* !CONFIG_USER_ONLY */
2380
        if (strncmp(p, "Supported", 9) == 0) {
2381
            snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
2382
#ifdef GDB_CORE_XML
2383
            pstrcat(buf, sizeof(buf), ";qXfer:features:read+");
2384
#endif
2385
            put_packet(s, buf);
2386
            break;
2387
        }
2388
#ifdef GDB_CORE_XML
2389
        if (strncmp(p, "Xfer:features:read:", 19) == 0) {
2390
            const char *xml;
2391
            target_ulong total_len;
2392

    
2393
            gdb_has_xml = 1;
2394
            p += 19;
2395
            xml = get_feature_xml(p, &p);
2396
            if (!xml) {
2397
                snprintf(buf, sizeof(buf), "E00");
2398
                put_packet(s, buf);
2399
                break;
2400
            }
2401

    
2402
            if (*p == ':')
2403
                p++;
2404
            addr = strtoul(p, (char **)&p, 16);
2405
            if (*p == ',')
2406
                p++;
2407
            len = strtoul(p, (char **)&p, 16);
2408

    
2409
            total_len = strlen(xml);
2410
            if (addr > total_len) {
2411
                snprintf(buf, sizeof(buf), "E00");
2412
                put_packet(s, buf);
2413
                break;
2414
            }
2415
            if (len > (MAX_PACKET_LENGTH - 5) / 2)
2416
                len = (MAX_PACKET_LENGTH - 5) / 2;
2417
            if (len < total_len - addr) {
2418
                buf[0] = 'm';
2419
                len = memtox(buf + 1, xml + addr, len);
2420
            } else {
2421
                buf[0] = 'l';
2422
                len = memtox(buf + 1, xml + addr, total_len - addr);
2423
            }
2424
            put_packet_binary(s, buf, len + 1);
2425
            break;
2426
        }
2427
#endif
2428
        /* Unrecognised 'q' command.  */
2429
        goto unknown_command;
2430

    
2431
    default:
2432
    unknown_command:
2433
        /* put empty packet */
2434
        buf[0] = '\0';
2435
        put_packet(s, buf);
2436
        break;
2437
    }
2438
    return RS_IDLE;
2439
}
2440

    
2441
void gdb_set_stop_cpu(CPUArchState *env)
2442
{
2443
    gdbserver_state->c_cpu = env;
2444
    gdbserver_state->g_cpu = env;
2445
}
2446

    
2447
#ifndef CONFIG_USER_ONLY
2448
static void gdb_vm_state_change(void *opaque, int running, RunState state)
2449
{
2450
    GDBState *s = gdbserver_state;
2451
    CPUArchState *env = s->c_cpu;
2452
    char buf[256];
2453
    const char *type;
2454
    int ret;
2455

    
2456
    if (running || s->state == RS_INACTIVE) {
2457
        return;
2458
    }
2459
    /* Is there a GDB syscall waiting to be sent?  */
2460
    if (s->current_syscall_cb) {
2461
        put_packet(s, s->syscall_buf);
2462
        return;
2463
    }
2464
    switch (state) {
2465
    case RUN_STATE_DEBUG:
2466
        if (env->watchpoint_hit) {
2467
            switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
2468
            case BP_MEM_READ:
2469
                type = "r";
2470
                break;
2471
            case BP_MEM_ACCESS:
2472
                type = "a";
2473
                break;
2474
            default:
2475
                type = "";
2476
                break;
2477
            }
2478
            snprintf(buf, sizeof(buf),
2479
                     "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
2480
                     GDB_SIGNAL_TRAP, cpu_index(env), type,
2481
                     env->watchpoint_hit->vaddr);
2482
            env->watchpoint_hit = NULL;
2483
            goto send_packet;
2484
        }
2485
        tb_flush(env);
2486
        ret = GDB_SIGNAL_TRAP;
2487
        break;
2488
    case RUN_STATE_PAUSED:
2489
        ret = GDB_SIGNAL_INT;
2490
        break;
2491
    case RUN_STATE_SHUTDOWN:
2492
        ret = GDB_SIGNAL_QUIT;
2493
        break;
2494
    case RUN_STATE_IO_ERROR:
2495
        ret = GDB_SIGNAL_IO;
2496
        break;
2497
    case RUN_STATE_WATCHDOG:
2498
        ret = GDB_SIGNAL_ALRM;
2499
        break;
2500
    case RUN_STATE_INTERNAL_ERROR:
2501
        ret = GDB_SIGNAL_ABRT;
2502
        break;
2503
    case RUN_STATE_SAVE_VM:
2504
    case RUN_STATE_RESTORE_VM:
2505
        return;
2506
    case RUN_STATE_FINISH_MIGRATE:
2507
        ret = GDB_SIGNAL_XCPU;
2508
        break;
2509
    default:
2510
        ret = GDB_SIGNAL_UNKNOWN;
2511
        break;
2512
    }
2513
    snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, cpu_index(env));
2514

    
2515
send_packet:
2516
    put_packet(s, buf);
2517

    
2518
    /* disable single step if it was enabled */
2519
    cpu_single_step(env, 0);
2520
}
2521
#endif
2522

    
2523
/* Send a gdb syscall request.
2524
   This accepts limited printf-style format specifiers, specifically:
2525
    %x  - target_ulong argument printed in hex.
2526
    %lx - 64-bit argument printed in hex.
2527
    %s  - string pointer (target_ulong) and length (int) pair.  */
2528
void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
2529
{
2530
    va_list va;
2531
    char *p;
2532
    char *p_end;
2533
    target_ulong addr;
2534
    uint64_t i64;
2535
    GDBState *s;
2536

    
2537
    s = gdbserver_state;
2538
    if (!s)
2539
        return;
2540
    s->current_syscall_cb = cb;
2541
#ifndef CONFIG_USER_ONLY
2542
    vm_stop(RUN_STATE_DEBUG);
2543
#endif
2544
    va_start(va, fmt);
2545
    p = s->syscall_buf;
2546
    p_end = &s->syscall_buf[sizeof(s->syscall_buf)];
2547
    *(p++) = 'F';
2548
    while (*fmt) {
2549
        if (*fmt == '%') {
2550
            fmt++;
2551
            switch (*fmt++) {
2552
            case 'x':
2553
                addr = va_arg(va, target_ulong);
2554
                p += snprintf(p, p_end - p, TARGET_FMT_lx, addr);
2555
                break;
2556
            case 'l':
2557
                if (*(fmt++) != 'x')
2558
                    goto bad_format;
2559
                i64 = va_arg(va, uint64_t);
2560
                p += snprintf(p, p_end - p, "%" PRIx64, i64);
2561
                break;
2562
            case 's':
2563
                addr = va_arg(va, target_ulong);
2564
                p += snprintf(p, p_end - p, TARGET_FMT_lx "/%x",
2565
                              addr, va_arg(va, int));
2566
                break;
2567
            default:
2568
            bad_format:
2569
                fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
2570
                        fmt - 1);
2571
                break;
2572
            }
2573
        } else {
2574
            *(p++) = *(fmt++);
2575
        }
2576
    }
2577
    *p = 0;
2578
    va_end(va);
2579
#ifdef CONFIG_USER_ONLY
2580
    put_packet(s, s->syscall_buf);
2581
    gdb_handlesig(s->c_cpu, 0);
2582
#else
2583
    /* In this case wait to send the syscall packet until notification that
2584
       the CPU has stopped.  This must be done because if the packet is sent
2585
       now the reply from the syscall request could be received while the CPU
2586
       is still in the running state, which can cause packets to be dropped
2587
       and state transition 'T' packets to be sent while the syscall is still
2588
       being processed.  */
2589
    cpu_exit(s->c_cpu);
2590
#endif
2591
}
2592

    
2593
static void gdb_read_byte(GDBState *s, int ch)
2594
{
2595
    int i, csum;
2596
    uint8_t reply;
2597

    
2598
#ifndef CONFIG_USER_ONLY
2599
    if (s->last_packet_len) {
2600
        /* Waiting for a response to the last packet.  If we see the start
2601
           of a new command then abandon the previous response.  */
2602
        if (ch == '-') {
2603
#ifdef DEBUG_GDB
2604
            printf("Got NACK, retransmitting\n");
2605
#endif
2606
            put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
2607
        }
2608
#ifdef DEBUG_GDB
2609
        else if (ch == '+')
2610
            printf("Got ACK\n");
2611
        else
2612
            printf("Got '%c' when expecting ACK/NACK\n", ch);
2613
#endif
2614
        if (ch == '+' || ch == '$')
2615
            s->last_packet_len = 0;
2616
        if (ch != '$')
2617
            return;
2618
    }
2619
    if (runstate_is_running()) {
2620
        /* when the CPU is running, we cannot do anything except stop
2621
           it when receiving a char */
2622
        vm_stop(RUN_STATE_PAUSED);
2623
    } else
2624
#endif
2625
    {
2626
        switch(s->state) {
2627
        case RS_IDLE:
2628
            if (ch == '$') {
2629
                s->line_buf_index = 0;
2630
                s->state = RS_GETLINE;
2631
            }
2632
            break;
2633
        case RS_GETLINE:
2634
            if (ch == '#') {
2635
            s->state = RS_CHKSUM1;
2636
            } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
2637
                s->state = RS_IDLE;
2638
            } else {
2639
            s->line_buf[s->line_buf_index++] = ch;
2640
            }
2641
            break;
2642
        case RS_CHKSUM1:
2643
            s->line_buf[s->line_buf_index] = '\0';
2644
            s->line_csum = fromhex(ch) << 4;
2645
            s->state = RS_CHKSUM2;
2646
            break;
2647
        case RS_CHKSUM2:
2648
            s->line_csum |= fromhex(ch);
2649
            csum = 0;
2650
            for(i = 0; i < s->line_buf_index; i++) {
2651
                csum += s->line_buf[i];
2652
            }
2653
            if (s->line_csum != (csum & 0xff)) {
2654
                reply = '-';
2655
                put_buffer(s, &reply, 1);
2656
                s->state = RS_IDLE;
2657
            } else {
2658
                reply = '+';
2659
                put_buffer(s, &reply, 1);
2660
                s->state = gdb_handle_packet(s, s->line_buf);
2661
            }
2662
            break;
2663
        default:
2664
            abort();
2665
        }
2666
    }
2667
}
2668

    
2669
/* Tell the remote gdb that the process has exited.  */
2670
void gdb_exit(CPUArchState *env, int code)
2671
{
2672
  GDBState *s;
2673
  char buf[4];
2674

    
2675
  s = gdbserver_state;
2676
  if (!s) {
2677
      return;
2678
  }
2679
#ifdef CONFIG_USER_ONLY
2680
  if (gdbserver_fd < 0 || s->fd < 0) {
2681
      return;
2682
  }
2683
#endif
2684

    
2685
  snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
2686
  put_packet(s, buf);
2687

    
2688
#ifndef CONFIG_USER_ONLY
2689
  if (s->chr) {
2690
      qemu_chr_delete(s->chr);
2691
  }
2692
#endif
2693
}
2694

    
2695
#ifdef CONFIG_USER_ONLY
2696
int
2697
gdb_queuesig (void)
2698
{
2699
    GDBState *s;
2700

    
2701
    s = gdbserver_state;
2702

    
2703
    if (gdbserver_fd < 0 || s->fd < 0)
2704
        return 0;
2705
    else
2706
        return 1;
2707
}
2708

    
2709
int
2710
gdb_handlesig (CPUArchState *env, int sig)
2711
{
2712
  GDBState *s;
2713
  char buf[256];
2714
  int n;
2715

    
2716
  s = gdbserver_state;
2717
  if (gdbserver_fd < 0 || s->fd < 0)
2718
    return sig;
2719

    
2720
  /* disable single step if it was enabled */
2721
  cpu_single_step(env, 0);
2722
  tb_flush(env);
2723

    
2724
  if (sig != 0)
2725
    {
2726
      snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb (sig));
2727
      put_packet(s, buf);
2728
    }
2729
  /* put_packet() might have detected that the peer terminated the 
2730
     connection.  */
2731
  if (s->fd < 0)
2732
      return sig;
2733

    
2734
  sig = 0;
2735
  s->state = RS_IDLE;
2736
  s->running_state = 0;
2737
  while (s->running_state == 0) {
2738
      n = read (s->fd, buf, 256);
2739
      if (n > 0)
2740
        {
2741
          int i;
2742

    
2743
          for (i = 0; i < n; i++)
2744
            gdb_read_byte (s, buf[i]);
2745
        }
2746
      else if (n == 0 || errno != EAGAIN)
2747
        {
2748
          /* XXX: Connection closed.  Should probably wait for another
2749
             connection before continuing.  */
2750
          return sig;
2751
        }
2752
  }
2753
  sig = s->signal;
2754
  s->signal = 0;
2755
  return sig;
2756
}
2757

    
2758
/* Tell the remote gdb that the process has exited due to SIG.  */
2759
void gdb_signalled(CPUArchState *env, int sig)
2760
{
2761
  GDBState *s;
2762
  char buf[4];
2763

    
2764
  s = gdbserver_state;
2765
  if (gdbserver_fd < 0 || s->fd < 0)
2766
    return;
2767

    
2768
  snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb (sig));
2769
  put_packet(s, buf);
2770
}
2771

    
2772
static void gdb_accept(void)
2773
{
2774
    GDBState *s;
2775
    struct sockaddr_in sockaddr;
2776
    socklen_t len;
2777
    int val, fd;
2778

    
2779
    for(;;) {
2780
        len = sizeof(sockaddr);
2781
        fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
2782
        if (fd < 0 && errno != EINTR) {
2783
            perror("accept");
2784
            return;
2785
        } else if (fd >= 0) {
2786
#ifndef _WIN32
2787
            fcntl(fd, F_SETFD, FD_CLOEXEC);
2788
#endif
2789
            break;
2790
        }
2791
    }
2792

    
2793
    /* set short latency */
2794
    val = 1;
2795
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
2796

    
2797
    s = g_malloc0(sizeof(GDBState));
2798
    s->c_cpu = first_cpu;
2799
    s->g_cpu = first_cpu;
2800
    s->fd = fd;
2801
    gdb_has_xml = 0;
2802

    
2803
    gdbserver_state = s;
2804

    
2805
    fcntl(fd, F_SETFL, O_NONBLOCK);
2806
}
2807

    
2808
static int gdbserver_open(int port)
2809
{
2810
    struct sockaddr_in sockaddr;
2811
    int fd, val, ret;
2812

    
2813
    fd = socket(PF_INET, SOCK_STREAM, 0);
2814
    if (fd < 0) {
2815
        perror("socket");
2816
        return -1;
2817
    }
2818
#ifndef _WIN32
2819
    fcntl(fd, F_SETFD, FD_CLOEXEC);
2820
#endif
2821

    
2822
    /* allow fast reuse */
2823
    val = 1;
2824
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&val, sizeof(val));
2825

    
2826
    sockaddr.sin_family = AF_INET;
2827
    sockaddr.sin_port = htons(port);
2828
    sockaddr.sin_addr.s_addr = 0;
2829
    ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
2830
    if (ret < 0) {
2831
        perror("bind");
2832
        close(fd);
2833
        return -1;
2834
    }
2835
    ret = listen(fd, 0);
2836
    if (ret < 0) {
2837
        perror("listen");
2838
        close(fd);
2839
        return -1;
2840
    }
2841
    return fd;
2842
}
2843

    
2844
int gdbserver_start(int port)
2845
{
2846
    gdbserver_fd = gdbserver_open(port);
2847
    if (gdbserver_fd < 0)
2848
        return -1;
2849
    /* accept connections */
2850
    gdb_accept();
2851
    return 0;
2852
}
2853

    
2854
/* Disable gdb stub for child processes.  */
2855
void gdbserver_fork(CPUArchState *env)
2856
{
2857
    GDBState *s = gdbserver_state;
2858
    if (gdbserver_fd < 0 || s->fd < 0)
2859
      return;
2860
    close(s->fd);
2861
    s->fd = -1;
2862
    cpu_breakpoint_remove_all(env, BP_GDB);
2863
    cpu_watchpoint_remove_all(env, BP_GDB);
2864
}
2865
#else
2866
static int gdb_chr_can_receive(void *opaque)
2867
{
2868
  /* We can handle an arbitrarily large amount of data.
2869
   Pick the maximum packet size, which is as good as anything.  */
2870
  return MAX_PACKET_LENGTH;
2871
}
2872

    
2873
static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
2874
{
2875
    int i;
2876

    
2877
    for (i = 0; i < size; i++) {
2878
        gdb_read_byte(gdbserver_state, buf[i]);
2879
    }
2880
}
2881

    
2882
static void gdb_chr_event(void *opaque, int event)
2883
{
2884
    switch (event) {
2885
    case CHR_EVENT_OPENED:
2886
        vm_stop(RUN_STATE_PAUSED);
2887
        gdb_has_xml = 0;
2888
        break;
2889
    default:
2890
        break;
2891
    }
2892
}
2893

    
2894
static void gdb_monitor_output(GDBState *s, const char *msg, int len)
2895
{
2896
    char buf[MAX_PACKET_LENGTH];
2897

    
2898
    buf[0] = 'O';
2899
    if (len > (MAX_PACKET_LENGTH/2) - 1)
2900
        len = (MAX_PACKET_LENGTH/2) - 1;
2901
    memtohex(buf + 1, (uint8_t *)msg, len);
2902
    put_packet(s, buf);
2903
}
2904

    
2905
static int gdb_monitor_write(CharDriverState *chr, const uint8_t *buf, int len)
2906
{
2907
    const char *p = (const char *)buf;
2908
    int max_sz;
2909

    
2910
    max_sz = (sizeof(gdbserver_state->last_packet) - 2) / 2;
2911
    for (;;) {
2912
        if (len <= max_sz) {
2913
            gdb_monitor_output(gdbserver_state, p, len);
2914
            break;
2915
        }
2916
        gdb_monitor_output(gdbserver_state, p, max_sz);
2917
        p += max_sz;
2918
        len -= max_sz;
2919
    }
2920
    return len;
2921
}
2922

    
2923
#ifndef _WIN32
2924
static void gdb_sigterm_handler(int signal)
2925
{
2926
    if (runstate_is_running()) {
2927
        vm_stop(RUN_STATE_PAUSED);
2928
    }
2929
}
2930
#endif
2931

    
2932
int gdbserver_start(const char *device)
2933
{
2934
    GDBState *s;
2935
    char gdbstub_device_name[128];
2936
    CharDriverState *chr = NULL;
2937
    CharDriverState *mon_chr;
2938

    
2939
    if (!device)
2940
        return -1;
2941
    if (strcmp(device, "none") != 0) {
2942
        if (strstart(device, "tcp:", NULL)) {
2943
            /* enforce required TCP attributes */
2944
            snprintf(gdbstub_device_name, sizeof(gdbstub_device_name),
2945
                     "%s,nowait,nodelay,server", device);
2946
            device = gdbstub_device_name;
2947
        }
2948
#ifndef _WIN32
2949
        else if (strcmp(device, "stdio") == 0) {
2950
            struct sigaction act;
2951

    
2952
            memset(&act, 0, sizeof(act));
2953
            act.sa_handler = gdb_sigterm_handler;
2954
            sigaction(SIGINT, &act, NULL);
2955
        }
2956
#endif
2957
        chr = qemu_chr_new("gdb", device, NULL);
2958
        if (!chr)
2959
            return -1;
2960

    
2961
        qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
2962
                              gdb_chr_event, NULL);
2963
    }
2964

    
2965
    s = gdbserver_state;
2966
    if (!s) {
2967
        s = g_malloc0(sizeof(GDBState));
2968
        gdbserver_state = s;
2969

    
2970
        qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
2971

    
2972
        /* Initialize a monitor terminal for gdb */
2973
        mon_chr = g_malloc0(sizeof(*mon_chr));
2974
        mon_chr->chr_write = gdb_monitor_write;
2975
        monitor_init(mon_chr, 0);
2976
    } else {
2977
        if (s->chr)
2978
            qemu_chr_delete(s->chr);
2979
        mon_chr = s->mon_chr;
2980
        memset(s, 0, sizeof(GDBState));
2981
    }
2982
    s->c_cpu = first_cpu;
2983
    s->g_cpu = first_cpu;
2984
    s->chr = chr;
2985
    s->state = chr ? RS_IDLE : RS_INACTIVE;
2986
    s->mon_chr = mon_chr;
2987
    s->current_syscall_cb = NULL;
2988

    
2989
    return 0;
2990
}
2991
#endif