diff --git a/qemu/Makefile.target b/qemu/Makefile.target index 83490caf..7fe3535b 100644 --- a/qemu/Makefile.target +++ b/qemu/Makefile.target @@ -41,6 +41,7 @@ all: $(PROGS) ######################################################### # cpu emulator library obj-y = exec.o translate-all.o cpu-exec.o +obj-y += cpu-exec-common.o obj-y += tcg/tcg.o tcg/tcg-op.o tcg/optimize.o obj-y += fpu/softfloat.o obj-y += target-$(TARGET_BASE_ARCH)/ diff --git a/qemu/cpu-exec-common.c b/qemu/cpu-exec-common.c new file mode 100644 index 00000000..90372989 --- /dev/null +++ b/qemu/cpu-exec-common.c @@ -0,0 +1,60 @@ +/* + * emulator main execution loop + * + * Copyright (c) 2003-2005 Fabrice Bellard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +#include "cpu.h" +#include "sysemu/cpus.h" +#include "exec/memory-internal.h" + +/* exit the current TB from a signal handler. The host registers are + restored in a state compatible with the CPU emulator + */ +#if defined(CONFIG_SOFTMMU) + +void cpu_resume_from_signal(CPUState *cpu, void *puc) +{ +#endif + /* XXX: restore cpu registers saved in host registers */ + + cpu->exception_index = -1; + siglongjmp(cpu->jmp_env, 1); +} + +void cpu_reload_memory_map(CPUState *cpu) +{ + /* The TLB is protected by the iothread lock. */ + /* The CPU and TLB are protected by the iothread lock. */ + AddressSpaceDispatch *d = cpu->as->dispatch; + cpu->memory_dispatch = d; + tlb_flush(cpu, 1); +} + +void cpu_loop_exit(CPUState *cpu) +{ + cpu->current_tb = NULL; + siglongjmp(cpu->jmp_env, 1); +} + +void cpu_loop_exit_restore(CPUState *cpu, uintptr_t pc) +{ + if (pc) { + cpu_restore_state(cpu, pc); + } + cpu->current_tb = NULL; + siglongjmp(cpu->jmp_env, 1); +} \ No newline at end of file diff --git a/qemu/cpu-exec.c b/qemu/cpu-exec.c index adbe56cb..20ddad7b 100644 --- a/qemu/cpu-exec.c +++ b/qemu/cpu-exec.c @@ -22,7 +22,6 @@ #include "tcg.h" #include "sysemu/sysemu.h" #include "exec/address-spaces.h" -#include "exec/memory-internal.h" #include "exec/tb-hash.h" #include "uc_priv.h" @@ -33,35 +32,6 @@ static TranslationBlock *tb_find_slow(CPUState *cpu, target_ulong pc, static TranslationBlock *tb_find_fast(CPUState *cpu); static void cpu_handle_debug_exception(CPUState *cpu); -void cpu_loop_exit(CPUState *cpu) -{ - cpu->current_tb = NULL; - siglongjmp(cpu->jmp_env, 1); -} - -void cpu_loop_exit_restore(CPUState *cpu, uintptr_t pc) -{ - if (pc) { - cpu_restore_state(cpu, pc); - } - cpu->current_tb = NULL; - siglongjmp(cpu->jmp_env, 1); -} - -/* exit the current TB from a signal handler. The host registers are - restored in a state compatible with the CPU emulator - */ -#if defined(CONFIG_SOFTMMU) - -void cpu_resume_from_signal(CPUState *cpu, void *puc) -{ -#endif - /* XXX: restore cpu registers saved in host registers */ - - cpu->exception_index = -1; - siglongjmp(cpu->jmp_env, 1); -} - /* main execution loop */ int cpu_exec(struct uc_struct *uc, CPUState *cpu) @@ -292,15 +262,6 @@ int cpu_exec(struct uc_struct *uc, CPUState *cpu) return ret; } -void cpu_reload_memory_map(CPUState *cpu) -{ - /* The TLB is protected by the iothread lock. */ - /* The CPU and TLB are protected by the iothread lock. */ - AddressSpaceDispatch *d = cpu->as->dispatch; - cpu->memory_dispatch = d; - tlb_flush(cpu, 1); -} - /* Execute a TB, and fix up the CPU state afterwards if necessary */ static tcg_target_ulong cpu_tb_exec(CPUState *cpu, uint8_t *tb_ptr) {