[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v2 05/34] translate: Listify tcg_exec_init
From: |
Peter Crosthwaite |
Subject: |
[Qemu-devel] [RFC v2 05/34] translate: Listify tcg_exec_init |
Date: |
Sat, 30 May 2015 23:11:38 -0700 |
Create a global list of tcg_exec_init functions that is populated at
startup. Multiple translation engines can register an init function
and all will be called on the master call to tcg_exec_init.
Introduce a new module, translate-common. This is a common-obj for
translation functionality such as this.
Signed-off-by: Peter Crosthwaite <address@hidden>
---
Makefile.objs | 1 +
include/qemu-common.h | 1 +
translate-all.c | 7 ++++++-
translate-common.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 58 insertions(+), 1 deletion(-)
create mode 100644 translate-common.c
diff --git a/Makefile.objs b/Makefile.objs
index 4881d2c..294016e 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -67,6 +67,7 @@ common-obj-y += dma-helpers.o
common-obj-y += vl.o
vl.o-cflags := $(GPROF_CFLAGS) $(SDL_CFLAGS)
common-obj-y += tpm.o
+common-obj-y += translate-common.o
common-obj-$(CONFIG_SLIRP) += slirp/
diff --git a/include/qemu-common.h b/include/qemu-common.h
index 6b373ff..88fbcfa 100644
--- a/include/qemu-common.h
+++ b/include/qemu-common.h
@@ -263,6 +263,7 @@ typedef struct PCIHostDeviceAddress {
unsigned int function;
} PCIHostDeviceAddress;
+void tcg_exec_init_add(void (*fn)(unsigned long));
void tcg_exec_init(unsigned long tb_size);
bool tcg_enabled(void);
diff --git a/translate-all.c b/translate-all.c
index 62042af..b2edfb4 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -677,7 +677,7 @@ static inline void code_gen_alloc(size_t tb_size)
/* Must be called before using the QEMU cpus. 'tb_size' is the size
(in bytes) allocated to the translation buffer. Zero means default
size. */
-void tcg_exec_init(unsigned long tb_size)
+static void do_tcg_exec_init(unsigned long tb_size)
{
cpu_gen_init();
code_gen_alloc(tb_size);
@@ -691,6 +691,11 @@ void tcg_exec_init(unsigned long tb_size)
#endif
}
+static __attribute__((constructor)) void register_tcg_exec_init(void)
+{
+ tcg_exec_init_add(do_tcg_exec_init);
+}
+
bool tcg_enabled(void)
{
return tcg_ctx.code_gen_buffer != NULL;
diff --git a/translate-common.c b/translate-common.c
new file mode 100644
index 0000000..563ae5a
--- /dev/null
+++ b/translate-common.c
@@ -0,0 +1,50 @@
+/*
+ * Host code generation common components
+ *
+ * Copyright (c) 2015 Peter Crosthwaite <address@hidden>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "qemu-common.h"
+
+typedef struct TCGExecInitFn {
+ void (*do_tcg_exec_init)(unsigned long tb_size);
+ QLIST_ENTRY(TCGExecInitFn) list;
+} TCGExecInitFn;
+
+static QLIST_HEAD(, TCGExecInitFn) tcg_exec_init_list;
+
+void tcg_exec_init_add(void (*fn)(unsigned long))
+{
+ static bool inited;
+ TCGExecInitFn *lelem = g_malloc0(sizeof *lelem);
+
+ if (!inited) {
+ inited = true;
+ QLIST_INIT(&tcg_exec_init_list);
+ }
+
+ lelem->do_tcg_exec_init = fn;
+ QLIST_INSERT_HEAD(&tcg_exec_init_list, lelem, list);
+}
+
+void tcg_exec_init(unsigned long tb_size)
+{
+ TCGExecInitFn *t;
+
+ QLIST_FOREACH(t, &tcg_exec_init_list, list) {
+ t->do_tcg_exec_init(tb_size);
+ }
+}
--
1.9.1
- [Qemu-devel] [RFC v2 00/34] Multi Architecture System Emulation, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 01/34] cpu-defs: Move CPU_TEMP_BUF_NLONGS to tcg, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 02/34] cpu-exec: Purge all uses of CPU_GET_ENV, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 03/34] Makefile.target: Introduce arch-obj, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 04/34] cpu-exec: Migrate some generic fns to cpus.c, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 05/34] translate: Listify tcg_exec_init,
Peter Crosthwaite <=
- [Qemu-devel] [RFC v2 06/34] cpu-common: Define tb_page_addr_t for everyone, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 07/34] exec-all: Move cpu_can_do_io to qom/cpu.h, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 08/34] translate-all: Move tcg_handle_interrupt to -common, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 09/34] include/exec: Move standard exceptions to cpu-all.h, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 10/34] include/exec: Split target_long def to new header, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 11/34] include/exec: Move cputlb exec.c defs out, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 12/34] include/exec: Move tb hash functions out, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 13/34] cpu-defs: Move out TB_JMP defines, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 14/34] cpu-defs: Allow multiple inclusions, Peter Crosthwaite, 2015/05/31
- [Qemu-devel] [RFC v2 15/34] HACK: monitor: Comment out TCG profile ops, Peter Crosthwaite, 2015/05/31