diff --git a/config/config-x86-common.mak b/config/config-x86-common.mak index 0b0da85..0ddf5ad 100644 --- a/config/config-x86-common.mak +++ b/config/config-x86-common.mak @@ -105,6 +105,8 @@ $(TEST_DIR)/vmx.elf: $(cstart.o) $(TEST_DIR)/vmx.o $(TEST_DIR)/vmx_tests.o $(TEST_DIR)/debug.elf: $(cstart.o) $(TEST_DIR)/debug.o +$(TEST_DIR)/selfmodify.elf: $(cstart.o) $(TEST_DIR)/selfmodify.o + arch_clean: $(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \ $(TEST_DIR)/.*.d lib/x86/.*.d diff --git a/config/config-x86_64.mak b/config/config-x86_64.mak index 06b2581..edb22ca 100644 --- a/config/config-x86_64.mak +++ b/config/config-x86_64.mak @@ -9,5 +9,6 @@ tests = $(TEST_DIR)/access.flat $(TEST_DIR)/apic.flat \ $(TEST_DIR)/pcid.flat $(TEST_DIR)/debug.flat tests += $(TEST_DIR)/svm.flat tests += $(TEST_DIR)/vmx.flat +tests += $(TEST_DIR)/selfmodify.flat include config/config-x86-common.mak diff --git a/x86/run b/x86/run index 646c577..a35678f 100755 --- a/x86/run +++ b/x86/run @@ -33,7 +33,7 @@ else pc_testdev="-device testdev,chardev=testlog -chardev file,id=testlog,path=msr.out" fi -command="${qemu} -enable-kvm $pc_testdev -display none -serial stdio $pci_testdev -kernel" +command="${qemu} $pc_testdev -display none -serial stdio $pci_testdev -kernel" echo ${command} "$@" ${command} "$@" ret=$? diff --git a/x86/selfmodify.S b/x86/selfmodify.S new file mode 100644 index 0000000..8d985cc --- /dev/null +++ b/x86/selfmodify.S @@ -0,0 +1,20 @@ +geteip: + mov (%rsp), %rax + ret + +.global main +.type main, @function + +main: + movq $0x947B967B00000000, %rbx + call geteip + xorq %rbx, (%rax) + nop + jmp fail + jmp fail + xor %rax, %rax + retq + +fail: + movq $2, %rax + retq diff --git a/x86/unittests.cfg b/x86/unittests.cfg index 6d3e23a..646130b 100644 --- a/x86/unittests.cfg +++ b/x86/unittests.cfg @@ -6,6 +6,10 @@ # arch = i386/x86_64 # Only if the test case works only on one of them # groups = group1 group2 # Used to identify test cases with run_tests -g ... +[selfmodify] +file = selfmodify.flat +arch = x86_64 + [apic] file = apic.flat smp = 2