| 704 |
} |
} |
| 705 |
|
|
| 706 |
#else |
#else |
| 707 |
static int gdb_can_read(void *opaque) |
static void gdb_read(void *opaque) |
|
{ |
|
|
return 256; |
|
|
} |
|
|
|
|
|
static void gdb_read(void *opaque, const uint8_t *buf, int size) |
|
| 708 |
{ |
{ |
| 709 |
GDBState *s = opaque; |
GDBState *s = opaque; |
| 710 |
int i; |
int i, size; |
| 711 |
|
uint8_t buf[4096]; |
| 712 |
|
|
| 713 |
|
size = read(s->fd, buf, sizeof(buf)); |
| 714 |
|
if (size < 0) |
| 715 |
|
return; |
| 716 |
if (size == 0) { |
if (size == 0) { |
| 717 |
/* end of connection */ |
/* end of connection */ |
| 718 |
qemu_del_vm_stop_handler(gdb_vm_stopped, s); |
qemu_del_vm_stop_handler(gdb_vm_stopped, s); |
| 719 |
qemu_del_fd_read_handler(s->fd); |
qemu_set_fd_handler(s->fd, NULL, NULL, NULL); |
| 720 |
qemu_free(s); |
qemu_free(s); |
| 721 |
vm_start(); |
vm_start(); |
| 722 |
} else { |
} else { |
| 727 |
|
|
| 728 |
#endif |
#endif |
| 729 |
|
|
| 730 |
static void gdb_accept(void *opaque, const uint8_t *buf, int size) |
static void gdb_accept(void *opaque) |
| 731 |
{ |
{ |
| 732 |
GDBState *s; |
GDBState *s; |
| 733 |
struct sockaddr_in sockaddr; |
struct sockaddr_in sockaddr; |
| 768 |
vm_stop(EXCP_INTERRUPT); |
vm_stop(EXCP_INTERRUPT); |
| 769 |
|
|
| 770 |
/* start handling I/O */ |
/* start handling I/O */ |
| 771 |
qemu_add_fd_read_handler(s->fd, gdb_can_read, gdb_read, s); |
qemu_set_fd_handler(s->fd, gdb_read, NULL, s); |
| 772 |
/* when the VM is stopped, the following callback is called */ |
/* when the VM is stopped, the following callback is called */ |
| 773 |
qemu_add_vm_stop_handler(gdb_vm_stopped, s); |
qemu_add_vm_stop_handler(gdb_vm_stopped, s); |
| 774 |
#endif |
#endif |
| 815 |
return -1; |
return -1; |
| 816 |
/* accept connections */ |
/* accept connections */ |
| 817 |
#ifdef CONFIG_USER_ONLY |
#ifdef CONFIG_USER_ONLY |
| 818 |
gdb_accept (NULL, NULL, 0); |
gdb_accept (NULL); |
| 819 |
#else |
#else |
| 820 |
qemu_add_fd_read_handler(gdbserver_fd, NULL, gdb_accept, NULL); |
qemu_set_fd_handler(gdbserver_fd, gdb_accept, NULL, NULL); |
| 821 |
#endif |
#endif |
| 822 |
return 0; |
return 0; |
| 823 |
} |
} |