From patchwork Thu May 6 15:50:41 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 51859 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 6C403B7D1E for ; Fri, 7 May 2010 04:22:46 +1000 (EST) Received: from localhost ([127.0.0.1]:43587 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OA5iW-0000h7-U3 for incoming@patchwork.ozlabs.org; Thu, 06 May 2010 14:22:36 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1OA56h-0007U3-CS for qemu-devel@nongnu.org; Thu, 06 May 2010 13:43:31 -0400 Received: from [140.186.70.92] (port=49734 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OA56Q-0007EI-Ly for qemu-devel@nongnu.org; Thu, 06 May 2010 13:43:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OA50R-0004nA-DP for qemu-devel@nongnu.org; Thu, 06 May 2010 13:37:07 -0400 Received: from are.twiddle.net ([75.149.56.221]:47608) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OA50R-0004mj-5h for qemu-devel@nongnu.org; Thu, 06 May 2010 13:37:03 -0400 Received: from anchor.twiddle.home (anchor.twiddle.home [172.31.0.4]) by are.twiddle.net (Postfix) with ESMTPS id CFBD21080; Thu, 6 May 2010 10:37:01 -0700 (PDT) Received: from anchor.twiddle.home (anchor.twiddle.home [127.0.0.1]) by anchor.twiddle.home (8.14.4/8.14.4) with ESMTP id o46Fokh0002915; Thu, 6 May 2010 08:50:46 -0700 Received: (from rth@localhost) by anchor.twiddle.home (8.14.4/8.14.4/Submit) id o46Foknu002914; Thu, 6 May 2010 08:50:46 -0700 From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 May 2010 08:50:41 -0700 Message-Id: <1273161045-2880-2-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 1.7.0.1 In-Reply-To: <1273161045-2880-1-git-send-email-rth@twiddle.net> References: <1273161045-2880-1-git-send-email-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) Cc: aurelien@aurel32.net Subject: [Qemu-devel] [PATCH 1/5] tcg: Initialize the prologue after GUEST_BASE is fixed. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This will allow backends to make intelligent choices about how to implement GUEST_BASE. Signed-off-by: Richard Henderson --- bsd-user/main.c | 9 ++++++++- exec.c | 5 +++++ linux-user/main.c | 9 ++++++++- tcg/tcg.c | 3 +++ tcg/tcg.h | 1 + 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/bsd-user/main.c b/bsd-user/main.c index b1c438d..05cc3d9 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -30,7 +30,7 @@ #include "qemu-common.h" /* For tb_lock */ #include "exec-all.h" - +#include "tcg.h" #include "qemu-timer.h" #include "envlist.h" @@ -970,6 +970,13 @@ int main(int argc, char **argv) syscall_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 */ memset(ts, 0, sizeof(TaskState)); init_task_state(ts); diff --git a/exec.c b/exec.c index 95b92f7..f417bb6 100644 --- a/exec.c +++ b/exec.c @@ -574,6 +574,11 @@ void cpu_exec_init_all(unsigned long tb_size) #if !defined(CONFIG_USER_ONLY) io_mem_init(); #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) diff --git a/linux-user/main.c b/linux-user/main.c index eafcfc1..331cc30 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -31,7 +31,7 @@ #include "cache-utils.h" /* For tb_lock */ #include "exec-all.h" - +#include "tcg.h" #include "qemu-timer.h" #include "envlist.h" @@ -2984,6 +2984,13 @@ int main(int argc, char **argv, char **envp) syscall_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) cpu_x86_set_cpl(env, 3); diff --git a/tcg/tcg.c b/tcg/tcg.c index 53da2c4..9105266 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -240,7 +240,10 @@ void tcg_context_init(TCGContext *s) } tcg_target_init(s); +} +void tcg_prologue_init(TCGContext *s) +{ /* init global prologue and epilogue */ s->code_buf = code_gen_prologue; s->code_ptr = s->code_buf; diff --git a/tcg/tcg.h b/tcg/tcg.h index 166c889..bab13cd 100644 --- a/tcg/tcg.h +++ b/tcg/tcg.h @@ -346,6 +346,7 @@ static inline void *tcg_malloc(int size) } void tcg_context_init(TCGContext *s); +void tcg_prologue_init(TCGContext *s); void tcg_func_start(TCGContext *s); int tcg_gen_code(TCGContext *s, uint8_t *gen_code_buf);