diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-01-04 15:45:21 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-01-04 15:45:21 +0000 |
commit | b453b70bd8e61c4ab4bba48a32ae99c0aa758c79 (patch) | |
tree | 94710ce02d0f84ef23f12995cfee8afe1af72960 | |
parent | 0ac4bd56a8baf235c136c84b338616d47ce01689 (diff) | |
download | qemu-b453b70bd8e61c4ab4bba48a32ae99c0aa758c79.tar.gz |
sparc fixes
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@490 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | cpu-exec.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/cpu-exec.c b/cpu-exec.c index 5507c04dd0..08ecea1266 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -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, |