[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 04/10] target-i386: introduce new raise_exception
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [PATCH v6 04/10] target-i386: introduce new raise_exception functions |
Date: |
Tue, 07 Jul 2015 16:31:20 +0300 |
User-agent: |
StGit/0.16 |
This patch introduces new versions of raise_exception functions
that receive TB return address as an argument.
Reviewed-by: Aurelien Jarno <address@hidden>
Signed-off-by: Pavel Dovgalyuk <address@hidden>
---
target-i386/cpu.h | 4 ++++
target-i386/excp_helper.c | 30 +++++++++++++++++-------------
2 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index 603aaf0..e7005a6 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -1263,8 +1263,12 @@ void cpu_x86_inject_mce(Monitor *mon, X86CPU *cpu, int
bank,
/* excp_helper.c */
void QEMU_NORETURN raise_exception(CPUX86State *env, int exception_index);
+void QEMU_NORETURN raise_exception_ra(CPUX86State *env, int exception_index,
+ uintptr_t retaddr);
void QEMU_NORETURN raise_exception_err(CPUX86State *env, int exception_index,
int error_code);
+void QEMU_NORETURN raise_exception_err_ra(CPUX86State *env, int
exception_index,
+ int error_code, uintptr_t retaddr);
void QEMU_NORETURN raise_interrupt(CPUX86State *nenv, int intno, int is_int,
int error_code, int next_eip_addend);
diff --git a/target-i386/excp_helper.c b/target-i386/excp_helper.c
index 99fca84..5e347bc 100644
--- a/target-i386/excp_helper.c
+++ b/target-i386/excp_helper.c
@@ -22,14 +22,6 @@
#include "sysemu/sysemu.h"
#include "exec/helper-proto.h"
-#if 0
-#define raise_exception_err(env, a, b) \
- do { \
- qemu_log("raise_exception line=%d\n", __LINE__); \
- (raise_exception_err)(env, a, b); \
- } while (0)
-#endif
-
void helper_raise_interrupt(CPUX86State *env, int intno, int next_eip_addend)
{
raise_interrupt(env, intno, 1, 0, next_eip_addend);
@@ -92,7 +84,8 @@ static int check_exception(CPUX86State *env, int intno, int
*error_code)
*/
static void QEMU_NORETURN raise_interrupt2(CPUX86State *env, int intno,
int is_int, int error_code,
- int next_eip_addend)
+ int next_eip_addend,
+ uintptr_t retaddr)
{
CPUState *cs = CPU(x86_env_get_cpu(env));
@@ -108,7 +101,7 @@ static void QEMU_NORETURN raise_interrupt2(CPUX86State
*env, int intno,
env->error_code = error_code;
env->exception_is_int = is_int;
env->exception_next_eip = env->eip + next_eip_addend;
- cpu_loop_exit(cs);
+ cpu_loop_exit_restore(cs, retaddr);
}
/* shortcuts to generate exceptions */
@@ -116,16 +109,27 @@ static void QEMU_NORETURN raise_interrupt2(CPUX86State
*env, int intno,
void QEMU_NORETURN raise_interrupt(CPUX86State *env, int intno, int is_int,
int error_code, int next_eip_addend)
{
- raise_interrupt2(env, intno, is_int, error_code, next_eip_addend);
+ raise_interrupt2(env, intno, is_int, error_code, next_eip_addend, 0);
}
void raise_exception_err(CPUX86State *env, int exception_index,
int error_code)
{
- raise_interrupt2(env, exception_index, 0, error_code, 0);
+ raise_interrupt2(env, exception_index, 0, error_code, 0, 0);
+}
+
+void raise_exception_err_ra(CPUX86State *env, int exception_index,
+ int error_code, uintptr_t retaddr)
+{
+ raise_interrupt2(env, exception_index, 0, error_code, 0, retaddr);
}
void raise_exception(CPUX86State *env, int exception_index)
{
- raise_interrupt2(env, exception_index, 0, 0, 0);
+ raise_interrupt2(env, exception_index, 0, 0, 0, 0);
+}
+
+void raise_exception_ra(CPUX86State *env, int exception_index, uintptr_t
retaddr)
+{
+ raise_interrupt2(env, exception_index, 0, 0, 0, retaddr);
}
- [Qemu-devel] [PATCH v6 01/10] softmmu: add helper function to pass through retaddr, (continued)
- [Qemu-devel] [PATCH v6 01/10] softmmu: add helper function to pass through retaddr, Pavel Dovgalyuk, 2015/07/07
- [Qemu-devel] [PATCH v6 08/10] target-i386: exception handling for seg_helper functions, Pavel Dovgalyuk, 2015/07/07
- [Qemu-devel] [PATCH v6 09/10] target-i386: exception handling for other helper functions, Pavel Dovgalyuk, 2015/07/07
- [Qemu-devel] [PATCH v6 10/10] target-ppc: exceptions handling in icount mode, Pavel Dovgalyuk, 2015/07/07
- [Qemu-devel] [PATCH v6 06/10] target-i386: exception handling for div instructions, Pavel Dovgalyuk, 2015/07/07
- [Qemu-devel] [PATCH v6 05/10] target-i386: exception handling for FPU instructions, Pavel Dovgalyuk, 2015/07/07
- [Qemu-devel] [PATCH v6 07/10] target-i386: exception handling for memory helpers, Pavel Dovgalyuk, 2015/07/07
- [Qemu-devel] [PATCH v6 04/10] target-i386: introduce new raise_exception functions,
Pavel Dovgalyuk <=
- [Qemu-devel] [PATCH v6 03/10] target-mips: improve exception handling, Pavel Dovgalyuk, 2015/07/07
- [Qemu-devel] [PATCH v6 02/10] cpu-exec: introduce loop exit with restore function, Pavel Dovgalyuk, 2015/07/07