Statistics
| Branch: | Revision:

root / gdbstub.c @ 5d12aa63

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

    
38
#define MAX_PACKET_LENGTH 4096
39

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

    
44
static inline int target_memory_rw_debug(CPUState *cpu, target_ulong addr,
45
                                         uint8_t *buf, int len, bool is_write)
46
{
47
    CPUClass *cc = CPU_GET_CLASS(cpu);
48

    
49
    if (cc->memory_rw_debug) {
50
        return cc->memory_rw_debug(cpu, addr, buf, len, is_write);
51
    }
52
    return cpu_memory_rw_debug(cpu, addr, buf, len, is_write);
53
}
54

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

    
67
#ifdef CONFIG_USER_ONLY
68

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

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

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

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

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

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

    
271
//#define DEBUG_GDB
272

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

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

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

    
316
static GDBState *gdbserver_state;
317

    
318
bool gdb_has_xml;
319

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

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

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

    
348
static enum {
349
    GDB_SYS_UNKNOWN,
350
    GDB_SYS_ENABLED,
351
    GDB_SYS_DISABLED,
352
} gdb_syscall_mode;
353

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

    
365
/* Resume execution.  */
366
static inline void gdb_continue(GDBState *s)
367
{
368
#ifdef CONFIG_USER_ONLY
369
    s->running_state = 1;
370
#else
371
    if (!runstate_needs_reset()) {
372
        vm_start();
373
    }
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
/* Encode data using the encoding for 'x' packets.  */
486
static int memtox(char *buf, const char *mem, int len)
487
{
488
    char *p = buf;
489
    char c;
490

    
491
    while (len--) {
492
        c = *(mem++);
493
        switch (c) {
494
        case '#': case '$': case '*': case '}':
495
            *(p++) = '}';
496
            *(p++) = c ^ 0x20;
497
            break;
498
        default:
499
            *(p++) = c;
500
            break;
501
        }
502
    }
503
    return p - buf;
504
}
505

    
506
static const char *get_feature_xml(const char *p, const char **newp,
507
                                   CPUClass *cc)
508
{
509
    size_t len;
510
    int i;
511
    const char *name;
512
    static char target_xml[1024];
513

    
514
    len = 0;
515
    while (p[len] && p[len] != ':')
516
        len++;
517
    *newp = p + len;
518

    
519
    name = NULL;
520
    if (strncmp(p, "target.xml", len) == 0) {
521
        /* Generate the XML description for this CPU.  */
522
        if (!target_xml[0]) {
523
            GDBRegisterState *r;
524
            CPUState *cpu = first_cpu;
525

    
526
            snprintf(target_xml, sizeof(target_xml),
527
                     "<?xml version=\"1.0\"?>"
528
                     "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
529
                     "<target>"
530
                     "<xi:include href=\"%s\"/>",
531
                     cc->gdb_core_xml_file);
532

    
533
            for (r = cpu->gdb_regs; r; r = r->next) {
534
                pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\"");
535
                pstrcat(target_xml, sizeof(target_xml), r->xml);
536
                pstrcat(target_xml, sizeof(target_xml), "\"/>");
537
            }
538
            pstrcat(target_xml, sizeof(target_xml), "</target>");
539
        }
540
        return target_xml;
541
    }
542
    for (i = 0; ; i++) {
543
        name = xml_builtin[i][0];
544
        if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
545
            break;
546
    }
547
    return name ? xml_builtin[i][1] : NULL;
548
}
549

    
550
static int gdb_read_register(CPUState *cpu, uint8_t *mem_buf, int reg)
551
{
552
    CPUClass *cc = CPU_GET_CLASS(cpu);
553
    CPUArchState *env = cpu->env_ptr;
554
    GDBRegisterState *r;
555

    
556
    if (reg < cc->gdb_num_core_regs) {
557
        return cc->gdb_read_register(cpu, mem_buf, reg);
558
    }
559

    
560
    for (r = cpu->gdb_regs; r; r = r->next) {
561
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
562
            return r->get_reg(env, mem_buf, reg - r->base_reg);
563
        }
564
    }
565
    return 0;
566
}
567

    
568
static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
569
{
570
    CPUClass *cc = CPU_GET_CLASS(cpu);
571
    CPUArchState *env = cpu->env_ptr;
572
    GDBRegisterState *r;
573

    
574
    if (reg < cc->gdb_num_core_regs) {
575
        return cc->gdb_write_register(cpu, mem_buf, reg);
576
    }
577

    
578
    for (r = cpu->gdb_regs; r; r = r->next) {
579
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
580
            return r->set_reg(env, mem_buf, reg - r->base_reg);
581
        }
582
    }
583
    return 0;
584
}
585

    
586
/* Register a supplemental set of CPU registers.  If g_pos is nonzero it
587
   specifies the first register number and these registers are included in
588
   a standard "g" packet.  Direction is relative to gdb, i.e. get_reg is
589
   gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
590
 */
591

    
592
void gdb_register_coprocessor(CPUState *cpu,
593
                              gdb_reg_cb get_reg, gdb_reg_cb set_reg,
594
                              int num_regs, const char *xml, int g_pos)
