vl: support -plugin option
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> [ cota: s/instrument/plugin ] Signed-off-by: Emilio G. Cota <cota@braap.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
This commit is contained in:
parent
ca76a66975
commit
42229a7539
@ -4201,6 +4201,23 @@ HXCOMM HX does not support conditional compilation of text.
|
|||||||
@findex -trace
|
@findex -trace
|
||||||
@include qemu-option-trace.texi
|
@include qemu-option-trace.texi
|
||||||
ETEXI
|
ETEXI
|
||||||
|
DEF("plugin", HAS_ARG, QEMU_OPTION_plugin,
|
||||||
|
"-plugin [file=]<file>[,arg=<string>]\n"
|
||||||
|
" load a plugin\n",
|
||||||
|
QEMU_ARCH_ALL)
|
||||||
|
STEXI
|
||||||
|
@item -plugin file=@var{file}[,arg=@var{string}]
|
||||||
|
@findex -plugin
|
||||||
|
|
||||||
|
Load a plugin.
|
||||||
|
|
||||||
|
@table @option
|
||||||
|
@item file=@var{file}
|
||||||
|
Load the given plugin from a shared library file.
|
||||||
|
@item arg=@var{string}
|
||||||
|
Argument string passed to the plugin. (Can be given multiple times.)
|
||||||
|
@end table
|
||||||
|
ETEXI
|
||||||
|
|
||||||
HXCOMM Internal use
|
HXCOMM Internal use
|
||||||
DEF("qtest", HAS_ARG, QEMU_OPTION_qtest, "", QEMU_ARCH_ALL)
|
DEF("qtest", HAS_ARG, QEMU_OPTION_qtest, "", QEMU_ARCH_ALL)
|
||||||
|
11
vl.c
11
vl.c
@ -110,6 +110,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
#include "trace-root.h"
|
#include "trace-root.h"
|
||||||
#include "trace/control.h"
|
#include "trace/control.h"
|
||||||
|
#include "qemu/plugin.h"
|
||||||
#include "qemu/queue.h"
|
#include "qemu/queue.h"
|
||||||
#include "sysemu/arch_init.h"
|
#include "sysemu/arch_init.h"
|
||||||
|
|
||||||
@ -2857,6 +2858,7 @@ int main(int argc, char **argv, char **envp)
|
|||||||
bool list_data_dirs = false;
|
bool list_data_dirs = false;
|
||||||
char *dir, **dirs;
|
char *dir, **dirs;
|
||||||
BlockdevOptionsQueue bdo_queue = QSIMPLEQ_HEAD_INITIALIZER(bdo_queue);
|
BlockdevOptionsQueue bdo_queue = QSIMPLEQ_HEAD_INITIALIZER(bdo_queue);
|
||||||
|
QemuPluginList plugin_list = QTAILQ_HEAD_INITIALIZER(plugin_list);
|
||||||
|
|
||||||
os_set_line_buffering();
|
os_set_line_buffering();
|
||||||
|
|
||||||
@ -2887,6 +2889,7 @@ int main(int argc, char **argv, char **envp)
|
|||||||
qemu_add_opts(&qemu_global_opts);
|
qemu_add_opts(&qemu_global_opts);
|
||||||
qemu_add_opts(&qemu_mon_opts);
|
qemu_add_opts(&qemu_mon_opts);
|
||||||
qemu_add_opts(&qemu_trace_opts);
|
qemu_add_opts(&qemu_trace_opts);
|
||||||
|
qemu_plugin_add_opts();
|
||||||
qemu_add_opts(&qemu_option_rom_opts);
|
qemu_add_opts(&qemu_option_rom_opts);
|
||||||
qemu_add_opts(&qemu_machine_opts);
|
qemu_add_opts(&qemu_machine_opts);
|
||||||
qemu_add_opts(&qemu_accel_opts);
|
qemu_add_opts(&qemu_accel_opts);
|
||||||
@ -3681,6 +3684,9 @@ int main(int argc, char **argv, char **envp)
|
|||||||
g_free(trace_file);
|
g_free(trace_file);
|
||||||
trace_file = trace_opt_parse(optarg);
|
trace_file = trace_opt_parse(optarg);
|
||||||
break;
|
break;
|
||||||
|
case QEMU_OPTION_plugin:
|
||||||
|
qemu_plugin_opt_parse(optarg, &plugin_list);
|
||||||
|
break;
|
||||||
case QEMU_OPTION_readconfig:
|
case QEMU_OPTION_readconfig:
|
||||||
{
|
{
|
||||||
int ret = qemu_read_config_file(optarg);
|
int ret = qemu_read_config_file(optarg);
|
||||||
@ -3994,6 +4000,11 @@ int main(int argc, char **argv, char **envp)
|
|||||||
machine_class->default_machine_opts, 0);
|
machine_class->default_machine_opts, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* process plugin before CPUs are created, but once -smp has been parsed */
|
||||||
|
if (qemu_plugin_load_list(&plugin_list)) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
qemu_opts_foreach(qemu_find_opts("device"),
|
qemu_opts_foreach(qemu_find_opts("device"),
|
||||||
default_driver_check, NULL, NULL);
|
default_driver_check, NULL, NULL);
|
||||||
qemu_opts_foreach(qemu_find_opts("global"),
|
qemu_opts_foreach(qemu_find_opts("global"),
|
||||||
|
Loading…
Reference in New Issue
Block a user