@example
@c man begin SYNOPSIS
@command{qemu-trace-stap} @var{GLOBAL-OPTIONS} @var{COMMAND} @var{COMMAND-OPTIONS} @var{ARGS...}
@c man end
@end example

@c man begin DESCRIPTION

The @command{qemu-trace-stap} program facilitates tracing of the execution
of QEMU emulators using SystemTap.

It is required to have the SystemTap runtime environment installed to use
this program, since it is a wrapper around execution of the @command{stap}
program.

@c man end

@c man begin OPTIONS

The following global options may be used regardless of which command
is executed:

@table @option
@item @var{--verbose}, @var{-v}

Display verbose information about command execution.

@end table

The following commands are valid:

@table @option

@item @var{list} @var{BINARY} @var{PATTERN...}

List all the probe names provided by @var{BINARY} that match
@var{PATTERN}.

If @var{BINARY} is not an absolute path, it will be located by searching
the directories listed in the @code{$PATH} environment variable.

@var{PATTERN} is a plain string that is used to filter the results of
this command. It may optionally contain a @code{*} wildcard to facilitate
matching multiple probes without listing each one explicitly. Multiple
@var{PATTERN} arguments may be given, causing listing of probes that match
any of the listed names. If no @var{PATTERN} is given, the all possible
probes will be listed.

For example, to list all probes available in the @command{qemu-system-x86_64}
binary:

@example
$ qemu-trace-stap list qemu-system-x86_64
@end example

To filter the list to only cover probes related to QEMU's cryptographic
subsystem, in a binary outside @code{$PATH}

@example
$ qemu-trace-stap list /opt/qemu/4.0.0/bin/qemu-system-x86_64 'qcrypto*'
@end example


@item @var{run} @var{OPTIONS} @var{BINARY} @var{PATTERN...}

Run a trace session, printing formatted output any time a process that is
executing @var{BINARY} triggers a probe matching @var{PATTERN}.

If @var{BINARY} is not an absolute path, it will be located by searching
the directories listed in the @code{$PATH} environment variable.

@var{PATTERN} is a plain string that matches a probe name shown by the
@var{list} command. It may optionally contain a @code{*} wildcard to
facilitate matching multiple probes without listing each one explicitly.
Multiple @var{PATTERN} arguments may be given, causing all matching probes
to be monitored. At least one @var{PATTERN} is required, since stap is not
capable of tracing all known QEMU probes concurrently without overflowing
its trace buffer.

Invocation of this command does not need to be synchronized with
invocation of the QEMU process(es). It will match probes on all
existing running processes and all future launched processes,
unless told to only monitor a specific process.

Valid command specific options are:

@table @option
@item @var{--pid=PID}, @var{-p PID}

Restrict the tracing session so that it only triggers for the process
identified by @code{PID}.

@end table

For example, to monitor all processes executing @command{qemu-system-x86_64}
as found on $PATH, displaying all I/O related probes:

@example
$ qemu-trace-stap run qemu-system-x86_64 'qio*'
@end example

To monitor only the QEMU process with PID 1732

@example
$ qemu-trace-stap run --pid=1732 qemu-system-x86_64 'qio*'
@end example

To monitor QEMU processes running an alternative binary outside of
@code{$PATH}, displaying verbose information about setup of the
tracing environment:

@example
$ qemu-trace-stap -v run /opt/qemu/4.0.0/qemu-system-x86_64 'qio*'
@end example

@end table

@c man end

@ignore

@setfilename qemu-trace-stap
@settitle QEMU SystemTap trace tool

@c man begin LICENSE

Copyright (C) 2019 Red Hat, Inc.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.

@c man end

@c man begin SEEALSO
qemu(1), stap(1)
@c man end

@end ignore
