From c636bb66cc9043032caf20cb067bf9c818b7d17e Mon Sep 17 00:00:00 2001 From: bellard Date: Mon, 5 Feb 2007 20:46:05 +0000 Subject: [PATCH] gdbserver fix git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2393 c046a42c-6fe2-441c-8c8c-71466251a162 --- gdbstub.c | 14 ++++++++++++++ gdbstub.h | 1 + monitor.c | 2 +- vl.c | 23 ++++++++--------------- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index a26c12ca6..aeddc3474 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1234,4 +1234,18 @@ int gdbserver_start(CharDriverState *chr) qemu_add_vm_stop_handler(gdb_vm_stopped, s); return 0; } + +int gdbserver_start_port(int port) +{ + CharDriverState *chr; + char gdbstub_port_name[128]; + + snprintf(gdbstub_port_name, sizeof(gdbstub_port_name), + "tcp::%d,nowait,nodelay,server", port); + chr = qemu_chr_open(gdbstub_port_name); + if (!chr) + return -EIO; + return gdbserver_start(chr); +} + #endif diff --git a/gdbstub.h b/gdbstub.h index c5b52c2e2..41ffc6d08 100644 --- a/gdbstub.h +++ b/gdbstub.h @@ -14,6 +14,7 @@ void gdb_exit(CPUState *, int); int gdbserver_start(int); #else int gdbserver_start(CharDriverState *chr); +int gdbserver_start_port(int port); #endif #endif diff --git a/monitor.c b/monitor.c index 33c482b09..1e9b904bf 100644 --- a/monitor.c +++ b/monitor.c @@ -423,7 +423,7 @@ static void do_gdbserver(int has_port, int port) { if (!has_port) port = DEFAULT_GDBSTUB_PORT; - if (gdbserver_start(port) < 0) { + if (gdbserver_start_port(port) < 0) { qemu_printf("Could not open gdbserver socket on port %d\n", port); } else { qemu_printf("Waiting gdb connection on port %d\n", port); diff --git a/vl.c b/vl.c index c05def228..1757036c0 100644 --- a/vl.c +++ b/vl.c @@ -6499,8 +6499,7 @@ static BOOL WINAPI qemu_ctrl_handler(DWORD type) int main(int argc, char **argv) { #ifdef CONFIG_GDBSTUB - int use_gdbstub; - char gdbstub_port_name[128]; + int use_gdbstub, gdbstub_port; #endif int i, cdrom_index; int snapshot, linux_boot; @@ -6568,7 +6567,7 @@ int main(int argc, char **argv) bios_size = BIOS_SIZE; #ifdef CONFIG_GDBSTUB use_gdbstub = 0; - sprintf(gdbstub_port_name, "%d", DEFAULT_GDBSTUB_PORT); + gdbstub_port = DEFAULT_GDBSTUB_PORT; #endif snapshot = 0; nographic = 0; @@ -6812,7 +6811,7 @@ int main(int argc, char **argv) use_gdbstub = 1; break; case QEMU_OPTION_p: - pstrcpy(gdbstub_port_name, sizeof(gdbstub_port_name), optarg); + gdbstub_port = atoi(optarg); break; #endif case QEMU_OPTION_L: @@ -7220,19 +7219,13 @@ int main(int argc, char **argv) #ifdef CONFIG_GDBSTUB if (use_gdbstub) { - CharDriverState *chr; - int port; - - port = atoi(gdbstub_port_name); - if (port != 0) - sprintf(gdbstub_port_name, "tcp::%d,nowait,nodelay,server", port); - chr = qemu_chr_open(gdbstub_port_name); - if (!chr) { - fprintf(stderr, "qemu: could not open gdbstub device '%s'\n", - gdbstub_port_name); + /* XXX: use standard host:port notation and modify options + accordingly. */ + if (gdbserver_start_port(gdbstub_port) < 0) { + fprintf(stderr, "qemu: could not open gdbstub device on port '%d'\n", + gdbstub_port); exit(1); } - gdbserver_start(chr); } else #endif if (loadvm) -- 2.39.2