595
{
596
    GDBRegisterState *s;
597
    GDBRegisterState **p;
598

    
599
    p = &cpu->gdb_regs;
600
    while (*p) {
601
        /* Check for duplicates.  */
602
        if (strcmp((*p)->xml, xml) == 0)
603
            return;
604
        p = &(*p)->next;
605
    }
606

    
607
    s = g_new0(GDBRegisterState, 1);
608
    s->base_reg = cpu->gdb_num_regs;
609
    s->num_regs = num_regs;
610
    s->get_reg = get_reg;
611
    s->set_reg = set_reg;
612
    s->xml = xml;
613

    
614
    /* Add to end of list.  */
615
    cpu->gdb_num_regs += num_regs;
616
    *p = s;
617
    if (g_pos) {
618
        if (g_pos != s->base_reg) {
619
            fprintf(stderr, "Error: Bad gdb register numbering for '%s'\n"
620
                    "Expected %d got %d\n", xml, g_pos, s->base_reg);
621
        } else {
622
            cpu->gdb_num_g_regs = cpu->gdb_num_regs;
623
        }
624
    }
625
}
626

    
627
#ifndef CONFIG_USER_ONLY
628
static const int xlat_gdb_type[] = {
629
    [GDB_WATCHPOINT_WRITE]  = BP_GDB | BP_MEM_WRITE,
630
    [GDB_WATCHPOINT_READ]   = BP_GDB | BP_MEM_READ,
631
    [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
632
};
633
#endif
634

    
635
static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
636
{
637
    CPUState *cpu;
638
    CPUArchState *env;
639
    int err = 0;
640

    
641
    if (kvm_enabled()) {
642
        return kvm_insert_breakpoint(gdbserver_state->c_cpu, addr, len, type);
643
    }
644

    
645
    switch (type) {
646
    case GDB_BREAKPOINT_SW:
647
    case GDB_BREAKPOINT_HW:
648
        CPU_FOREACH(cpu) {
649
            env = cpu->env_ptr;
650
            err = cpu_breakpoint_insert(env, addr, BP_GDB, NULL);
651
            if (err)
652
                break;
653
        }
654
        return err;
655
#ifndef CONFIG_USER_ONLY
656
    case GDB_WATCHPOINT_WRITE:
657
    case GDB_WATCHPOINT_READ:
658
    case GDB_WATCHPOINT_ACCESS:
659
        CPU_FOREACH(cpu) {
660
            env = cpu->env_ptr;
661
            err = cpu_watchpoint_insert(env, addr, len, xlat_gdb_type[type],
662
                                        NULL);
663
            if (err)
664
                break;
665
        }
666
        return err;
667
#endif
668
    default:
669
        return -ENOSYS;
670
    }
671
}
672

    
673
static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
674
{
675
    CPUState *cpu;
676
    CPUArchState *env;
677
    int err = 0;
678

    
679
    if (kvm_enabled()) {
680
        return kvm_remove_breakpoint(gdbserver_state->c_cpu, addr, len, type);
681
    }
682

    
683
    switch (type) {
684
    case GDB_BREAKPOINT_SW:
685
    case GDB_BREAKPOINT_HW:
686
        CPU_FOREACH(cpu) {
687
            env = cpu->env_ptr;
688
            err = cpu_breakpoint_remove(env, addr, BP_GDB);
689
            if (err)
690
                break;
691
        }
692
        return err;
693
#ifndef CONFIG_USER_ONLY
694
    case GDB_WATCHPOINT_WRITE:
695
    case GDB_WATCHPOINT_READ:
696
    case GDB_WATCHPOINT_ACCESS:
697
        CPU_FOREACH(cpu) {
698
            env = cpu->env_ptr;
699
            err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]);
700
            if (err)
701
                break;
702
        }
703
        return err;
704
#endif
705
    default:
706
        return -ENOSYS;
707
    }
708
}
709

    
710
static void gdb_breakpoint_remove_all(void)
711
{
712
    CPUState *cpu;
713
    CPUArchState *env;
714

    
715
    if (kvm_enabled()) {
716
        kvm_remove_all_breakpoints(gdbserver_state->c_cpu);
717
        return;
718
    }
719

    
720
    CPU_FOREACH(cpu) {
721
        env = cpu->env_ptr;
722
        cpu_breakpoint_remove_all(env, BP_GDB);
723
#ifndef CONFIG_USER_ONLY
724
        cpu_watchpoint_remove_all(env, BP_GDB);
725
#endif
726
    }
727
}
728

    
729
static void gdb_set_cpu_pc(GDBState *s, target_ulong pc)
730
{
731
    CPUState *cpu = s->c_cpu;
732
    CPUClass *cc = CPU_GET_CLASS(cpu);
733

    
734
    cpu_synchronize_state(cpu);
735
    if (cc->set_pc) {
736
        cc->set_pc(cpu, pc);
737
    }
738
}
739

    
740
static CPUState *find_cpu(uint32_t thread_id)
741
{
742
    CPUState *cpu;
743

    
744
    CPU_FOREACH(cpu) {
745
        if (cpu_index(cpu) == thread_id) {
746
            return cpu;
747
        }
748
    }
749

    
750
    return NULL;
751
}
752

    
753
static int gdb_handle_packet(GDBState *s, const char *line_buf)
754
{
755
    CPUState *cpu;
756
    CPUClass *cc;
757
    const char *p;
758
    uint32_t thread;
759
    int ch, reg_size, type, res;
760
    char buf[MAX_PACKET_LENGTH];
761
    uint8_t mem_buf[MAX_PACKET_LENGTH];
762
    uint8_t *registers;
763
    target_ulong addr, len;
764

    
765
#ifdef DEBUG_GDB
766
    printf("command='%s'\n", line_buf);
767
#endif
768
    p = line_buf;
769
    ch = *p++;
770
    switch(ch) {
771
    case '?':
772
        /* TODO: Make this return the correct value for user-mode.  */
773
        snprintf(buf, sizeof(buf), "T%02xthread:%02x;", GDB_SIGNAL_TRAP,
774
                 cpu_index(s->c_cpu));
775
        put_packet(s, buf);
776
        /* Remove all the breakpoints when this query is issued,
777
         * because gdb is doing and initial connect and the state
778
         * should be cleaned up.
779
         */
780
        gdb_breakpoint_remove_all();
781
        break;
782
    case 'c':
783
        if (*p != '\0') {
784
            addr = strtoull(p, (char **)&p, 16);
785
            gdb_set_cpu_pc(s, addr);
786
        }
787
        s->signal = 0;
788
        gdb_continue(s);
789
        return RS_IDLE;
790
    case 'C':
791
        s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16));
