From: Anthony Liguori <[EMAIL PROTECTED]> This is useful for emulation targets which aren't supported or broken by qemu.
Signed-off-by: Avi Kivity <[EMAIL PROTECTED]> diff --git a/qemu/Makefile.target b/qemu/Makefile.target index 49b81df..d0cde54 100644 --- a/qemu/Makefile.target +++ b/qemu/Makefile.target @@ -179,11 +179,17 @@ all: $(PROGS) ######################################################### # cpu emulator library -LIBOBJS=exec.o kqemu.o translate-all.o cpu-exec.o\ - translate.o op.o host-utils.o +LIBOBJS=exec.o kqemu.o cpu-exec.o host-utils.o + +ifeq ($(NO_CPU_EMULATION), 1) +LIBOBJS+=fake-exec.o +else +LIBOBJS+= translate-all.o translate.o op.o # TCG code generator LIBOBJS+= tcg/tcg.o tcg/tcg-dyngen.o tcg/tcg-runtime.o CPPFLAGS+=-I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/$(ARCH) +endif + ifeq ($(USE_KVM), 1) LIBOBJS+=qemu-kvm.o endif diff --git a/qemu/configure b/qemu/configure index 92299b9..5449cad 100755 --- a/qemu/configure +++ b/qemu/configure @@ -110,6 +110,7 @@ linux_user="no" darwin_user="no" build_docs="no" uname_release="" +cpu_emulation="yes" # OS specific targetos=`uname -s` @@ -339,6 +340,8 @@ for opt do ;; --disable-werror) werror="no" ;; + --disable-cpu-emulation) cpu_emulation="no" + ;; *) echo "ERROR: unknown option $opt"; exit 1 ;; esac @@ -770,6 +773,7 @@ if test -n "$sparc_cpu"; then fi echo "kqemu support $kqemu" echo "kvm support $kvm" +echo "CPU emulation $cpu_emulation" echo "Documentation $build_docs" [ ! -z "$uname_release" ] && \ echo "uname -r $uname_release" @@ -1094,12 +1098,20 @@ elfload32="no" interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"` echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h +disable_cpu_emulation() { + if test $cpu_emulation = "no"; then + echo "#define NO_CPU_EMULATION 1" >> $config_h + echo "NO_CPU_EMULATION=1" >> $config_mak + fi +} + configure_kvm() { if test $kvm = "yes" -a "$target_softmmu" = "yes" -a \ \( "$cpu" = "i386" -o "$cpu" = "x86_64" -o "$cpu" = "ia64" -o "$cpu" = "powerpc" \); then echo "#define USE_KVM 1" >> $config_h echo "USE_KVM=1" >> $config_mak echo "CONFIG_KVM_KERNEL_INC=$kernel_path/include" >> $config_mak + disable_cpu_emulation fi } diff --git a/qemu/exec.c b/qemu/exec.c index 050b150..960adcd 100644 --- a/qemu/exec.c +++ b/qemu/exec.c @@ -35,7 +35,11 @@ #include "cpu.h" #include "exec-all.h" + +#if !defined(NO_CPU_EMULATION) #include "tcg-target.h" +#endif + #include "qemu-kvm.h" #if defined(CONFIG_USER_ONLY) #include <qemu.h> diff --git a/qemu/target-i386/fake-exec.c b/qemu/target-i386/fake-exec.c new file mode 100644 index 0000000..737286d --- /dev/null +++ b/qemu/target-i386/fake-exec.c @@ -0,0 +1,54 @@ +/* + * fake-exec.c + * + * This is a file for stub functions so that compilation is possible + * when TCG CPU emulation is disabled during compilation. + * + * Copyright 2007 IBM Corporation. + * Added by & Authors: + * Jerone Young <[EMAIL PROTECTED]> + * This work is licensed under the GNU GPL licence version 2 or later. + * + */ +#include "exec.h" +#include "cpu.h" + +int code_copy_enabled = 0; + +CCTable cc_table[CC_OP_NB]; + +void cpu_dump_statistics (CPUState *env, FILE*f, + int (*cpu_fprintf)(FILE *f, const char *fmt, ...), + int flags) +{ +} + +unsigned long code_gen_max_block_size(void) +{ + return 32; +} + +void cpu_gen_init(void) +{ +} + +int cpu_restore_state(TranslationBlock *tb, + CPUState *env, unsigned long searched_pc, + void *puc) + +{ + return 0; +} + +int cpu_x86_gen_code(CPUState *env, TranslationBlock *tb, int *gen_code_size_ptr) +{ + return 0; +} + +void flush_icache_range(unsigned long start, unsigned long stop) +{ +} + +void optimize_flags_init(void) +{ +} diff --git a/qemu/target-ppc/fake-exec.c b/qemu/target-ppc/fake-exec.c new file mode 100644 index 0000000..b042f58 --- /dev/null +++ b/qemu/target-ppc/fake-exec.c @@ -0,0 +1,75 @@ +/* + * fake-exec.c + * + * This is a file for stub functions so that compilation is possible + * when TCG CPU emulation is disabled during compilation. + * + * Copyright 2007 IBM Corporation. + * Added by & Authors: + * Jerone Young <[EMAIL PROTECTED]> + * This work is licensed under the GNU GPL licence version 2 or later. + * + */ + +#include <stdarg.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <inttypes.h> + +#include "cpu.h" +#include "exec-all.h" + +int code_copy_enabled = 0; + +void cpu_dump_state (CPUState *env, FILE *f, + int (*cpu_fprintf)(FILE *f, const char *fmt, ...), + int flags) +{ +} + +void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...)) +{ +} + +void cpu_dump_statistics (CPUState *env, FILE*f, + int (*cpu_fprintf)(FILE *f, const char *fmt, ...), + int flags) +{ +} + +unsigned long code_gen_max_block_size(void) +{ + return 32; +} + +void cpu_gen_init(void) +{ +} + +int cpu_restore_state(TranslationBlock *tb, + CPUState *env, unsigned long searched_pc, + void *puc) + +{ + return 0; +} + +int cpu_ppc_gen_code(CPUState *env, TranslationBlock *tb, int *gen_code_size_ptr) +{ + return 0; +} + +const ppc_def_t *cpu_ppc_find_by_name (const unsigned char *name) +{ + return NULL; +} + +int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def) +{ + return 0; +} + +void flush_icache_range(unsigned long start, unsigned long stop) +{ +} diff --git a/qemu/vl.c b/qemu/vl.c index 5e14c1a..3528bbf 100644 --- a/qemu/vl.c +++ b/qemu/vl.c @@ -8050,7 +8050,9 @@ static void help(int exitcode) "-no-kqemu disable KQEMU kernel module usage\n" #endif #ifdef USE_KVM +#ifndef NO_CPU_EMULATION "-no-kvm disable KVM hardware virtualization\n" +#endif "-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC\n" #endif #ifdef TARGET_I386 @@ -8250,7 +8252,9 @@ const QEMUOption qemu_options[] = { { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu }, #endif #ifdef USE_KVM +#ifndef NO_CPU_EMULATION { "no-kvm", 0, QEMU_OPTION_no_kvm }, +#endif { "no-kvm-irqchip", 0, QEMU_OPTION_no_kvm_irqchip }, #endif #if defined(TARGET_PPC) || defined(TARGET_SPARC) @@ -9266,6 +9270,10 @@ int main(int argc, char **argv) if (kvm_qemu_init() < 0) { extern int kvm_allowed; fprintf(stderr, "Could not initialize KVM, will disable KVM support\n"); +#ifdef NO_CPU_EMULATION + fprintf(stderr, "Compiled with --disable-cpu-emulation, exiting.\n"); + exit(1); +#endif kvm_allowed = 0; } } ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ kvm-commits mailing list kvm-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-commits