From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LjtfB-0007ZG-Em for qemu-devel@nongnu.org; Wed, 18 Mar 2009 07:10:21 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Ljtf6-0007UR-Nf for qemu-devel@nongnu.org; Wed, 18 Mar 2009 07:10:20 -0400 Received: from [199.232.76.173] (port=36756 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ljtf6-0007TS-Ir for qemu-devel@nongnu.org; Wed, 18 Mar 2009 07:10:16 -0400 Received: from lizzard.sbs.de ([194.138.37.39]:24686) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Ljtf4-0005w4-Rx for qemu-devel@nongnu.org; Wed, 18 Mar 2009 07:10:15 -0400 Received: from mail2.sbs.de (localhost [127.0.0.1]) by lizzard.sbs.de (8.12.11.20060308/8.12.11) with ESMTP id n2IBABWi002887 for ; Wed, 18 Mar 2009 12:10:11 +0100 Received: from [139.25.109.167] (mchn012c.mchp.siemens.de [139.25.109.167] (may be forged)) by mail2.sbs.de (8.12.11.20060308/8.12.11) with ESMTP id n2IBABLO002641 for ; Wed, 18 Mar 2009 12:10:11 +0100 Message-ID: <49C0D693.2030301@siemens.com> Date: Wed, 18 Mar 2009 12:10:11 +0100 From: Jan Kiszka MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH 2/2] gdbstub: Rework configuration via command line and monitor Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel Introduce a more powerful gdbstub configuration (system emulation olny) via new switch '-gdb dev'. Keep '-s' as shorthand for '-gdb tcp::1234'. Use the same syntax also for the corresponding monitor command 'gdbserver'. Its default also remains to listen on port 1234. Signed-off-by: Jan Kiszka --- gdbstub.c | 25 +++++++++++-------------- monitor.c | 19 ++++++++++--------- vl.c | 33 ++++++++++++--------------------- 3 files changed, 33 insertions(+), 44 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index e8ceaae..b6d41bb 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2395,27 +2395,24 @@ static int gdb_monitor_write(CharDriverState *chr, const uint8_t *buf, int len) return len; } -int gdbserver_start(const char *port) +int gdbserver_start(const char *device) { GDBState *s; - char gdbstub_port_name[128]; - int port_num; - char *p; + char gdbstub_device_name[128]; CharDriverState *chr = NULL; CharDriverState *mon_chr; - if (!port || !*port) - return -1; - if (strcmp(port, "none") != 0) { - port_num = strtol(port, &p, 10); - if (*p == 0) { - /* A numeric value is interpreted as a port number. */ - snprintf(gdbstub_port_name, sizeof(gdbstub_port_name), - "tcp::%d,nowait,nodelay,server", port_num); - port = gdbstub_port_name; + if (!device) + return -1; + if (strcmp(device, "none") != 0) { + if (strstart(device, "tcp:", NULL)) { + /* enforce required TCP attributes */ + snprintf(gdbstub_device_name, sizeof(gdbstub_device_name), + "%s,nowait,nodelay,server", device); + device = gdbstub_device_name; } - chr = qemu_chr_open("gdb", port, NULL); + chr = qemu_chr_open("gdb", device, NULL); if (!chr) return -1; diff --git a/monitor.c b/monitor.c index c6fe968..75c8663 100644 --- a/monitor.c +++ b/monitor.c @@ -570,17 +570,18 @@ static void encrypted_bdrv_it(void *opaque, BlockDriverState *bs) } #ifdef CONFIG_GDBSTUB -static void do_gdbserver(Monitor *mon, const char *port) -{ - if (!port) - port = DEFAULT_GDBSTUB_PORT; - if (gdbserver_start(port) < 0) { - monitor_printf(mon, "Could not open gdbserver socket on port '%s'\n", - port); - } else if (strcmp(port, "none") == 0) { +static void do_gdbserver(Monitor *mon, const char *device) +{ + if (!device) + device = "tcp::" DEFAULT_GDBSTUB_PORT; + if (gdbserver_start(device) < 0) { + monitor_printf(mon, "Could not open gdbserver on device '%s'\n", + device); + } else if (strcmp(device, "none") == 0) { monitor_printf(mon, "Disabled gdbserver\n"); } else { - monitor_printf(mon, "Waiting gdb connection on port '%s'\n", port); + monitor_printf(mon, "Waiting for gdb connection on device '%s'\n", + device); } } #endif diff --git a/vl.c b/vl.c index b62a2d4..d5c9e02 100644 --- a/vl.c +++ b/vl.c @@ -4073,8 +4073,8 @@ static void help(int exitcode) "-monitor dev redirect the monitor to char device 'dev'\n" "-pidfile file write PID to 'file'\n" "-S freeze CPU at startup (use 'c' to start execution)\n" - "-s wait gdb connection to port\n" - "-p port set gdb connection port [default=%s]\n" + "-gdb dev wait for gdb connection on 'dev'\n" + "-s shorthand for -gdb tcp::%s\n" "-d item1,... output log to %s (use -d ? for a list of log items)\n" "-hdachs c,h,s[,t]\n" " force hard disk 0 physical geometry and the optional BIOS\n" @@ -4214,7 +4214,7 @@ enum { QEMU_OPTION_pidfile, QEMU_OPTION_S, QEMU_OPTION_s, - QEMU_OPTION_p, + QEMU_OPTION_gdb, QEMU_OPTION_d, QEMU_OPTION_hdachs, QEMU_OPTION_L, @@ -4336,7 +4336,7 @@ static const QEMUOption qemu_options[] = { { "pidfile", HAS_ARG, QEMU_OPTION_pidfile }, { "S", 0, QEMU_OPTION_S }, { "s", 0, QEMU_OPTION_s }, - { "p", HAS_ARG, QEMU_OPTION_p }, + { "gdb", HAS_ARG, QEMU_OPTION_gdb }, { "d", HAS_ARG, QEMU_OPTION_d }, { "hdachs", HAS_ARG, QEMU_OPTION_hdachs }, { "L", HAS_ARG, QEMU_OPTION_L }, @@ -4607,8 +4607,7 @@ static void termsig_setup(void) int main(int argc, char **argv, char **envp) { #ifdef CONFIG_GDBSTUB - int use_gdbstub; - const char *gdbstub_port; + const char *gdbstub_dev = NULL; #endif uint32_t boot_devices_bitmap = 0; int i; @@ -4687,10 +4686,6 @@ int main(int argc, char **argv, char **envp) initrd_filename = NULL; ram_size = 0; vga_ram_size = VGA_RAM_SIZE; -#ifdef CONFIG_GDBSTUB - use_gdbstub = 0; - gdbstub_port = DEFAULT_GDBSTUB_PORT; -#endif snapshot = 0; nographic = 0; curses = 0; @@ -5023,10 +5018,10 @@ int main(int argc, char **argv, char **envp) break; #ifdef CONFIG_GDBSTUB case QEMU_OPTION_s: - use_gdbstub = 1; + gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT; break; - case QEMU_OPTION_p: - gdbstub_port = optarg; + case QEMU_OPTION_gdb: + gdbstub_dev = optarg; break; #endif case QEMU_OPTION_L: @@ -5731,14 +5726,10 @@ int main(int argc, char **argv, char **envp) } #ifdef CONFIG_GDBSTUB - if (use_gdbstub) { - /* XXX: use standard host:port notation and modify options - accordingly. */ - if (gdbserver_start(gdbstub_port) < 0) { - fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n", - gdbstub_port); - exit(1); - } + if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) { + fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n", + gdbstub_dev); + exit(1); } #endif