792
        if (s->signal == -1)
793
            s->signal = 0;
794
        gdb_continue(s);
795
        return RS_IDLE;
796
    case 'v':
797
        if (strncmp(p, "Cont", 4) == 0) {
798
            int res_signal, res_thread;
799

    
800
            p += 4;
801
            if (*p == '?') {
802
                put_packet(s, "vCont;c;C;s;S");
803
                break;
804
            }
805
            res = 0;
806
            res_signal = 0;
807
            res_thread = 0;
808
            while (*p) {
809
                int action, signal;
810

    
811
                if (*p++ != ';') {
812
                    res = 0;
813
                    break;
814
                }
815
                action = *p++;
816
                signal = 0;
817
                if (action == 'C' || action == 'S') {
818
                    signal = strtoul(p, (char **)&p, 16);
819
                } else if (action != 'c' && action != 's') {
820
                    res = 0;
821
                    break;
822
                }
823
                thread = 0;
824
                if (*p == ':') {
825
                    thread = strtoull(p+1, (char **)&p, 16);
826
                }
827
                action = tolower(action);
828
                if (res == 0 || (res == 'c' && action == 's')) {
829
                    res = action;
830
                    res_signal = signal;
831
                    res_thread = thread;
832
                }
833
            }
834
            if (res) {
835
                if (res_thread != -1 && res_thread != 0) {
836
                    cpu = find_cpu(res_thread);
837
                    if (cpu == NULL) {
838
                        put_packet(s, "E22");
839
                        break;
840
                    }
841
                    s->c_cpu = cpu;
842
                }
843
                if (res == 's') {
844
                    cpu_single_step(s->c_cpu, sstep_flags);
845
                }
846
                s->signal = res_signal;
847
                gdb_continue(s);
848
                return RS_IDLE;
849
            }
850
            break;
851
        } else {
852
            goto unknown_command;
853
        }
854
    case 'k':
855
#ifdef CONFIG_USER_ONLY
856
        /* Kill the target */
857
        fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
858
        exit(0);
859
#endif
860
    case 'D':
861
        /* Detach packet */
862
        gdb_breakpoint_remove_all();
863
        gdb_syscall_mode = GDB_SYS_DISABLED;
864
        gdb_continue(s);
865
        put_packet(s, "OK");
866
        break;
867
    case 's':
868
        if (*p != '\0') {
869
            addr = strtoull(p, (char **)&p, 16);
870
            gdb_set_cpu_pc(s, addr);
871
        }
872
        cpu_single_step(s->c_cpu, sstep_flags);
873
        gdb_continue(s);
874
        return RS_IDLE;
875
    case 'F':
876
        {
877
            target_ulong ret;
878
            target_ulong err;
879

    
880
            ret = strtoull(p, (char **)&p, 16);
881
            if (*p == ',') {
882
                p++;
883
                err = strtoull(p, (char **)&p, 16);
884
            } else {
885
                err = 0;
886
            }
887
            if (*p == ',')
888
                p++;
889
            type = *p;
890
            if (s->current_syscall_cb) {
891
                s->current_syscall_cb(s->c_cpu, ret, err);
892
                s->current_syscall_cb = NULL;
893
            }
894
            if (type == 'C') {
895
                put_packet(s, "T02");
896
            } else {
897
                gdb_continue(s);
898
            }
899
        }
900
        break;
901
    case 'g':
902
        cpu_synchronize_state(s->g_cpu);
903
        len = 0;
904
        for (addr = 0; addr < s->g_cpu->gdb_num_g_regs; addr++) {
905
            reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr);
906
            len += reg_size;
907
        }
908
        memtohex(buf, mem_buf, len);
909
        put_packet(s, buf);
910
        break;
911
    case 'G':
912
        cpu_synchronize_state(s->g_cpu);
913
        registers = mem_buf;
914
        len = strlen(p) / 2;
915
        hextomem((uint8_t *)registers, p, len);
916
        for (addr = 0; addr < s->g_cpu->gdb_num_g_regs && len > 0; addr++) {
917
            reg_size = gdb_write_register(s->g_cpu, registers, addr);
918
            len -= reg_size;
919
            registers += reg_size;
920
        }
921
        put_packet(s, "OK");
922
        break;
923
    case 'm':
924
        addr = strtoull(p, (char **)&p, 16);
925
        if (*p == ',')
926
            p++;
927
        len = strtoull(p, NULL, 16);
928
        if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, false) != 0) {
929
            put_packet (s, "E14");
930
        } else {
931
            memtohex(buf, mem_buf, len);
932
            put_packet(s, buf);
933
        }
934
        break;
935
    case 'M':
936
        addr = strtoull(p, (char **)&p, 16);
937
        if (*p == ',')
938
            p++;
939
        len = strtoull(p, (char **)&p, 16);
940
        if (*p == ':')
941
            p++;
942
        hextomem(mem_buf, p, len);
943
        if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len,
