aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdbstub.c14
-rw-r--r--gdbstub.h1
-rw-r--r--monitor.c2
-rw-r--r--vl.c23
4 files changed, 24 insertions, 16 deletions
diff --git a/gdbstub.c b/gdbstub.c
index a26c12ca6e..aeddc34745 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 c5b52c2e22..41ffc6d089 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 33c482b090..1e9b904bf5 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 c05def228e..1757036c05 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)