From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59566) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZCSyS-00043O-Mn for qemu-devel@nongnu.org; Tue, 07 Jul 2015 09:31:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZCSyR-0007td-LC for qemu-devel@nongnu.org; Tue, 07 Jul 2015 09:31:48 -0400 Received: from mail.ispras.ru ([83.149.199.45]:60961) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZCSyR-0007tY-8l for qemu-devel@nongnu.org; Tue, 07 Jul 2015 09:31:47 -0400 From: Pavel Dovgalyuk Date: Tue, 07 Jul 2015 16:31:48 +0300 Message-ID: <20150707133147.11808.6525.stgit@PASHA-ISP.def.inno> In-Reply-To: <20150707133055.11808.93250.stgit@PASHA-ISP.def.inno> References: <20150707133055.11808.93250.stgit@PASHA-ISP.def.inno> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH v6 09/10] target-i386: exception handling for other helper functions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: rth7680@gmail.com, agraf@suse.de, pavel.dovgaluk@ispras.ru, pbonzini@redhat.com, leon.alrae@imgtec.com, aurelien@aurel32.net This patch fixes exception handling for other helper functions. Signed-off-by: Pavel Dovgalyuk --- target-i386/cc_helper.c | 2 +- target-i386/misc_helper.c | 10 +++++----- target-i386/ops_sse.h | 2 +- target-i386/svm_helper.c | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/target-i386/cc_helper.c b/target-i386/cc_helper.c index ecbf0ec..d5b7c7b 100644 --- a/target-i386/cc_helper.c +++ b/target-i386/cc_helper.c @@ -378,7 +378,7 @@ void helper_sti_vm(CPUX86State *env) { env->eflags |= VIF_MASK; if (env->eflags & VIP_MASK) { - raise_exception(env, EXCP0D_GPF); + raise_exception_ra(env, EXCP0D_GPF, GETPC()); } } #endif diff --git a/target-i386/misc_helper.c b/target-i386/misc_helper.c index 52c5d65..c8e7ee9 100644 --- a/target-i386/misc_helper.c +++ b/target-i386/misc_helper.c @@ -220,7 +220,7 @@ void helper_rdtsc(CPUX86State *env) uint64_t val; if ((env->cr[4] & CR4_TSD_MASK) && ((env->hflags & HF_CPL_MASK) != 0)) { - raise_exception(env, EXCP0D_GPF); + raise_exception_ra(env, EXCP0D_GPF, GETPC()); } cpu_svm_check_intercept_param(env, SVM_EXIT_RDTSC, 0); @@ -238,13 +238,13 @@ void helper_rdtscp(CPUX86State *env) void helper_rdpmc(CPUX86State *env) { if ((env->cr[4] & CR4_PCE_MASK) && ((env->hflags & HF_CPL_MASK) != 0)) { - raise_exception(env, EXCP0D_GPF); + raise_exception_ra(env, EXCP0D_GPF, GETPC()); } cpu_svm_check_intercept_param(env, SVM_EXIT_RDPMC, 0); /* currently unimplemented */ qemu_log_mask(LOG_UNIMP, "x86: unimplemented rdpmc\n"); - raise_exception_err(env, EXCP06_ILLOP, 0); + raise_exception_err_ra(env, EXCP06_ILLOP, 0, GETPC()); } #if defined(CONFIG_USER_ONLY) @@ -589,7 +589,7 @@ void helper_hlt(CPUX86State *env, int next_eip_addend) void helper_monitor(CPUX86State *env, target_ulong ptr) { if ((uint32_t)env->regs[R_ECX] != 0) { - raise_exception(env, EXCP0D_GPF); + raise_exception_ra(env, EXCP0D_GPF, GETPC()); } /* XXX: store address? */ cpu_svm_check_intercept_param(env, SVM_EXIT_MONITOR, 0); @@ -601,7 +601,7 @@ void helper_mwait(CPUX86State *env, int next_eip_addend) X86CPU *cpu; if ((uint32_t)env->regs[R_ECX] != 0) { - raise_exception(env, EXCP0D_GPF); + raise_exception_ra(env, EXCP0D_GPF, GETPC()); } cpu_svm_check_intercept_param(env, SVM_EXIT_MWAIT, 0); env->eip += next_eip_addend; diff --git a/target-i386/ops_sse.h b/target-i386/ops_sse.h index 0765073..8c8e53b 100644 --- a/target-i386/ops_sse.h +++ b/target-i386/ops_sse.h @@ -483,7 +483,7 @@ void glue(helper_maskmov, SUFFIX)(CPUX86State *env, Reg *d, Reg *s, for (i = 0; i < (8 << SHIFT); i++) { if (s->B(i) & 0x80) { - cpu_stb_data(env, a0 + i, d->B(i)); + cpu_stb_data_ra(env, a0 + i, d->B(i), GETPC()); } } } diff --git a/target-i386/svm_helper.c b/target-i386/svm_helper.c index f1fabf5..cc8c2ec 100644 --- a/target-i386/svm_helper.c +++ b/target-i386/svm_helper.c @@ -354,7 +354,7 @@ void helper_vmrun(CPUX86State *env, int aflag, int next_eip_addend) void helper_vmmcall(CPUX86State *env) { cpu_svm_check_intercept_param(env, SVM_EXIT_VMMCALL, 0); - raise_exception(env, EXCP06_ILLOP); + raise_exception_ra(env, EXCP06_ILLOP, GETPC()); } void helper_vmload(CPUX86State *env, int aflag) @@ -457,7 +457,7 @@ void helper_skinit(CPUX86State *env) { cpu_svm_check_intercept_param(env, SVM_EXIT_SKINIT, 0); /* XXX: not implemented */ - raise_exception(env, EXCP06_ILLOP); + raise_exception_ra(env, EXCP06_ILLOP, GETPC()); } void helper_invlpga(CPUX86State *env, int aflag)