mirror of https://github.com/xemu-project/xemu.git
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1 iQEcBAABAgAGBQJXcuu4AAoJEJykq7OBq3PIG0EH/0qjHztvJXFcOB/pMYt9fRoe /zEuqSaSQJYBNjRonp4jUslziJG7ULyrcqbW4BmIswQG3R8577z5vQdJ2XKSRoAf sUb4vVnBiTGdZPWPvO7pxuqgYSHoGGSsHFCuzs7gL+mOkJs3U8Uw+9DExAe80J/R C4ZU40A4EW/UUebrWeasW8DG5b0h6dFSnIKtSo6DcGbcGDHQS1FwM/atpFk58Zev lpS+T8Q1JEuIYK6RAa1Oc9KxeJO3OROen2HqlPDGCFl32t3k7lEmR77J4bNg/mDj XbYQZbVtDeIN02/o5GSAF4ros0UNZ/Ut9Z0YeWoCzBumu9ZK0iGbitgLG8w7psA= =gHyO -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stefanha/tags/tracing-pull-request' into staging # gpg: Signature made Tue 28 Jun 2016 22:27:20 BST # gpg: using RSA key 0x9CA4ABB381AB73C8 # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" # gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" # Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8 * remotes/stefanha/tags/tracing-pull-request: trace: [*-user] Add events to trace guest syscalls in syscall emulation mode trace: enable tracing in qemu-img qemu-img: move common options parsing before commands processing trace: enable tracing in qemu-nbd trace: enable tracing in qemu-io trace: move qemu_trace_opts to trace/control.c doc: move text describing --trace to specific .texi file doc: sync help description for --trace with man for qemu.1 Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
845d1e7e42
7
Makefile
7
Makefile
|
@ -564,8 +564,9 @@ qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
|
|||
perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
|
||||
$(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
|
||||
" GEN $@")
|
||||
qemu.1: qemu-option-trace.texi
|
||||
|
||||
qemu-img.1: qemu-img.texi qemu-img-cmds.texi
|
||||
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
|
||||
$(call quiet-command, \
|
||||
perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-img.pod && \
|
||||
$(POD2MAN) --section=1 --center=" " --release=" " qemu-img.pod > $@, \
|
||||
|
@ -577,7 +578,7 @@ fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
|
|||
$(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
|
||||
" GEN $@")
|
||||
|
||||
qemu-nbd.8: qemu-nbd.texi
|
||||
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
|
||||
$(call quiet-command, \
|
||||
perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
|
||||
$(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
|
||||
|
@ -595,7 +596,7 @@ info: qemu-doc.info qemu-tech.info
|
|||
pdf: qemu-doc.pdf qemu-tech.pdf
|
||||
|
||||
qemu-doc.dvi qemu-doc.html qemu-doc.info qemu-doc.pdf: \
|
||||
qemu-img.texi qemu-nbd.texi qemu-options.texi \
|
||||
qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
|
||||
qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
|
||||
qemu-monitor-info.texi
|
||||
|
||||
|
|
|
@ -315,12 +315,14 @@ abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1,
|
|||
abi_long arg5, abi_long arg6, abi_long arg7,
|
||||
abi_long arg8)
|
||||
{
|
||||
CPUState *cpu = ENV_GET_CPU(cpu_env);
|
||||
abi_long ret;
|
||||
void *p;
|
||||
|
||||
#ifdef DEBUG
|
||||
gemu_log("freebsd syscall %d\n", num);
|
||||
#endif
|
||||
trace_guest_user_syscall(cpu, num, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
|
||||
if(do_strace)
|
||||
print_freebsd_syscall(num, arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
|
||||
|
@ -400,6 +402,7 @@ abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1,
|
|||
#endif
|
||||
if (do_strace)
|
||||
print_freebsd_syscall_ret(num, ret);
|
||||
trace_guest_user_syscall_ret(cpu, num, ret);
|
||||
return ret;
|
||||
efault:
|
||||
ret = -TARGET_EFAULT;
|
||||
|
@ -410,12 +413,14 @@ abi_long do_netbsd_syscall(void *cpu_env, int num, abi_long arg1,
|
|||
abi_long arg2, abi_long arg3, abi_long arg4,
|
||||
abi_long arg5, abi_long arg6)
|
||||
{
|
||||
CPUState *cpu = ENV_GET_CPU(cpu_env);
|
||||
abi_long ret;
|
||||
void *p;
|
||||
|
||||
#ifdef DEBUG
|
||||
gemu_log("netbsd syscall %d\n", num);
|
||||
#endif
|
||||
trace_guest_user_syscall(cpu, num, arg1, arg2, arg3, arg4, arg5, arg6, 0, 0);
|
||||
if(do_strace)
|
||||
print_netbsd_syscall(num, arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
|
||||
|
@ -472,6 +477,7 @@ abi_long do_netbsd_syscall(void *cpu_env, int num, abi_long arg1,
|
|||
#endif
|
||||
if (do_strace)
|
||||
print_netbsd_syscall_ret(num, ret);
|
||||
trace_guest_user_syscall_ret(cpu, num, ret);
|
||||
return ret;
|
||||
efault:
|
||||
ret = -TARGET_EFAULT;
|
||||
|
@ -482,12 +488,14 @@ abi_long do_openbsd_syscall(void *cpu_env, int num, abi_long arg1,
|
|||
abi_long arg2, abi_long arg3, abi_long arg4,
|
||||
abi_long arg5, abi_long arg6)
|
||||
{
|
||||
CPUState *cpu = ENV_GET_CPU(cpu_env);
|
||||
abi_long ret;
|
||||
void *p;
|
||||
|
||||
#ifdef DEBUG
|
||||
gemu_log("openbsd syscall %d\n", num);
|
||||
#endif
|
||||
trace_guest_user_syscall(cpu, num, arg1, arg2, arg3, arg4, arg5, arg6, 0, 0);
|
||||
if(do_strace)
|
||||
print_openbsd_syscall(num, arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
|
||||
|
@ -544,6 +552,7 @@ abi_long do_openbsd_syscall(void *cpu_env, int num, abi_long arg1,
|
|||
#endif
|
||||
if (do_strace)
|
||||
print_openbsd_syscall_ret(num, ret);
|
||||
trace_guest_user_syscall_ret(cpu, num, ret);
|
||||
return ret;
|
||||
efault:
|
||||
ret = -TARGET_EFAULT;
|
||||
|
|
|
@ -6802,6 +6802,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|||
#ifdef DEBUG
|
||||
gemu_log("syscall %d", num);
|
||||
#endif
|
||||
trace_guest_user_syscall(cpu, num, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
|
||||
if(do_strace)
|
||||
print_syscall(num, arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
|
||||
|
@ -11245,6 +11246,7 @@ fail:
|
|||
#endif
|
||||
if(do_strace)
|
||||
print_syscall_ret(num, ret);
|
||||
trace_guest_user_syscall_ret(cpu, num, ret);
|
||||
return ret;
|
||||
efault:
|
||||
ret = -TARGET_EFAULT;
|
||||
|
|
58
qemu-img.c
58
qemu-img.c
|
@ -32,6 +32,7 @@
|
|||
#include "qemu/config-file.h"
|
||||
#include "qemu/option.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/log.h"
|
||||
#include "qom/object_interfaces.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "sysemu/block-backend.h"
|
||||
|
@ -39,6 +40,7 @@
|
|||
#include "block/blockjob.h"
|
||||
#include "block/qapi.h"
|
||||
#include "crypto/init.h"
|
||||
#include "trace/control.h"
|
||||
#include <getopt.h>
|
||||
|
||||
#define QEMU_IMG_VERSION "qemu-img version " QEMU_VERSION QEMU_PKGVERSION \
|
||||
|
@ -91,9 +93,14 @@ static void QEMU_NORETURN help(void)
|
|||
{
|
||||
const char *help_msg =
|
||||
QEMU_IMG_VERSION
|
||||
"usage: qemu-img command [command options]\n"
|
||||
"usage: qemu-img [standard options] command [command options]\n"
|
||||
"QEMU disk image utility\n"
|
||||
"\n"
|
||||
" '-h', '--help' display this help and exit\n"
|
||||
" '-V', '--version' output version information and exit\n"
|
||||
" '-T', '--trace' [[enable=]<pattern>][,events=<file>][,file=<file>]\n"
|
||||
" specify tracing options\n"
|
||||
"\n"
|
||||
"Command syntax:\n"
|
||||
#define DEF(option, callback, arg_string) \
|
||||
" " arg_string "\n"
|
||||
|
@ -3803,10 +3810,12 @@ int main(int argc, char **argv)
|
|||
const img_cmd_t *cmd;
|
||||
const char *cmdname;
|
||||
Error *local_error = NULL;
|
||||
char *trace_file = NULL;
|
||||
int c;
|
||||
static const struct option long_options[] = {
|
||||
{"help", no_argument, 0, 'h'},
|
||||
{"version", no_argument, 0, 'v'},
|
||||
{"version", no_argument, 0, 'V'},
|
||||
{"trace", required_argument, NULL, 'T'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
|
@ -3829,28 +3838,49 @@ int main(int argc, char **argv)
|
|||
if (argc < 2) {
|
||||
error_exit("Not enough arguments");
|
||||
}
|
||||
cmdname = argv[1];
|
||||
|
||||
qemu_add_opts(&qemu_object_opts);
|
||||
qemu_add_opts(&qemu_source_opts);
|
||||
qemu_add_opts(&qemu_trace_opts);
|
||||
|
||||
while ((c = getopt_long(argc, argv, "+hVT:", long_options, NULL)) != -1) {
|
||||
switch (c) {
|
||||
case 'h':
|
||||
help();
|
||||
return 0;
|
||||
case 'V':
|
||||
printf(QEMU_IMG_VERSION);
|
||||
return 0;
|
||||
case 'T':
|
||||
g_free(trace_file);
|
||||
trace_file = trace_opt_parse(optarg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cmdname = argv[optind];
|
||||
|
||||
/* reset getopt_long scanning */
|
||||
argc -= optind;
|
||||
if (argc < 1) {
|
||||
return 0;
|
||||
}
|
||||
argv += optind;
|
||||
optind = 1;
|
||||
|
||||
if (!trace_init_backends()) {
|
||||
exit(1);
|
||||
}
|
||||
trace_init_file(trace_file);
|
||||
qemu_set_log(LOG_TRACE);
|
||||
|
||||
/* find the command */
|
||||
for (cmd = img_cmds; cmd->name != NULL; cmd++) {
|
||||
if (!strcmp(cmdname, cmd->name)) {
|
||||
return cmd->handler(argc - 1, argv + 1);
|
||||
return cmd->handler(argc, argv);
|
||||
}
|
||||
}
|
||||
|
||||
c = getopt_long(argc, argv, "h", long_options, NULL);
|
||||
|
||||
if (c == 'h') {
|
||||
help();
|
||||
}
|
||||
if (c == 'v') {
|
||||
printf(QEMU_IMG_VERSION);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* not found */
|
||||
error_exit("Command not found: %s", cmdname);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@example
|
||||
@c man begin SYNOPSIS
|
||||
@command{qemu-img} @var{command} [@var{command} @var{options}]
|
||||
@command{qemu-img} [@var{standard} @var{options}] @var{command} [@var{command} @var{options}]
|
||||
@c man end
|
||||
@end example
|
||||
|
||||
|
@ -16,6 +16,17 @@ inconsistent state.
|
|||
|
||||
@c man begin OPTIONS
|
||||
|
||||
Standard options:
|
||||
@table @option
|
||||
@item -h, --help
|
||||
Display this help and exit
|
||||
@item -V, --version
|
||||
Display version information and exit
|
||||
@item -T, --trace [[enable=]@var{pattern}][,events=@var{file}][,file=@var{file}]
|
||||
@findex --trace
|
||||
@include qemu-option-trace.texi
|
||||
@end table
|
||||
|
||||
The following commands are supported:
|
||||
|
||||
@include qemu-img-cmds.texi
|
||||
|
|
18
qemu-io.c
18
qemu-io.c
|
@ -18,6 +18,7 @@
|
|||
#include "qemu/option.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "qemu/readline.h"
|
||||
#include "qemu/log.h"
|
||||
#include "qapi/qmp/qstring.h"
|
||||
#include "qom/object_interfaces.h"
|
||||
#include "sysemu/block-backend.h"
|
||||
|
@ -253,7 +254,9 @@ static void usage(const char *name)
|
|||
" -k, --native-aio use kernel AIO implementation (on Linux only)\n"
|
||||
" -t, --cache=MODE use the given cache mode for the image\n"
|
||||
" -d, --discard=MODE use the given discard mode for the image\n"
|
||||
" -T, --trace FILE enable trace events listed in the given file\n"
|
||||
" -T, --trace [[enable=]<pattern>][,events=<file>][,file=<file>]\n"
|
||||
" specify tracing options\n"
|
||||
" see qemu-img(1) man page for full description\n"
|
||||
" -h, --help display this help and exit\n"
|
||||
" -V, --version output version information and exit\n"
|
||||
"\n"
|
||||
|
@ -458,6 +461,7 @@ int main(int argc, char **argv)
|
|||
Error *local_error = NULL;
|
||||
QDict *opts = NULL;
|
||||
const char *format = NULL;
|
||||
char *trace_file = NULL;
|
||||
|
||||
#ifdef CONFIG_POSIX
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
|
@ -470,6 +474,7 @@ int main(int argc, char **argv)
|
|||
|
||||
module_call_init(MODULE_INIT_QOM);
|
||||
qemu_add_opts(&qemu_object_opts);
|
||||
qemu_add_opts(&qemu_trace_opts);
|
||||
bdrv_init();
|
||||
|
||||
while ((c = getopt_long(argc, argv, sopt, lopt, &opt_index)) != -1) {
|
||||
|
@ -509,9 +514,8 @@ int main(int argc, char **argv)
|
|||
}
|
||||
break;
|
||||
case 'T':
|
||||
if (!trace_init_backends()) {
|
||||
exit(1); /* error message will have been printed */
|
||||
}
|
||||
g_free(trace_file);
|
||||
trace_file = trace_opt_parse(optarg);
|
||||
break;
|
||||
case 'V':
|
||||
printf("%s version %s\n", progname, QEMU_VERSION);
|
||||
|
@ -557,6 +561,12 @@ int main(int argc, char **argv)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
if (!trace_init_backends()) {
|
||||
exit(1);
|
||||
}
|
||||
trace_init_file(trace_file);
|
||||
qemu_set_log(LOG_TRACE);
|
||||
|
||||
/* initialize commands */
|
||||
qemuio_add_command(&quit_cmd);
|
||||
qemuio_add_command(&open_cmd);
|
||||
|
|
19
qemu-nbd.c
19
qemu-nbd.c
|
@ -27,12 +27,14 @@
|
|||
#include "qemu/error-report.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "qemu/bswap.h"
|
||||
#include "qemu/log.h"
|
||||
#include "block/snapshot.h"
|
||||
#include "qapi/util.h"
|
||||
#include "qapi/qmp/qstring.h"
|
||||
#include "qom/object_interfaces.h"
|
||||
#include "io/channel-socket.h"
|
||||
#include "crypto/init.h"
|
||||
#include "trace/control.h"
|
||||
|
||||
#include <getopt.h>
|
||||
#include <libgen.h>
|
||||
|
@ -88,6 +90,8 @@ static void usage(const char *name)
|
|||
"General purpose options:\n"
|
||||
" --object type,id=ID,... define an object such as 'secret' for providing\n"
|
||||
" passwords and/or encryption keys\n"
|
||||
" -T, --trace [[enable=]<pattern>][,events=<file>][,file=<file>]\n"
|
||||
" specify tracing options\n"
|
||||
#ifdef __linux__
|
||||
"Kernel NBD client support:\n"
|
||||
" -c, --connect=DEV connect FILE to the local NBD device DEV\n"
|
||||
|
@ -470,7 +474,7 @@ int main(int argc, char **argv)
|
|||
off_t fd_size;
|
||||
QemuOpts *sn_opts = NULL;
|
||||
const char *sn_id_or_name = NULL;
|
||||
const char *sopt = "hVb:o:p:rsnP:c:dvk:e:f:tl:x:";
|
||||
const char *sopt = "hVb:o:p:rsnP:c:dvk:e:f:tl:x:T:";
|
||||
struct option lopt[] = {
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "version", no_argument, NULL, 'V' },
|
||||
|
@ -498,6 +502,7 @@ int main(int argc, char **argv)
|
|||
{ "export-name", required_argument, NULL, 'x' },
|
||||
{ "tls-creds", required_argument, NULL, QEMU_NBD_OPT_TLSCREDS },
|
||||
{ "image-opts", no_argument, NULL, QEMU_NBD_OPT_IMAGE_OPTS },
|
||||
{ "trace", required_argument, NULL, 'T' },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
int ch;
|
||||
|
@ -518,6 +523,7 @@ int main(int argc, char **argv)
|
|||
const char *tlscredsid = NULL;
|
||||
bool imageOpts = false;
|
||||
bool writethrough = true;
|
||||
char *trace_file = NULL;
|
||||
|
||||
/* The client thread uses SIGTERM to interrupt the server. A signal
|
||||
* handler ensures that "qemu-nbd -v -c" exits with a nice status code.
|
||||
|
@ -531,6 +537,7 @@ int main(int argc, char **argv)
|
|||
|
||||
module_call_init(MODULE_INIT_QOM);
|
||||
qemu_add_opts(&qemu_object_opts);
|
||||
qemu_add_opts(&qemu_trace_opts);
|
||||
qemu_init_exec_dir(argv[0]);
|
||||
|
||||
while ((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) {
|
||||
|
@ -703,6 +710,10 @@ int main(int argc, char **argv)
|
|||
case QEMU_NBD_OPT_IMAGE_OPTS:
|
||||
imageOpts = true;
|
||||
break;
|
||||
case 'T':
|
||||
g_free(trace_file);
|
||||
trace_file = trace_opt_parse(optarg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -718,6 +729,12 @@ int main(int argc, char **argv)
|
|||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (!trace_init_backends()) {
|
||||
exit(1);
|
||||
}
|
||||
trace_init_file(trace_file);
|
||||
qemu_set_log(LOG_TRACE);
|
||||
|
||||
if (tlscredsid) {
|
||||
if (sockpath) {
|
||||
error_report("TLS is only supported with IPv4/IPv6");
|
||||
|
|
|
@ -92,6 +92,9 @@ Display extra debugging information
|
|||
Display this help and exit
|
||||
@item -V, --version
|
||||
Display version information and exit
|
||||
@item -T, --trace [[enable=]@var{pattern}][,events=@var{file}][,file=@var{file}]
|
||||
@findex --trace
|
||||
@include qemu-option-trace.texi
|
||||
@end table
|
||||
|
||||
@c man end
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
Specify tracing options.
|
||||
|
||||
@table @option
|
||||
@item [enable=]@var{pattern}
|
||||
Immediately enable events matching @var{pattern}.
|
||||
The file must contain one event name (as listed in the @file{trace-events-all}
|
||||
file) per line; globbing patterns are accepted too. This option is only
|
||||
available if QEMU has been compiled with the @var{simple}, @var{stderr}
|
||||
or @var{ftrace} tracing backend. To specify multiple events or patterns,
|
||||
specify the @option{-trace} option multiple times.
|
||||
|
||||
Use @code{-trace help} to print a list of names of trace points.
|
||||
|
||||
@item events=@var{file}
|
||||
Immediately enable events listed in @var{file}.
|
||||
The file must contain one event name (as listed in the @file{trace-events-all}
|
||||
file) per line; globbing patterns are accepted too. This option is only
|
||||
available if QEMU has been compiled with the @var{simple}, @var{stderr} or
|
||||
@var{ftrace} tracing backend.
|
||||
|
||||
@item file=@var{file}
|
||||
Log output traces to @var{file}.
|
||||
This option is only available if QEMU has been compiled with
|
||||
the @var{simple} tracing backend.
|
||||
@end table
|
|
@ -3669,34 +3669,9 @@ DEF("trace", HAS_ARG, QEMU_OPTION_trace,
|
|||
STEXI
|
||||
HXCOMM This line is not accurate, as some sub-options are backend-specific but
|
||||
HXCOMM HX does not support conditional compilation of text.
|
||||
@item -trace [events=@var{file}][,file=@var{file}]
|
||||
@item -trace [[enable=]@var{pattern}][,events=@var{file}][,file=@var{file}]
|
||||
@findex -trace
|
||||
|
||||
Specify tracing options.
|
||||
|
||||
@table @option
|
||||
@item [enable=]@var{pattern}
|
||||
Immediately enable events matching @var{pattern}.
|
||||
The file must contain one event name (as listed in the @file{trace-events-all}
|
||||
file) per line; globbing patterns are accepted too. This option is only
|
||||
available if QEMU has been compiled with the @var{simple}, @var{stderr}
|
||||
or @var{ftrace} tracing backend. To specify multiple events or patterns,
|
||||
specify the @option{-trace} option multiple times.
|
||||
|
||||
Use @code{-trace help} to print a list of names of trace points.
|
||||
|
||||
@item events=@var{file}
|
||||
Immediately enable events listed in @var{file}.
|
||||
The file must contain one event name (as listed in the @file{trace-events-all}
|
||||
file) per line; globbing patterns are accepted too. This option is only
|
||||
available if QEMU has been compiled with the @var{simple}, @var{stderr} or
|
||||
@var{ftrace} tracing backend.
|
||||
|
||||
@item file=@var{file}
|
||||
Log output traces to @var{file}.
|
||||
This option is only available if QEMU has been compiled with
|
||||
the @var{simple} tracing backend.
|
||||
@end table
|
||||
@include qemu-option-trace.texi
|
||||
ETEXI
|
||||
|
||||
HXCOMM Internal use
|
||||
|
|
16
trace-events
16
trace-events
|
@ -156,3 +156,19 @@ memory_region_tb_write(int cpu_index, uint64_t addr, uint64_t value, unsigned si
|
|||
#
|
||||
# Targets: TCG(all)
|
||||
disable vcpu tcg guest_mem_before(TCGv vaddr, uint8_t info) "info=%d", "vaddr=0x%016"PRIx64" info=%d"
|
||||
|
||||
# @num: System call number.
|
||||
# @arg*: System call argument value.
|
||||
#
|
||||
# Start executing a guest system call in syscall emulation mode.
|
||||
#
|
||||
# Targets: TCG(all)
|
||||
disable vcpu guest_user_syscall(uint64_t num, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4, uint64_t arg5, uint64_t arg6, uint64_t arg7, uint64_t arg8) "num=0x%016"PRIx64" arg1=0x%016"PRIx64" arg2=0x%016"PRIx64" arg3=0x%016"PRIx64" arg4=0x%016"PRIx64" arg5=0x%016"PRIx64" arg6=0x%016"PRIx64" arg7=0x%016"PRIx64" arg8=0x%016"PRIx64
|
||||
|
||||
# @num: System call number.
|
||||
# @ret: System call result value.
|
||||
#
|
||||
# Finish executing a guest system call in syscall emulation mode.
|
||||
#
|
||||
# Targets: TCG(all)
|
||||
disable vcpu guest_user_syscall_ret(uint64_t num, uint64_t ret) "num=0x%016"PRIx64" ret=0x%016"PRIx64
|
||||
|
|
|
@ -21,11 +21,33 @@
|
|||
#endif
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "monitor/monitor.h"
|
||||
|
||||
int trace_events_enabled_count;
|
||||
bool trace_events_dstate[TRACE_EVENT_COUNT];
|
||||
|
||||
QemuOptsList qemu_trace_opts = {
|
||||
.name = "trace",
|
||||
.implied_opt_name = "enable",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "enable",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{
|
||||
.name = "events",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
TraceEvent *trace_event_name(const char *name)
|
||||
{
|
||||
assert(name != NULL);
|
||||
|
@ -142,7 +164,7 @@ void trace_enable_events(const char *line_buf)
|
|||
}
|
||||
}
|
||||
|
||||
void trace_init_events(const char *fname)
|
||||
static void trace_init_events(const char *fname)
|
||||
{
|
||||
Location loc;
|
||||
FILE *fp;
|
||||
|
@ -217,3 +239,21 @@ bool trace_init_backends(void)
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
char *trace_opt_parse(const char *optarg)
|
||||
{
|
||||
char *trace_file;
|
||||
QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("trace"),
|
||||
optarg, true);
|
||||
if (!opts) {
|
||||
exit(1);
|
||||
}
|
||||
if (qemu_opt_get(opts, "enable")) {
|
||||
trace_enable_events(qemu_opt_get(opts, "enable"));
|
||||
}
|
||||
trace_init_events(qemu_opt_get(opts, "events"));
|
||||
trace_file = g_strdup(qemu_opt_get(opts, "file"));
|
||||
qemu_opts_del(opts);
|
||||
|
||||
return trace_file;
|
||||
}
|
||||
|
|
|
@ -159,17 +159,6 @@ static void trace_event_set_state_dynamic(TraceEvent *ev, bool state);
|
|||
*/
|
||||
bool trace_init_backends(void);
|
||||
|
||||
/**
|
||||
* trace_init_events:
|
||||
* @events: Name of file with events to be enabled at startup; may be NULL.
|
||||
* Corresponds to commandline option "-trace events=...".
|
||||
*
|
||||
* Read the list of enabled tracing events.
|
||||
*
|
||||
* Returns: Whether the backends could be successfully initialized.
|
||||
*/
|
||||
void trace_init_events(const char *file);
|
||||
|
||||
/**
|
||||
* trace_init_file:
|
||||
* @file: Name of trace output file; may be NULL.
|
||||
|
@ -197,6 +186,20 @@ void trace_list_events(void);
|
|||
*/
|
||||
void trace_enable_events(const char *line_buf);
|
||||
|
||||
/**
|
||||
* Definition of QEMU options describing trace subsystem configuration
|
||||
*/
|
||||
extern QemuOptsList qemu_trace_opts;
|
||||
|
||||
/**
|
||||
* trace_opt_parse:
|
||||
* @optarg: A string argument of --trace command line argument
|
||||
*
|
||||
* Initialize tracing subsystem.
|
||||
*
|
||||
* Returns the filename to save trace to. It must be freed with g_free().
|
||||
*/
|
||||
char *trace_opt_parse(const char *optarg);
|
||||
|
||||
#include "trace/control-internal.h"
|
||||
|
||||
|
|
38
vl.c
38
vl.c
|
@ -262,26 +262,6 @@ static QemuOptsList qemu_sandbox_opts = {
|
|||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_trace_opts = {
|
||||
.name = "trace",
|
||||
.implied_opt_name = "enable",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "enable",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{
|
||||
.name = "events",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_option_rom_opts = {
|
||||
.name = "option-rom",
|
||||
.implied_opt_name = "romfile",
|
||||
|
@ -3864,23 +3844,9 @@ int main(int argc, char **argv, char **envp)
|
|||
xen_mode = XEN_ATTACH;
|
||||
break;
|
||||
case QEMU_OPTION_trace:
|
||||
{
|
||||
opts = qemu_opts_parse_noisily(qemu_find_opts("trace"),
|
||||
optarg, true);
|
||||
if (!opts) {
|
||||
exit(1);
|
||||
}
|
||||
if (qemu_opt_get(opts, "enable")) {
|
||||
trace_enable_events(qemu_opt_get(opts, "enable"));
|
||||
}
|
||||
trace_init_events(qemu_opt_get(opts, "events"));
|
||||
if (trace_file) {
|
||||
g_free(trace_file);
|
||||
}
|
||||
trace_file = g_strdup(qemu_opt_get(opts, "file"));
|
||||
qemu_opts_del(opts);
|
||||
g_free(trace_file);
|
||||
trace_file = trace_opt_parse(optarg);
|
||||
break;
|
||||
}
|
||||
case QEMU_OPTION_readconfig:
|
||||
{
|
||||
int ret = qemu_read_config_file(optarg);
|
||||
|
|
Loading…
Reference in New Issue