trace: Add trace file name command-line option

This patch adds an optional command line switch '-trace' to specify the
filename to write traces to, when qemu starts.
Eg, If compiled with the 'simple' trace backend,
[temp@system]$ qemu -trace FILENAME IMAGE
Allows the binary traces to be written to FILENAME instead of the option
set at config-time.

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
This commit is contained in:
Prerna Saxena 2010-08-09 11:48:32 +01:00 committed by Anthony Liguori
parent c5ceb523fa
commit ab6540d55e
3 changed files with 50 additions and 0 deletions

View File

@ -288,6 +288,21 @@ static QemuOptsList qemu_mon_opts = {
}, },
}; };
#ifdef CONFIG_SIMPLE_TRACE
static QemuOptsList qemu_trace_opts = {
.name = "trace",
.implied_opt_name = "trace",
.head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head),
.desc = {
{
.name = "file",
.type = QEMU_OPT_STRING,
},
{ /* end if list */ }
},
};
#endif
static QemuOptsList qemu_cpudef_opts = { static QemuOptsList qemu_cpudef_opts = {
.name = "cpudef", .name = "cpudef",
.head = QTAILQ_HEAD_INITIALIZER(qemu_cpudef_opts.head), .head = QTAILQ_HEAD_INITIALIZER(qemu_cpudef_opts.head),
@ -346,6 +361,9 @@ static QemuOptsList *vm_config_groups[32] = {
&qemu_global_opts, &qemu_global_opts,
&qemu_mon_opts, &qemu_mon_opts,
&qemu_cpudef_opts, &qemu_cpudef_opts,
#ifdef CONFIG_SIMPLE_TRACE
&qemu_trace_opts,
#endif
NULL, NULL,
}; };

View File

@ -2230,6 +2230,17 @@ Normally QEMU loads a configuration file from @var{sysconfdir}/qemu.conf and
@var{sysconfdir}/target-@var{ARCH}.conf on startup. The @code{-nodefconfig} @var{sysconfdir}/target-@var{ARCH}.conf on startup. The @code{-nodefconfig}
option will prevent QEMU from loading these configuration files at startup. option will prevent QEMU from loading these configuration files at startup.
ETEXI ETEXI
#ifdef CONFIG_SIMPLE_TRACE
DEF("trace", HAS_ARG, QEMU_OPTION_trace,
"-trace\n"
" Specify a trace file to log traces to\n",
QEMU_ARCH_ALL)
STEXI
@item -trace
@findex -trace
Specify a trace file to log output traces to.
ETEXI
#endif
HXCOMM This is the last statement. Insert new options before this line! HXCOMM This is the last statement. Insert new options before this line!
STEXI STEXI

21
vl.c
View File

@ -47,6 +47,10 @@
#include <dirent.h> #include <dirent.h>
#include <netdb.h> #include <netdb.h>
#include <sys/select.h> #include <sys/select.h>
#ifdef CONFIG_SIMPLE_TRACE
#include "trace.h"
#endif
#ifdef CONFIG_BSD #ifdef CONFIG_BSD
#include <sys/stat.h> #include <sys/stat.h>
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
@ -1823,6 +1827,9 @@ int main(int argc, char **argv, char **envp)
int show_vnc_port = 0; int show_vnc_port = 0;
int defconfig = 1; int defconfig = 1;
#ifdef CONFIG_SIMPLE_TRACE
const char *trace_file = NULL;
#endif
atexit(qemu_run_exit_notifiers); atexit(qemu_run_exit_notifiers);
error_set_progname(argv[0]); error_set_progname(argv[0]);
@ -2595,6 +2602,14 @@ int main(int argc, char **argv, char **envp)
} }
xen_mode = XEN_ATTACH; xen_mode = XEN_ATTACH;
break; break;
#ifdef CONFIG_SIMPLE_TRACE
case QEMU_OPTION_trace:
opts = qemu_opts_parse(qemu_find_opts("trace"), optarg, 0);
if (opts) {
trace_file = qemu_opt_get(opts, "file");
}
break;
#endif
case QEMU_OPTION_readconfig: case QEMU_OPTION_readconfig:
{ {
int ret = qemu_read_config_file(optarg); int ret = qemu_read_config_file(optarg);
@ -2638,6 +2653,12 @@ int main(int argc, char **argv, char **envp)
data_dir = CONFIG_QEMU_DATADIR; data_dir = CONFIG_QEMU_DATADIR;
} }
#ifdef CONFIG_SIMPLE_TRACE
/*
* Set the trace file name, if specified.
*/
st_set_trace_file(trace_file);
#endif
/* /*
* Default to max_cpus = smp_cpus, in case the user doesn't * Default to max_cpus = smp_cpus, in case the user doesn't
* specify a max_cpus value. * specify a max_cpus value.