944
                                   true) != 0) {
945
            put_packet(s, "E14");
946
        } else {
947
            put_packet(s, "OK");
948
        }
949
        break;
950
    case 'p':
951
        /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
952
           This works, but can be very slow.  Anything new enough to
953
           understand XML also knows how to use this properly.  */
954
        if (!gdb_has_xml)
955
            goto unknown_command;
956
        addr = strtoull(p, (char **)&p, 16);
957
        reg_size = gdb_read_register(s->g_cpu, mem_buf, addr);
958
        if (reg_size) {
959
            memtohex(buf, mem_buf, reg_size);
960
            put_packet(s, buf);
961
        } else {
962
            put_packet(s, "E14");
963
        }
964
        break;
965
    case 'P':
966
        if (!gdb_has_xml)
967
            goto unknown_command;
968
        addr = strtoull(p, (char **)&p, 16);
969
        if (*p == '=')
970
            p++;
971
        reg_size = strlen(p) / 2;
972
        hextomem(mem_buf, p, reg_size);
973
        gdb_write_register(s->g_cpu, mem_buf, addr);
974
        put_packet(s, "OK");
975
        break;
976
    case 'Z':
977
    case 'z':
978
        type = strtoul(p, (char **)&p, 16);
979
        if (*p == ',')
980
            p++;
981
        addr = strtoull(p, (char **)&p, 16);
982
        if (*p == ',')
983
            p++;
984
        len = strtoull(p, (char **)&p, 16);
985
        if (ch == 'Z')
986
            res = gdb_breakpoint_insert(addr, len, type);
987
        else
988
            res = gdb_breakpoint_remove(addr, len, type);
989
        if (res >= 0)
990
             put_packet(s, "OK");
991
        else if (res == -ENOSYS)
992
            put_packet(s, "");
993
        else
994
            put_packet(s, "E22");
995
        break;
996
    case 'H':
997
        type = *p++;
998
        thread = strtoull(p, (char **)&p, 16);
999
        if (thread == -1 || thread == 0) {
1000
            put_packet(s, "OK");
1001
            break;
1002
        }
1003
        cpu = find_cpu(thread);
1004
        if (cpu == NULL) {
1005
            put_packet(s, "E22");
1006
            break;
1007
        }
1008
        switch (type) {
1009
        case 'c':
1010
            s->c_cpu = cpu;
1011
            put_packet(s, "OK");
1012
            break;
1013
        case 'g':
1014
            s->g_cpu = cpu;
1015
            put_packet(s, "OK");
1016
            break;
1017
        default:
1018
             put_packet(s, "E22");
1019
             break;
1020
        }
1021
        break;
1022
    case 'T':
1023
        thread = strtoull(p, (char **)&p, 16);
1024
        cpu = find_cpu(thread);
1025

    
1026
        if (cpu != NULL) {
1027
            put_packet(s, "OK");
1028
        } else {
1029
            put_packet(s, "E22");
1030
        }
1031
        break;
1032
    case 'q':
1033
    case 'Q':
1034
        /* parse any 'q' packets here */
1035
        if (!strcmp(p,"qemu.sstepbits")) {
1036
            /* Query Breakpoint bit definitions */
1037
            snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
1038
                     SSTEP_ENABLE,
1039
                     SSTEP_NOIRQ,
1040
                     SSTEP_NOTIMER);
1041
            put_packet(s, buf);
1042
            break;
1043
        } else if (strncmp(p,"qemu.sstep",10) == 0) {
1044
            /* Display or change the sstep_flags */
1045
            p += 10;
1046
            if (*p != '=') {
1047
                /* Display current setting */
1048
                snprintf(buf, sizeof(buf), "0x%x", sstep_flags);
1049
                put_packet(s, buf);
1050
                break;
1051
            }
1052
            p++;
1053
            type = strtoul(p, (char **)&p, 16);
1054
            sstep_flags = type;
1055
            put_packet(s, "OK");
1056
            break;
1057
        } else if (strcmp(p,"C") == 0) {
1058
            /* "Current thread" remains vague in the spec, so always return
1059
             *  the first CPU (gdb returns the first thread). */
1060
            put_packet(s, "QC1");
1061
            break;
1062
        } else if (strcmp(p,"fThreadInfo") == 0) {
1063
            s->query_cpu = first_cpu;
1064
            goto report_cpuinfo;
1065
        } else if (strcmp(p,"sThreadInfo") == 0) {
1066
        report_cpuinfo:
1067
            if (s->query_cpu) {
1068
                snprintf(buf, sizeof(buf), "m%x", cpu_index(s->query_cpu));
1069
                put_packet(s, buf);
1070
                s->query_cpu = CPU_NEXT(s->query_cpu);
1071
            } else
1072
                put_packet(s, "l");
1073
            break;
1074
        } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) {
1075
            thread = strtoull(p+16, (char **)&p, 16);
1076
            cpu = find_cpu(thread);
1077
            if (cpu != NULL) {
1078
                cpu_synchronize_state(cpu);
1079
                len = snprintf((char *)mem_buf, sizeof(mem_buf),
1080
                               "CPU#%d [%s]", cpu->cpu_index,
1081
                               cpu->halted ? "halted " : "running");
1082
                memtohex(buf, mem_buf, len);
1083
                put_packet(s, buf);
1084
            }
1085
            break;
1086
        }
1087
#ifdef CONFIG_USER_ONLY
1088
        else if (strncmp(p, "Offsets", 7) == 0) {
1089
            CPUArchState *env = s->c_cpu->env_ptr;
1090
            TaskState *ts = env->opaque;
1091

    
1092
            snprintf(buf, sizeof(buf),
1093
                     "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
1094
                     ";Bss=" TARGET_ABI_FMT_lx,
1095
                     ts->info->code_offset,
1096
                     ts->info->data_offset,
1097
                     ts->info->data_offset);
1098
            put_packet(s, buf);
1099
            break;
1100
        }
