From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42575) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UoFLU-0007P3-Dc for qemu-devel@nongnu.org; Sun, 16 Jun 2013 11:58:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UoFLS-00078B-No for qemu-devel@nongnu.org; Sun, 16 Jun 2013 11:58:24 -0400 Received: from cantor2.suse.de ([195.135.220.15]:60036 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UoFLS-00077x-Aq for qemu-devel@nongnu.org; Sun, 16 Jun 2013 11:58:22 -0400 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Sun, 16 Jun 2013 17:57:42 +0200 Message-Id: <1371398269-6213-23-git-send-email-afaerber@suse.de> In-Reply-To: <1371398269-6213-1-git-send-email-afaerber@suse.de> References: <1371398269-6213-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH qom-cpu v2 22/29] linux-user: Change thread_env to CPUState List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Riku Voipio , =?UTF-8?q?Andreas=20F=C3=A4rber?= Signed-off-by: Andreas F=C3=A4rber --- linux-user/elfload.c | 16 +++++++++------- linux-user/linuxload.c | 3 ++- linux-user/main.c | 10 +++++----- linux-user/qemu.h | 2 +- linux-user/signal.c | 12 +++++++----- linux-user/syscall.c | 6 +++--- 6 files changed, 27 insertions(+), 22 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index d517450..7ce2eab 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -125,7 +125,7 @@ typedef abi_int target_pid_t; static const char *get_elf_platform(void) { static char elf_platform[] =3D "i386"; - int family =3D (thread_env->cpuid_version >> 8) & 0xff; + int family =3D object_property_get_int(OBJECT(thread_cpu), "family",= NULL); if (family > 6) family =3D 6; if (family >=3D 3) @@ -137,7 +137,9 @@ static const char *get_elf_platform(void) =20 static uint32_t get_elf_hwcap(void) { - return thread_env->features[FEAT_1_EDX]; + X86CPU *cpu =3D X86_CPU(thread_cpu); + + return cpu->env.features[FEAT_1_EDX]; } =20 #ifdef TARGET_X86_64 @@ -404,7 +406,7 @@ static int validate_guest_space(unsigned long guest_b= ase, =20 static uint32_t get_elf_hwcap(void) { - CPUARMState *e =3D thread_env; + ARMCPU *cpu =3D ARM_CPU(thread_cpu); uint32_t hwcaps =3D 0; =20 hwcaps |=3D ARM_HWCAP_ARM_SWP; @@ -415,7 +417,7 @@ static uint32_t get_elf_hwcap(void) =20 /* probe for the extra features */ #define GET_FEATURE(feat, hwcap) \ - do {if (arm_feature(e, feat)) { hwcaps |=3D hwcap; } } while (0) + do { if (arm_feature(&cpu->env, feat)) { hwcaps |=3D hwcap; } } whil= e (0) GET_FEATURE(ARM_FEATURE_VFP, ARM_HWCAP_ARM_VFP); GET_FEATURE(ARM_FEATURE_IWMMXT, ARM_HWCAP_ARM_IWMMXT); GET_FEATURE(ARM_FEATURE_THUMB2EE, ARM_HWCAP_ARM_THUMBEE); @@ -619,13 +621,13 @@ enum { =20 static uint32_t get_elf_hwcap(void) { - CPUPPCState *e =3D thread_env; + PowerPCCPU *cpu =3D POWERPC_CPU(thread_cpu); uint32_t features =3D 0; =20 /* We don't have to be terribly complete here; the high points are Altivec/FP/SPE support. Anything else is just a bonus. */ #define GET_FEATURE(flag, feature) = \ - do {if (e->insns_flags & flag) features |=3D feature; } while(0) + do { if (cpu->env.insns_flags & flag) { features |=3D feature; } } w= hile (0) GET_FEATURE(PPC_64B, QEMU_PPC_FEATURE_64); GET_FEATURE(PPC_FLOAT, QEMU_PPC_FEATURE_HAS_FPU); GET_FEATURE(PPC_ALTIVEC, QEMU_PPC_FEATURE_HAS_ALTIVEC); @@ -2667,7 +2669,7 @@ static int fill_note_info(struct elf_note_info *inf= o, /* read and fill status of all threads */ cpu_list_lock(); for (cpu =3D first_cpu; cpu !=3D NULL; cpu =3D cpu->next_cpu) { - if (cpu =3D=3D ENV_GET_CPU(thread_env)) { + if (cpu =3D=3D thread_cpu) { continue; } fill_thread_info(info, (CPUArchState *)cpu->env_ptr); diff --git a/linux-user/linuxload.c b/linux-user/linuxload.c index 381ab89..5cd6d91 100644 --- a/linux-user/linuxload.c +++ b/linux-user/linuxload.c @@ -89,7 +89,8 @@ static int prepare_binprm(struct linux_binprm *bprm) abi_ulong loader_build_argptr(int envc, int argc, abi_ulong sp, abi_ulong stringp, int push_ptr) { - TaskState *ts =3D (TaskState *)thread_env->opaque; + CPUArchState *env =3D thread_cpu->env_ptr; + TaskState *ts =3D (TaskState *)env->opaque; int n =3D sizeof(abi_ulong); abi_ulong envp; abi_ulong argv; diff --git a/linux-user/main.c b/linux-user/main.c index 3e60877..9fc64fe 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -120,7 +120,7 @@ void fork_end(int child) if (child) { /* Child processes created by fork() only have a single thread. Discard information about the parent threads. */ - first_cpu =3D ENV_GET_CPU(thread_env); + first_cpu =3D thread_cpu; first_cpu->next_cpu =3D NULL; pending_cpus =3D 0; pthread_mutex_init(&exclusive_lock, NULL); @@ -128,7 +128,7 @@ void fork_end(int child) pthread_cond_init(&exclusive_cond, NULL); pthread_cond_init(&exclusive_resume, NULL); pthread_mutex_init(&tcg_ctx.tb_ctx.tb_lock, NULL); - gdbserver_fork(thread_env); + gdbserver_fork((CPUArchState *)thread_cpu->env_ptr); } else { pthread_mutex_unlock(&exclusive_lock); pthread_mutex_unlock(&tcg_ctx.tb_ctx.tb_lock); @@ -232,7 +232,7 @@ void fork_start(void) void fork_end(int child) { if (child) { - gdbserver_fork(thread_env); + gdbserver_fork((CPUArchState *)thread_cpu->env_ptr); } } =20 @@ -3150,7 +3150,7 @@ void cpu_loop(CPUS390XState *env) =20 #endif /* TARGET_S390X */ =20 -THREAD CPUArchState *thread_env; +THREAD CPUState *thread_cpu; =20 void task_settid(TaskState *ts) { @@ -3640,7 +3640,7 @@ int main(int argc, char **argv, char **envp) cpu_reset(ENV_GET_CPU(env)); #endif =20 - thread_env =3D env; + thread_cpu =3D ENV_GET_CPU(env); =20 if (getenv("QEMU_STRACE")) { do_strace =3D 1; diff --git a/linux-user/qemu.h b/linux-user/qemu.h index b10e957..d7f27ea 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -197,7 +197,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long = arg1, abi_long arg5, abi_long arg6, abi_long arg7, abi_long arg8); void gemu_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2); -extern THREAD CPUArchState *thread_env; +extern THREAD CPUState *thread_cpu; void cpu_loop(CPUArchState *env); char *target_strerror(int err); int get_osversion(void); diff --git a/linux-user/signal.c b/linux-user/signal.c index c4e20dc..42d8911 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -388,17 +388,18 @@ static inline void free_sigqueue(CPUArchState *env,= struct sigqueue *q) /* abort execution with signal */ static void QEMU_NORETURN force_sig(int target_sig) { - TaskState *ts =3D (TaskState *)thread_env->opaque; + CPUArchState *env =3D thread_cpu->env_ptr; + TaskState *ts =3D (TaskState *)env->opaque; int host_sig, core_dumped =3D 0; struct sigaction act; host_sig =3D target_to_host_signal(target_sig); - gdb_signalled(thread_env, target_sig); + gdb_signalled(env, target_sig); =20 /* dump core if supported by target binary format */ if (core_dump_signal(target_sig) && (ts->bprm->core_dump !=3D NULL))= { stop_all_tasks(); core_dumped =3D - ((*ts->bprm->core_dump)(target_sig, thread_env) =3D=3D 0); + ((*ts->bprm->core_dump)(target_sig, env) =3D=3D 0); } if (core_dumped) { /* we already dumped the core of target process, we don't want @@ -503,6 +504,7 @@ int queue_signal(CPUArchState *env, int sig, target_s= iginfo_t *info) static void host_signal_handler(int host_signum, siginfo_t *info, void *puc) { + CPUArchState *env =3D thread_cpu->env_ptr; int sig; target_siginfo_t tinfo; =20 @@ -522,9 +524,9 @@ static void host_signal_handler(int host_signum, sigi= nfo_t *info, fprintf(stderr, "qemu: got signal %d\n", sig); #endif host_to_target_siginfo_noswap(&tinfo, info); - if (queue_signal(thread_env, sig, &tinfo) =3D=3D 1) { + if (queue_signal(env, sig, &tinfo) =3D=3D 1) { /* interrupt the virtual CPU as soon as possible */ - cpu_exit(ENV_GET_CPU(thread_env)); + cpu_exit(thread_cpu); } } =20 diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 340666f..a3bafcc 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -4171,8 +4171,8 @@ static void *clone_func(void *arg) =20 env =3D info->env; cpu =3D ENV_GET_CPU(env); - thread_env =3D env; - ts =3D (TaskState *)thread_env->opaque; + thread_cpu =3D cpu; + ts =3D (TaskState *)env->opaque; info->tid =3D gettid(); cpu->host_tid =3D info->tid; task_settid(ts); @@ -5078,7 +5078,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_lon= g arg1, sys_futex(g2h(ts->child_tidptr), FUTEX_WAKE, INT_MAX, NULL, NULL, 0); } - thread_env =3D NULL; + thread_cpu =3D NULL; object_unref(OBJECT(ENV_GET_CPU(cpu_env))); g_free(ts); pthread_exit(NULL); --=20 1.8.1.4