Signed-off-by: Lluís Vilanova <vilan...@ac.upc.edu> --- Makefile.objs | 2 +- bsd-user/main.c | 1 + include/qemu-common.h | 3 +++ linux-user/main.c | 1 + qemu-common.c | 14 ++++++++++++++ stubs/Makefile.objs | 1 + stubs/qemu-common-stub.c | 21 +++++++++++++++++++++ vl.c | 2 ++ 8 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 qemu-common.c create mode 100644 stubs/qemu-common-stub.c
diff --git a/Makefile.objs b/Makefile.objs index bc43e5c..e1d7b25 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -2,7 +2,7 @@ # Common libraries for tools and emulators stub-obj-y = stubs/ util-obj-y = util/ qobject/ qapi/ -util-obj-y += qmp-introspect.o qapi-types.o qapi-visit.o qapi-event.o +util-obj-y += qmp-introspect.o qapi-types.o qapi-visit.o qapi-event.o qemu-common.o ####################################################################### # block-obj-y is code used by both qemu system emulation and qemu-img diff --git a/bsd-user/main.c b/bsd-user/main.c index f0a1268..43f85e6 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -1121,6 +1121,7 @@ int main(int argc, char **argv) gdbserver_start (gdbstub_port); gdb_handlesig(cpu, 0); } + qemu_initialized = true; cpu_loop(env); /* never exits */ return 0; diff --git a/include/qemu-common.h b/include/qemu-common.h index 0bd212b..33f6909 100644 --- a/include/qemu-common.h +++ b/include/qemu-common.h @@ -35,6 +35,9 @@ # error Unknown pointer size #endif +/* Whether the system has finished initializing */ +extern bool qemu_initialized; + void cpu_ticks_init(void); /* icount */ diff --git a/linux-user/main.c b/linux-user/main.c index 1f60ff2..9bd2912 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -4663,6 +4663,7 @@ int main(int argc, char **argv, char **envp) } gdb_handlesig(cpu, 0); } + qemu_initialized = true; cpu_loop(env); /* never exits */ return 0; diff --git a/qemu-common.c b/qemu-common.c new file mode 100644 index 0000000..4b5ca1a --- /dev/null +++ b/qemu-common.c @@ -0,0 +1,14 @@ +/* + * Common symbol definitions for all tools and targets. + * + * Copyright (C) 2011-2015 Lluís Vilanova <vilan...@ac.upc.edu> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. +*/ + +#include "qemu-common.h" + + +/* Whether QEMU has been initialized. */ +bool qemu_initialized; diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs index 85e4e81..259504f 100644 --- a/stubs/Makefile.objs +++ b/stubs/Makefile.objs @@ -39,3 +39,4 @@ stub-obj-y += cpus.o stub-obj-y += kvm.o stub-obj-y += qmp_pc_dimm_device_list.o stub-obj-y += target-monitor-defs.o +stub-obj-y += qemu-common-stub.o diff --git a/stubs/qemu-common-stub.c b/stubs/qemu-common-stub.c new file mode 100644 index 0000000..f34f019 --- /dev/null +++ b/stubs/qemu-common-stub.c @@ -0,0 +1,21 @@ +/* + * Common symbol definitions for all tools and targets. + * + * Copyright (C) 2011-2015 Lluís Vilanova <vilan...@ac.upc.edu> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. +*/ + +#include "qemu-common.h" +#include <qemu/module.h> + + +static void do_qemu_initialized_init(void) +{ + /* Tools always consider QEMU as inited */ + qemu_initialized = true; +} + +/* Block is always inited on both tools (and targets) */ +block_init(do_qemu_initialized_init); diff --git a/vl.c b/vl.c index f2bd8d2..aae8d47 100644 --- a/vl.c +++ b/vl.c @@ -4637,6 +4637,8 @@ int main(int argc, char **argv, char **envp) } } + qemu_initialized = true; + main_loop(); bdrv_close_all(); pause_all_vcpus();