1101
#else /* !CONFIG_USER_ONLY */
1102
        else if (strncmp(p, "Rcmd,", 5) == 0) {
1103
            int len = strlen(p + 5);
1104

    
1105
            if ((len % 2) != 0) {
1106
                put_packet(s, "E01");
1107
                break;
1108
            }
1109
            hextomem(mem_buf, p + 5, len);
1110
            len = len / 2;
1111
            mem_buf[len++] = 0;
1112
            qemu_chr_be_write(s->mon_chr, mem_buf, len);
1113
            put_packet(s, "OK");
1114
            break;
1115
        }
1116
#endif /* !CONFIG_USER_ONLY */
1117
        if (strncmp(p, "Supported", 9) == 0) {
1118
            snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
1119
            cc = CPU_GET_CLASS(first_cpu);
1120
            if (cc->gdb_core_xml_file != NULL) {
1121
                pstrcat(buf, sizeof(buf), ";qXfer:features:read+");
1122
            }
1123
            put_packet(s, buf);
1124
            break;
1125
        }
1126
        if (strncmp(p, "Xfer:features:read:", 19) == 0) {
1127
            const char *xml;
1128
            target_ulong total_len;
1129

    
1130
            cc = CPU_GET_CLASS(first_cpu);
1131
            if (cc->gdb_core_xml_file == NULL) {
1132
                goto unknown_command;
1133
            }
1134

    
1135
            gdb_has_xml = true;
1136
            p += 19;
1137
            xml = get_feature_xml(p, &p, cc);
1138
            if (!xml) {
1139
                snprintf(buf, sizeof(buf), "E00");
1140
                put_packet(s, buf);
1141
                break;
1142
            }
1143

    
1144
            if (*p == ':')
1145
                p++;
1146
            addr = strtoul(p, (char **)&p, 16);
1147
            if (*p == ',')
1148
                p++;
1149
            len = strtoul(p, (char **)&p, 16);
1150

    
1151
            total_len = strlen(xml);
1152
            if (addr > total_len) {
1153
                snprintf(buf, sizeof(buf), "E00");
1154
                put_packet(s, buf);
1155
                break;
1156
            }
1157
            if (len > (MAX_PACKET_LENGTH - 5) / 2)
1158
                len = (MAX_PACKET_LENGTH - 5) / 2;
1159
            if (len < total_len - addr) {
1160
                buf[0] = 'm';
1161
                len = memtox(buf + 1, xml + addr, len);
1162
            } else {
1163
                buf[0] = 'l';
1164
                len = memtox(buf + 1, xml + addr, total_len - addr);
1165
            }
1166
            put_packet_binary(s, buf, len + 1);
1167
            break;
1168
        }
1169
        /* Unrecognised 'q' command.  */
1170
        goto unknown_command;
1171

    
1172
    default:
1173
    unknown_command:
1174
        /* put empty packet */
1175
        buf[0] = '\0';
1176
        put_packet(s, buf);
1177
        break;
1178
    }
1179
    return RS_IDLE;
1180
}
1181

    
1182
void gdb_set_stop_cpu(CPUState *cpu)
1183
{
1184
    gdbserver_state->c_cpu = cpu;
1185
    gdbserver_state->g_cpu = cpu;
1186
}
1187

    
1188
#ifndef CONFIG_USER_ONLY
1189
static void gdb_vm_state_change(void *opaque, int running, RunState state)
1190
{
1191
    GDBState *s = gdbserver_state;
1192
    CPUArchState *env = s->c_cpu->env_ptr;
1193
    CPUState *cpu = s->c_cpu;
1194
    char buf[256];
1195
    const char *type;
1196
    int ret;
1197

    
1198
    if (running || s->state == RS_INACTIVE) {
1199
        return;
1200
    }
1201
    /* Is there a GDB syscall waiting to be sent?  */
1202
    if (s->current_syscall_cb) {
1203
        put_packet(s, s->syscall_buf);
1204
        return;
1205
    }
1206
    switch (state) {
1207
    case RUN_STATE_DEBUG:
1208
        if (env->watchpoint_hit) {
1209
            switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
1210
            case BP_MEM_READ:
1211
                type = "r";
1212
                break;
1213
            case BP_MEM_ACCESS:
1214
                type = "a";
1215
                break;
1216
            default:
1217
                type = "";
1218
                break;
1219
            }
1220
            snprintf(buf, sizeof(buf),
1221
                     "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
1222
                     GDB_SIGNAL_TRAP, cpu_index(cpu), type,
1223
                     env->watchpoint_hit->vaddr);
1224
            env->watchpoint_hit = NULL;
1225
            goto send_packet;
1226
        }
1227
        tb_flush(env);
1228
        ret = GDB_SIGNAL_TRAP;
1229
        break;
1230
    case RUN_STATE_PAUSED:
1231
        ret = GDB_SIGNAL_INT;
1232
        break;
1233
    case RUN_STATE_SHUTDOWN:
1234
        ret = GDB_SIGNAL_QUIT;
1235
        break;
1236
    case RUN_STATE_IO_ERROR:
1237
        ret = GDB_SIGNAL_IO;
1238
        break;
1239
    case RUN_STATE_WATCHDOG:
1240
        ret = GDB_SIGNAL_ALRM;
1241
        break;
1242
    case RUN_STATE_INTERNAL_ERROR:
1243
        ret = GDB_SIGNAL_ABRT;
1244
        break;
1245
    case RUN_STATE_SAVE_VM:
1246
    case RUN_STATE_RESTORE_VM:
1247
        return;
1248
    case RUN_STATE_FINISH_MIGRATE:
1249
        ret = GDB_SIGNAL_XCPU;
1250
        break;
1251
    default:
1252
        ret = GDB_SIGNAL_UNKNOWN;
1253
        break;
1254
    }
