]> git.proxmox.com Git - qemu.git/commitdiff
sparc fixes
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 4 Jan 2004 15:45:21 +0000 (15:45 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 4 Jan 2004 15:45:21 +0000 (15:45 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@490 c046a42c-6fe2-441c-8c8c-71466251a162

cpu-exec.c

index 5507c04dd04bfe5c95ccb516e156e65346d35744..08ecea1266112da5858dc8f9caa7413487905763 100644 (file)
@@ -250,11 +250,7 @@ int cpu_exec(CPUState *env1)
                 pc = (uint8_t *)env->regs[15];
 #elif defined(TARGET_SPARC)
                 flags = 0;
-                cs_base = 0;
-                if (env->npc) {
-                    env->pc = env->npc;
-                    env->npc = 0;
-                }
+                cs_base = env->npc;
                 pc = (uint8_t *) env->pc;
 #elif defined(TARGET_PPC)
                 flags = 0;
@@ -271,7 +267,7 @@ int cpu_exec(CPUState *env1)
                     tb = tb_alloc((unsigned long)pc);
                     if (!tb) {
                         /* flush must be done */
-                        tb_flush();
+                        tb_flush(env);
                         /* cannot fail at this point */
                         tb = tb_alloc((unsigned long)pc);
                         /* don't forget to invalidate previous TB info */
@@ -410,7 +406,7 @@ void cpu_x86_load_seg(CPUX86State *s, int seg_reg, int selector)
         cpu_x86_load_seg_cache(env, seg_reg, selector, 
                                (uint8_t *)(selector << 4), 0xffff, 0);
     } else {
-        load_seg(seg_reg, selector, 0);
+        load_seg(seg_reg, selector);
     }
     env = saved_env;
 }
@@ -519,7 +515,11 @@ static inline int handle_cpu_signal(unsigned long pc, unsigned long address,
 static inline int handle_cpu_signal(unsigned long pc, unsigned long address,
                                     int is_write, sigset_t *old_set)
 {
-       return 0;
+    /* XXX: locking issue */
+    if (is_write && page_unprotect(address)) {
+        return 1;
+    }
+    return 0;
 }
 #elif defined (TARGET_PPC)
 static inline int handle_cpu_signal(unsigned long pc, unsigned long address,