Commit b453b70bd8e61c4ab4bba48a32ae99c0aa758c79

Authored by bellard
1 parent 0ac4bd56

sparc fixes


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@490 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 8 additions and 8 deletions
cpu-exec.c
@@ -250,11 +250,7 @@ int cpu_exec(CPUState *env1) @@ -250,11 +250,7 @@ int cpu_exec(CPUState *env1)
250 pc = (uint8_t *)env->regs[15]; 250 pc = (uint8_t *)env->regs[15];
251 #elif defined(TARGET_SPARC) 251 #elif defined(TARGET_SPARC)
252 flags = 0; 252 flags = 0;
253 - cs_base = 0;  
254 - if (env->npc) {  
255 - env->pc = env->npc;  
256 - env->npc = 0;  
257 - } 253 + cs_base = env->npc;
258 pc = (uint8_t *) env->pc; 254 pc = (uint8_t *) env->pc;
259 #elif defined(TARGET_PPC) 255 #elif defined(TARGET_PPC)
260 flags = 0; 256 flags = 0;
@@ -271,7 +267,7 @@ int cpu_exec(CPUState *env1) @@ -271,7 +267,7 @@ int cpu_exec(CPUState *env1)
271 tb = tb_alloc((unsigned long)pc); 267 tb = tb_alloc((unsigned long)pc);
272 if (!tb) { 268 if (!tb) {
273 /* flush must be done */ 269 /* flush must be done */
274 - tb_flush(); 270 + tb_flush(env);
275 /* cannot fail at this point */ 271 /* cannot fail at this point */
276 tb = tb_alloc((unsigned long)pc); 272 tb = tb_alloc((unsigned long)pc);
277 /* don't forget to invalidate previous TB info */ 273 /* don't forget to invalidate previous TB info */
@@ -410,7 +406,7 @@ void cpu_x86_load_seg(CPUX86State *s, int seg_reg, int selector) @@ -410,7 +406,7 @@ void cpu_x86_load_seg(CPUX86State *s, int seg_reg, int selector)
410 cpu_x86_load_seg_cache(env, seg_reg, selector, 406 cpu_x86_load_seg_cache(env, seg_reg, selector,
411 (uint8_t *)(selector << 4), 0xffff, 0); 407 (uint8_t *)(selector << 4), 0xffff, 0);
412 } else { 408 } else {
413 - load_seg(seg_reg, selector, 0); 409 + load_seg(seg_reg, selector);
414 } 410 }
415 env = saved_env; 411 env = saved_env;
416 } 412 }
@@ -519,7 +515,11 @@ static inline int handle_cpu_signal(unsigned long pc, unsigned long address, @@ -519,7 +515,11 @@ static inline int handle_cpu_signal(unsigned long pc, unsigned long address,
519 static inline int handle_cpu_signal(unsigned long pc, unsigned long address, 515 static inline int handle_cpu_signal(unsigned long pc, unsigned long address,
520 int is_write, sigset_t *old_set) 516 int is_write, sigset_t *old_set)
521 { 517 {
522 - return 0; 518 + /* XXX: locking issue */
  519 + if (is_write && page_unprotect(address)) {
  520 + return 1;
  521 + }
  522 + return 0;
523 } 523 }
524 #elif defined (TARGET_PPC) 524 #elif defined (TARGET_PPC)
525 static inline int handle_cpu_signal(unsigned long pc, unsigned long address, 525 static inline int handle_cpu_signal(unsigned long pc, unsigned long address,