We introduce a new command line option. It's a generic option to customize the gdb server:
-gdb-opts [attached=on|off] The only parameter for now is "attached". Signed-off-by: Fabien Chouteau <chout...@adacore.com> --- gdbstub.c | 28 +++++++++++++++++++++++++++- include/exec/gdbstub.h | 2 ++ qemu-options.hx | 17 +++++++++++++++++ vl.c | 3 +++ 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/gdbstub.c b/gdbstub.c index 0e94311..ee57124 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -32,7 +32,6 @@ #include "monitor/monitor.h" #include "char/char.h" #include "sysemu/sysemu.h" -#include "exec/gdbstub.h" #endif #define MAX_PACKET_LENGTH 4096 @@ -41,6 +40,7 @@ #include "qemu/sockets.h" #include "sysemu/kvm.h" #include "qemu/bitops.h" +#include "exec/gdbstub.h" #ifdef CONFIG_USER_ONLY static bool gdb_attached; /* false */ @@ -3063,3 +3063,29 @@ int gdbserver_start(const char *device) return 0; } #endif + +static QemuOptsList qemu_gdb_opts = { + .name = "gdb", + .head = QTAILQ_HEAD_INITIALIZER(qemu_gdb_opts.head), + .desc = { + { + .name = "attached", + .type = QEMU_OPT_BOOL, + }, + { /* end of list */ } + }, +}; + +void gdb_set_opts(const char *opts_str) +{ + QemuOpts *opts; + + opts = qemu_opts_parse(&qemu_gdb_opts, opts_str, 0); + if (!opts) { + exit(1); + } + + gdb_attached = qemu_opt_get_bool(opts, "attached", gdb_attached); + + qemu_opts_del(opts); +} diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index ba20afa..86fc18b 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -50,4 +50,6 @@ int gdbserver_start(const char *port); /* in gdbstub-xml.c, generated by scripts/feature_to_c.sh */ extern const char *const xml_builtin[][2]; +void gdb_set_opts(const char *opts_str); + #endif diff --git a/qemu-options.hx b/qemu-options.hx index cd76f2a..49a480f 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2505,6 +2505,23 @@ within gdb and establish the connection via a pipe: @end example ETEXI +DEF("gdb-opts", HAS_ARG, QEMU_OPTION_gdb_opts, \ + "-gdb-opts attached=on|off\n"\ + " options for the gdb remote server\n", QEMU_ARCH_ALL) +STEXI +@item -gdb-opts @var{dev} +@findex -gdb-opts +Set options for the gdb remote server: +@table @option +@item attached=on|off: + +When 'on' (default), gdb sends a 'detach' command at the end of debugging +session, otherwise gdb sends a 'kill' command. + +@end table + +ETEXI + DEF("s", 0, QEMU_OPTION_s, \ "-s shorthand for -gdb tcp::" DEFAULT_GDBSTUB_PORT "\n", QEMU_ARCH_ALL) diff --git a/vl.c b/vl.c index 154f7ba..cce96b6 100644 --- a/vl.c +++ b/vl.c @@ -3251,6 +3251,9 @@ int main(int argc, char **argv, char **envp) case QEMU_OPTION_gdb: add_device_config(DEV_GDB, optarg); break; + case QEMU_OPTION_gdb_opts: + gdb_set_opts(optarg); + break; case QEMU_OPTION_L: data_dir = optarg; break; -- 1.7.9.5