1255
    snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, cpu_index(cpu));
1256

    
1257
send_packet:
1258
    put_packet(s, buf);
1259

    
1260
    /* disable single step if it was enabled */
1261
    cpu_single_step(cpu, 0);
1262
}
1263
#endif
1264

    
1265
/* Send a gdb syscall request.
1266
   This accepts limited printf-style format specifiers, specifically:
1267
    %x  - target_ulong argument printed in hex.
1268
    %lx - 64-bit argument printed in hex.
1269
    %s  - string pointer (target_ulong) and length (int) pair.  */
1270
void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
1271
{
1272
    va_list va;
1273
    char *p;
1274
    char *p_end;
1275
    target_ulong addr;
1276
    uint64_t i64;
1277
    GDBState *s;
1278

    
1279
    s = gdbserver_state;
1280
    if (!s)
1281
        return;
1282
    s->current_syscall_cb = cb;
1283
#ifndef CONFIG_USER_ONLY
1284
    vm_stop(RUN_STATE_DEBUG);
1285
#endif
1286
    va_start(va, fmt);
1287
    p = s->syscall_buf;
1288
    p_end = &s->syscall_buf[sizeof(s->syscall_buf)];
1289
    *(p++) = 'F';
1290
    while (*fmt) {
1291
        if (*fmt == '%') {
1292
            fmt++;
1293
            switch (*fmt++) {
1294
            case 'x':
1295
                addr = va_arg(va, target_ulong);
1296
                p += snprintf(p, p_end - p, TARGET_FMT_lx, addr);
1297
                break;
1298
            case 'l':
1299
                if (*(fmt++) != 'x')
1300
                    goto bad_format;
1301
                i64 = va_arg(va, uint64_t);
1302
                p += snprintf(p, p_end - p, "%" PRIx64, i64);
1303
                break;
1304
            case 's':
1305
                addr = va_arg(va, target_ulong);
1306
                p += snprintf(p, p_end - p, TARGET_FMT_lx "/%x",
1307
                              addr, va_arg(va, int));
1308
                break;
1309
            default:
1310
            bad_format:
1311
                fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
1312
                        fmt - 1);
1313
                break;
1314
            }
1315
        } else {
1316
            *(p++) = *(fmt++);
1317
        }
1318
    }
1319
    *p = 0;
1320
    va_end(va);
1321
#ifdef CONFIG_USER_ONLY
1322
    put_packet(s, s->syscall_buf);
1323
    gdb_handlesig(s->c_cpu, 0);
1324
#else
1325
    /* In this case wait to send the syscall packet until notification that
1326
       the CPU has stopped.  This must be done because if the packet is sent
1327
       now the reply from the syscall request could be received while the CPU
1328
       is still in the running state, which can cause packets to be dropped
1329
       and state transition 'T' packets to be sent while the syscall is still
1330
       being processed.  */
1331
    cpu_exit(s->c_cpu);
1332
#endif
1333
}
1334

    
1335
static void gdb_read_byte(GDBState *s, int ch)
1336
{
1337
    int i, csum;
1338
    uint8_t reply;
1339

    
1340
#ifndef CONFIG_USER_ONLY
1341
    if (s->last_packet_len) {
1342
        /* Waiting for a response to the last packet.  If we see the start
1343
           of a new command then abandon the previous response.  */
1344
        if (ch == '-') {
1345
#ifdef DEBUG_GDB
1346
            printf("Got NACK, retransmitting\n");
1347
#endif
1348
            put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
1349
        }
1350
#ifdef DEBUG_GDB
1351
        else if (ch == '+')
1352
            printf("Got ACK\n");
1353
        else
1354
            printf("Got '%c' when expecting ACK/NACK\n", ch);
1355
#endif
1356
        if (ch == '+' || ch == '$')
1357
            s->last_packet_len = 0;
1358
        if (ch != '$')
1359
            return;
1360
    }
1361
    if (runstate_is_running()) {
1362
        /* when the CPU is running, we cannot do anything except stop
1363
           it when receiving a char */
1364
        vm_stop(RUN_STATE_PAUSED);
1365
    } else
1366
#endif
1367
    {
1368
        switch(s->state) {
1369
        case RS_IDLE:
1370
            if (ch == '$') {
1371
                s->line_buf_index = 0;
1372
                s->state = RS_GETLINE;
1373
            }
1374
            break;
1375
        case RS_GETLINE:
1376
            if (ch == '#') {
1377
            s->state = RS_CHKSUM1;
1378
            } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
1379
                s->state = RS_IDLE;
1380
            } else {
1381
            s->line_buf[s->line_buf_index++] = ch;
1382
            }
1383
            break;
1384
        case RS_CHKSUM1:
1385
            s->line_buf[s->line_buf_index] = '\0';
1386
            s->line_csum = fromhex(ch) << 4;
1387
            s->state = RS_CHKSUM2;
1388
            break;
1389
        case RS_CHKSUM2:
1390
            s->line_csum |= fromhex(ch);
1391
            csum = 0;
1392
            for(i = 0; i < s->line_buf_index; i++) {
1393
                csum += s->line_buf[i];
1394
            }
1395
            if (s->line_csum != (csum & 0xff)) {
1396
                reply = '-';
1397
                put_buffer(s, &reply, 1);
1398
                s->state = RS_IDLE;
1399
            } else {
1400
                reply = '+';
1401
                put_buffer(s, &reply, 1);
1402
                s->state = gdb_handle_packet(s, s->line_buf);
1403
            }
1404
            break;
1405
        default:
1406
            abort();
1407
        }
1408
    }
