mirror of https://github.com/xqemu/xqemu.git
tcg: Initialize the prologue after GUEST_BASE is fixed.
This will allow backends to make intelligent choices about how to implement GUEST_BASE. Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
a5b3b13bed
commit
9002ec794e
|
@ -30,7 +30,7 @@
|
||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
/* For tb_lock */
|
/* For tb_lock */
|
||||||
#include "exec-all.h"
|
#include "exec-all.h"
|
||||||
|
#include "tcg.h"
|
||||||
#include "qemu-timer.h"
|
#include "qemu-timer.h"
|
||||||
#include "envlist.h"
|
#include "envlist.h"
|
||||||
|
|
||||||
|
@ -970,6 +970,13 @@ int main(int argc, char **argv)
|
||||||
syscall_init();
|
syscall_init();
|
||||||
signal_init();
|
signal_init();
|
||||||
|
|
||||||
|
#if defined(CONFIG_USE_GUEST_BASE)
|
||||||
|
/* Now that we've loaded the binary, GUEST_BASE is fixed. Delay
|
||||||
|
generating the prologue until now so that the prologue can take
|
||||||
|
the real value of GUEST_BASE into account. */
|
||||||
|
tcg_prologue_init(&tcg_ctx);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* build Task State */
|
/* build Task State */
|
||||||
memset(ts, 0, sizeof(TaskState));
|
memset(ts, 0, sizeof(TaskState));
|
||||||
init_task_state(ts);
|
init_task_state(ts);
|
||||||
|
|
5
exec.c
5
exec.c
|
@ -574,6 +574,11 @@ void cpu_exec_init_all(unsigned long tb_size)
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
io_mem_init();
|
io_mem_init();
|
||||||
#endif
|
#endif
|
||||||
|
#if !defined(CONFIG_USER_ONLY) || !defined(CONFIG_USE_GUEST_BASE)
|
||||||
|
/* There's no guest base to take into account, so go ahead and
|
||||||
|
initialize the prologue now. */
|
||||||
|
tcg_prologue_init(&tcg_ctx);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
|
#if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include "cache-utils.h"
|
#include "cache-utils.h"
|
||||||
/* For tb_lock */
|
/* For tb_lock */
|
||||||
#include "exec-all.h"
|
#include "exec-all.h"
|
||||||
|
#include "tcg.h"
|
||||||
#include "qemu-timer.h"
|
#include "qemu-timer.h"
|
||||||
#include "envlist.h"
|
#include "envlist.h"
|
||||||
|
|
||||||
|
@ -2984,6 +2984,13 @@ int main(int argc, char **argv, char **envp)
|
||||||
syscall_init();
|
syscall_init();
|
||||||
signal_init();
|
signal_init();
|
||||||
|
|
||||||
|
#if defined(CONFIG_USE_GUEST_BASE)
|
||||||
|
/* Now that we've loaded the binary, GUEST_BASE is fixed. Delay
|
||||||
|
generating the prologue until now so that the prologue can take
|
||||||
|
the real value of GUEST_BASE into account. */
|
||||||
|
tcg_prologue_init(&tcg_ctx);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(TARGET_I386)
|
#if defined(TARGET_I386)
|
||||||
cpu_x86_set_cpl(env, 3);
|
cpu_x86_set_cpl(env, 3);
|
||||||
|
|
||||||
|
|
|
@ -240,7 +240,10 @@ void tcg_context_init(TCGContext *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
tcg_target_init(s);
|
tcg_target_init(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tcg_prologue_init(TCGContext *s)
|
||||||
|
{
|
||||||
/* init global prologue and epilogue */
|
/* init global prologue and epilogue */
|
||||||
s->code_buf = code_gen_prologue;
|
s->code_buf = code_gen_prologue;
|
||||||
s->code_ptr = s->code_buf;
|
s->code_ptr = s->code_buf;
|
||||||
|
|
|
@ -346,6 +346,7 @@ static inline void *tcg_malloc(int size)
|
||||||
}
|
}
|
||||||
|
|
||||||
void tcg_context_init(TCGContext *s);
|
void tcg_context_init(TCGContext *s);
|
||||||
|
void tcg_prologue_init(TCGContext *s);
|
||||||
void tcg_func_start(TCGContext *s);
|
void tcg_func_start(TCGContext *s);
|
||||||
|
|
||||||
int tcg_gen_code(TCGContext *s, uint8_t *gen_code_buf);
|
int tcg_gen_code(TCGContext *s, uint8_t *gen_code_buf);
|
||||||
|
|
Loading…
Reference in New Issue