]> Git Repo - qemu.git/blobdiff - cpu-exec.c
fix 'i' format handling in memory dump
[qemu.git] / cpu-exec.c
index ab6defca75d43a76c83a37a5a7d6a694517f97a9..5d6dd514ffed6a46d2f0a2b5dbe556485c53b9f4 100644 (file)
@@ -210,7 +210,7 @@ static void cpu_handle_debug_exception(CPUState *env)
 
 int cpu_exec(CPUState *env1)
 {
-    host_reg_t saved_env_reg;
+    volatile host_reg_t saved_env_reg;
     int ret, interrupt_request;
     TranslationBlock *tb;
     uint8_t *tc_ptr;
@@ -230,11 +230,13 @@ int cpu_exec(CPUState *env1)
     env = env1;
 
 #if defined(TARGET_I386)
-    /* put eflags in CPU temporary format */
-    CC_SRC = env->eflags & (CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C);
-    DF = 1 - (2 * ((env->eflags >> 10) & 1));
-    CC_OP = CC_OP_EFLAGS;
-    env->eflags &= ~(DF_MASK | CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C);
+    if (!kvm_enabled()) {
+        /* put eflags in CPU temporary format */
+        CC_SRC = env->eflags & (CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C);
+        DF = 1 - (2 * ((env->eflags >> 10) & 1));
+        CC_OP = CC_OP_EFLAGS;
+        env->eflags &= ~(DF_MASK | CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C);
+    }
 #elif defined(TARGET_SPARC)
 #elif defined(TARGET_M68K)
     env->cc_op = CC_OP_FLAGS;
@@ -924,6 +926,20 @@ int cpu_signal_handler(int host_signum, void *pinfo,
 # define TRAP_sig(context)                     REG_sig(trap, context)
 #endif /* linux */
 
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#include <ucontext.h>
+# define IAR_sig(context)              ((context)->uc_mcontext.mc_srr0)
+# define MSR_sig(context)              ((context)->uc_mcontext.mc_srr1)
+# define CTR_sig(context)              ((context)->uc_mcontext.mc_ctr)
+# define XER_sig(context)              ((context)->uc_mcontext.mc_xer)
+# define LR_sig(context)               ((context)->uc_mcontext.mc_lr)
+# define CR_sig(context)               ((context)->uc_mcontext.mc_cr)
+/* Exception Registers access */
+# define DAR_sig(context)              ((context)->uc_mcontext.mc_dar)
+# define DSISR_sig(context)            ((context)->uc_mcontext.mc_dsisr)
+# define TRAP_sig(context)             ((context)->uc_mcontext.mc_exc)
+#endif /* __FreeBSD__|| __FreeBSD_kernel__ */
+
 #ifdef __APPLE__
 # include <sys/ucontext.h>
 typedef struct ucontext SIGCONTEXT;
@@ -953,7 +969,11 @@ int cpu_signal_handler(int host_signum, void *pinfo,
                        void *puc)
 {
     siginfo_t *info = pinfo;
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+    ucontext_t *uc = puc;
+#else
     struct ucontext *uc = puc;
+#endif
     unsigned long pc;
     int is_write;
 
This page took 0.024818 seconds and 4 git commands to generate.