1409
}
1410

    
1411
/* Tell the remote gdb that the process has exited.  */
1412
void gdb_exit(CPUArchState *env, int code)
1413
{
1414
  GDBState *s;
1415
  char buf[4];
1416

    
1417
  s = gdbserver_state;
1418
  if (!s) {
1419
      return;
1420
  }
1421
#ifdef CONFIG_USER_ONLY
1422
  if (gdbserver_fd < 0 || s->fd < 0) {
1423
      return;
1424
  }
1425
#endif
1426

    
1427
  snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
1428
  put_packet(s, buf);
1429

    
1430
#ifndef CONFIG_USER_ONLY
1431
  if (s->chr) {
1432
      qemu_chr_delete(s->chr);
1433
  }
1434
#endif
1435
}
1436

    
1437
#ifdef CONFIG_USER_ONLY
1438
int
1439
gdb_queuesig (void)
1440
{
1441
    GDBState *s;
1442

    
1443
    s = gdbserver_state;
1444

    
1445
    if (gdbserver_fd < 0 || s->fd < 0)
1446
        return 0;
1447
    else
1448
        return 1;
1449
}
1450

    
1451
int
1452
gdb_handlesig(CPUState *cpu, int sig)
1453
{
1454
    CPUArchState *env = cpu->env_ptr;
1455
    GDBState *s;
1456
    char buf[256];
1457
    int n;
1458

    
1459
    s = gdbserver_state;
1460
    if (gdbserver_fd < 0 || s->fd < 0) {
1461
        return sig;
1462
    }
1463

    
1464
    /* disable single step if it was enabled */
1465
    cpu_single_step(cpu, 0);
1466
    tb_flush(env);
1467

    
1468
    if (sig != 0) {
1469
        snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb(sig));
1470
        put_packet(s, buf);
1471
    }
1472
    /* put_packet() might have detected that the peer terminated the
1473
       connection.  */
1474
    if (s->fd < 0) {
1475
        return sig;
1476
    }
1477

    
1478
    sig = 0;
1479
    s->state = RS_IDLE;
1480
    s->running_state = 0;
1481
    while (s->running_state == 0) {
1482
        n = read(s->fd, buf, 256);
1483
        if (n > 0) {
1484
            int i;
1485

    
1486
            for (i = 0; i < n; i++) {
1487
                gdb_read_byte(s, buf[i]);
1488
            }
1489
        } else if (n == 0 || errno != EAGAIN) {
1490
            /* XXX: Connection closed.  Should probably wait for another
1491
               connection before continuing.  */
1492
            return sig;
1493
        }
1494
    }
1495
    sig = s->signal;
1496
    s->signal = 0;
1497
    return sig;
1498
}
1499

    
1500
/* Tell the remote gdb that the process has exited due to SIG.  */
1501
void gdb_signalled(CPUArchState *env, int sig)
1502
{
1503
    GDBState *s;
1504
    char buf[4];
1505

    
1506
    s = gdbserver_state;
1507
    if (gdbserver_fd < 0 || s->fd < 0) {
1508
        return;
1509
    }
1510

    
1511
    snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb(sig));
1512
    put_packet(s, buf);
1513
}
1514

    
1515
static void gdb_accept(void)
1516
{
1517
    GDBState *s;
1518
    struct sockaddr_in sockaddr;
1519
    socklen_t len;
1520
    int fd;
1521

    
1522
    for(;;) {
1523
        len = sizeof(sockaddr);
1524
        fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
1525
        if (fd < 0 && errno != EINTR) {
1526
            perror("accept");
1527
            return;
1528
        } else if (fd >= 0) {
1529
#ifndef _WIN32
1530
            fcntl(fd, F_SETFD, FD_CLOEXEC);
1531
#endif
1532
            break;
1533
        }
1534
    }
1535

    
1536
    /* set short latency */
1537
    socket_set_nodelay(fd);
1538

    
1539
    s = g_malloc0(sizeof(GDBState));
1540
    s->c_cpu = first_cpu;
1541
    s->g_cpu = first_cpu;
1542
    s->fd = fd;
1543
    gdb_has_xml = false;
1544

    
1545
    gdbserver_state = s;
1546

    
1547
    fcntl(fd, F_SETFL, O_NONBLOCK);
1548
}
1549

    
1550
static int gdbserver_open(int port)
1551
{
1552
    struct sockaddr_in sockaddr;
1553
    int fd, ret;
1554

    
1555
    fd = socket(PF_INET, SOCK_STREAM, 0);
1556
    if (fd < 0) {
1557
        perror("socket");
1558
        return -1;
1559
    }
1560
#ifndef _WIN32
1561
    fcntl(fd, F_SETFD, FD_CLOEXEC);
1562
#endif
1563

    
1564
    socket_set_fast_reuse(fd);
1565

    
1566
    sockaddr.sin_family = AF_INET;
1567
    sockaddr.sin_port = htons(port);
1568
    sockaddr.sin_addr.s_addr = 0;
1569
    ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
1570
    if (ret < 0) {
1571
        perror("bind");
1572
        close(fd);
1573
        return -1;
1574
    }
1575
    ret = listen(fd, 0);
1576
    if (ret < 0) {
1577
        perror("listen");
1578
        close(fd);
1579
        return -1;
1580
    }
1581
    return fd;
1582
}
1583

    
1584
int gdbserver_start(int port)
1585
{
1586
    gdbserver_fd = gdbserver_open(port);
1587
    if (gdbserver_fd < 0)
1588
        return -1;
1589
    /* accept connections */
1590
    gdb_accept();
1591
    return 0;
1592
}
1593

    
1594
/* Disable gdb stub for child processes.  */
1595
void gdbserver_fork(CPUArchState *env)
1596
{
1597
    GDBState *s = gdbserver_state;
1598
    if (gdbserver_fd < 0 || s->fd < 0)
1599
      return;
1600
    close(s->fd);
1601
    s->fd = -1;
1602
    cpu_breakpoint_remove_all(env, BP_GDB);
1603
    cpu_watchpoint_remove_all(env, BP_GDB);
1604
}
1605
#else
1606
static int gdb_chr_can_receive(void *opaque)
1607
{
1608
  /* We can handle an arbitrarily large amount of data.
1609
   Pick the maximum packet size, which is as good as anything.  */
1610
  return MAX_PACKET_LENGTH;
1611
}
1612

    
1613
static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
1614
{
1615
    int i;
1616

    
1617
    for (i = 0; i < size; i++) {
1618
        gdb_read_byte(gdbserver_state, buf[i]);
1619
    }
1620
}
1621

    
1622
static void gdb_chr_event(void *opaque, int event)
1623
{
1624
    switch (event) {
1625
    case CHR_EVENT_OPENED:
1626
        vm_stop(RUN_STATE_PAUSED);
1627
        gdb_has_xml = false;
1628
        break;
1629
    default:
1630
        break;
1631
    }
1632
}
1633

    
1634
static void gdb_monitor_output(GDBState *s, const char *msg, int len)
1635
{
1636
    char buf[MAX_PACKET_LENGTH];
1637

    
1638
    buf[0] = 'O';
1639
    if (len > (MAX_PACKET_LENGTH/2) - 1)
1640
        len = (MAX_PACKET_LENGTH/2) - 1;
1641
    memtohex(buf + 1, (uint8_t *)msg, len);
1642
    put_packet(s, buf);
1643
}
1644

    
1645
static int gdb_monitor_write(CharDriverState *chr, const uint8_t *buf, int len)
1646
{
1647
    const char *p = (const char *)buf;
1648
    int max_sz;
1649

    
1650
    max_sz = (sizeof(gdbserver_state->last_packet) - 2) / 2;
1651
    for (;;) {
1652
        if (len <= max_sz) {
1653
            gdb_monitor_output(gdbserver_state, p, len);
1654
            break;
1655
        }
1656
        gdb_monitor_output(gdbserver_state, p, max_sz);
1657
        p += max_sz;
1658
        len -= max_sz;
1659
    }
1660
    return len;
1661
}
1662

    
1663
#ifndef _WIN32
1664
static void gdb_sigterm_handler(int signal)
1665
{
1666
    if (runstate_is_running()) {
1667
        vm_stop(RUN_STATE_PAUSED);
1668
    }
1669
}
1670
#endif
1671

    
1672
int gdbserver_start(const char *device)
1673
{
1674
    GDBState *s;
1675
    char gdbstub_device_name[128];
1676
    CharDriverState *chr = NULL;
1677
    CharDriverState *mon_chr;
1678

    
1679
    if (!device)
1680
        return -1;
1681
    if (strcmp(device, "none") != 0) {
1682
        if (strstart(device, "tcp:", NULL)) {
1683
            /* enforce required TCP attributes */
1684
            snprintf(gdbstub_device_name, sizeof(gdbstub_device_name),
1685
                     "%s,nowait,nodelay,server", device);
1686
            device = gdbstub_device_name;
1687
        }
1688
#ifndef _WIN32
1689
        else if (strcmp(device, "stdio") == 0) {
1690
            struct sigaction act;
1691

    
1692
            memset(&act, 0, sizeof(act));
1693
            act.sa_handler = gdb_sigterm_handler;
1694
            sigaction(SIGINT, &act, NULL);
1695
        }
1696
#endif
1697
        chr = qemu_chr_new("gdb", device, NULL);
1698
        if (!chr)
1699
            return -1;
1700

    
1701
        qemu_chr_fe_claim_no_fail(chr);
1702
        qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
1703
                              gdb_chr_event, NULL);
1704
    }
1705

    
1706
    s = gdbserver_state;
1707
    if (!s) {
1708
        s = g_malloc0(sizeof(GDBState));
1709
        gdbserver_state = s;
1710

    
1711
        qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
1712

    
1713
        /* Initialize a monitor terminal for gdb */
1714
        mon_chr = g_malloc0(sizeof(*mon_chr));
1715
        mon_chr->chr_write = gdb_monitor_write;
1716
        monitor_init(mon_chr, 0);
1717
    } else {
1718
        if (s->chr)
1719
            qemu_chr_delete(s->chr);
1720
        mon_chr = s->mon_chr;
1721
        memset(s, 0, sizeof(GDBState));
1722
    }
1723
    s->c_cpu = first_cpu;
1724
    s->g_cpu = first_cpu;
1725
    s->chr = chr;
1726
    s->state = chr ? RS_IDLE : RS_INACTIVE;
1727
    s->mon_chr = mon_chr;
1728
    s->current_syscall_cb = NULL;
1729

    
1730
    return 0;
1731
}
1732
#endif