Message ID | 1386175377-23086-4-git-send-email-drjones@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Dec 04, 2013 at 05:42:51PM +0100, Andrew Jones wrote: > Remove all references to x86 from the root dir (except from in > configure). Also remove references from the root dir README > by moving that documentation to the x86/README, and touch up > the READMEs at the same time. > > Signed-off-by: Andrew Jones <drjones@redhat.com> > > --- > v2: > - tests' images => test images [Christoffer Dall] > > TODO: > - more documentation is still needed, we should add > * an overview of the framework > * improve the quickstart guide for running the tests > * add a quickstart guide for developing tests > --- > Makefile | 7 ++- > README | 55 +++++++++----------- > config-i386.mak | 13 ----- > config-x86-common.mak | 120 ------------------------------------------- > config-x86_64.mak | 14 ----- > config/config-i386.mak | 12 +++++ > config/config-x86-common.mak | 120 +++++++++++++++++++++++++++++++++++++++++++ > config/config-x86_64.mak | 13 +++++ > configure | 17 ++++++ > docs/testdev.txt | 11 ++++ > flat.lds | 21 -------- > run_tests.sh | 19 ++++--- > testdev.txt | 14 ----- > x86-run | 41 --------------- > x86/README | 60 +++++++++++++++++----- > x86/flat.lds | 21 ++++++++ > x86/run | 41 +++++++++++++++ > 17 files changed, 316 insertions(+), 283 deletions(-) > delete mode 100644 config-i386.mak > delete mode 100644 config-x86-common.mak > delete mode 100644 config-x86_64.mak > create mode 100644 config/config-i386.mak > create mode 100644 config/config-x86-common.mak > create mode 100644 config/config-x86_64.mak > create mode 100644 docs/testdev.txt > delete mode 100644 flat.lds > delete mode 100644 testdev.txt > delete mode 100755 x86-run > create mode 100644 x86/flat.lds > create mode 100755 x86/run > > diff --git a/Makefile b/Makefile > index 697fc2a766966..7a5ec8e6348bf 100644 > --- a/Makefile > +++ b/Makefile > @@ -17,7 +17,7 @@ cflatobjs := \ > lib/string.o > > #include architecure specific make rules > -include config-$(ARCH).mak > +include config/config-$(ARCH).mak > > # cc-option > # Usage: OP_CFLAGS+=$(call cc-option, -falign-functions=0, -malign-functions=0) > @@ -29,7 +29,6 @@ CFLAGS += $(autodepend-flags) -Wall > CFLAGS += $(call cc-option, -fomit-frame-pointer, "") > CFLAGS += $(call cc-option, -fno-stack-protector, "") > CFLAGS += $(call cc-option, -fno-stack-protector-all, "") > -CFLAGS += -I. > > CXXFLAGS += $(CFLAGS) > > @@ -44,11 +43,11 @@ $(libcflat): $(cflatobjs) > %.o: %.S > $(CC) $(CFLAGS) -c -nostdlib -o $@ $< > > --include .*.d */.*.d */*/.*.d > +-include */.*.d */*/.*.d > > install: > mkdir -p $(DESTDIR) > install $(tests_and_config) $(DESTDIR) > > clean: arch_clean > - $(RM) *.o *.a .*.d lib/.*.d $(libcflat) $(cflatobjs) > + $(RM) lib/.*.d $(libcflat) $(cflatobjs) so above you're referencing */.*.d and */*/.*.d but in make arch_clean we're only removing lib/.*.d ? > diff --git a/README b/README > index db525e3bbb79d..0174679c05021 100644 > --- a/README > +++ b/README > @@ -1,36 +1,27 @@ > This directory contains sources for a kvm test suite. > > -Tests for x86 architecture are run as kernel images for qemu that supports multiboot format. > -Tests uses an infrastructure called from the bios code. The infrastructure initialize the system/cpu's, > -switch to long-mode and calls the 'main' function of the individual test. > -Tests uses a qemu's virtual test device, named testdev, for services like printing, exiting, query memory size etc. > -See file testdev.txt for more details. > - > -To create the tests' images just type 'make' in this directory. > -Tests' images created in ./<ARCH>/*.flat > - > -An example of a test invocation: > -Using qemu-kvm: > - > -qemu-kvm -device testdev,chardev=testlog -chardev file,id=testlog,path=msr.out -serial stdio -kernel ./x86/msr.flat > -This invocation runs the msr test case. The test outputs to stdio. > - > -Using qemu (supported since qemu 1.3): > -qemu-system-x86_64 -enable-kvm -device pc-testdev -serial stdio -device isa-debug-exit,iobase=0xf4,iosize=0x4 -kernel ./x86/msr.flat > - > -Or use a runner script to detect the correct invocation: > -./x86-run ./x86/msr.flat > -To select a specific qemu binary, specify the QEMU=<path> environment: > -QEMU=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64 ./x86-run ./x86/msr.flat > - > -The exit status of the binary (and the script) is inconsistent: with > -qemu-system, after the unittest is done, the exit status of qemu is 1, > -different from the 'old style' qemu-kvm, whose exit status in successful > -completion is 0. > +To create the test images do > + ./configure > + make > +in this directory. Test images are created in ./<ARCH>/*.flat > + > +Then use the runner script to detect the correct invocation and > +invoke the test, e.g. > + ./x86-run ./x86/msr.flat > +or > + ./run_tests.sh > +to run them all. > + > +To select a specific qemu binary, specify the QEMU=<path> > +environment, e.g. > + QEMU=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64 ./x86-run ./x86/msr.flat > > Directory structure: > -.: Makefile and config files for the tests > -./lib: general services for the tests > -./lib/<ARCH>: architecture dependent services for the tests > -./<ARCH>: the sources of the tests and the created objects/images > - > +.: Makefile and config files for the tests > +./config: config files for the tests > +./docs: documentation files > +./lib: general services for the tests > +./lib/<ARCH>: architecture dependent services for the tests > +./<ARCH>: the sources of the tests and the created objects/images > + > +See <ARCH>/README for arch specific documentation. > diff --git a/config-i386.mak b/config-i386.mak > deleted file mode 100644 > index de52f3d53cff8..0000000000000 > --- a/config-i386.mak > +++ /dev/null > @@ -1,13 +0,0 @@ > -TEST_DIR=x86 > -cstart.o = $(TEST_DIR)/cstart.o > -bits = 32 > -ldarch = elf32-i386 > -CFLAGS += -D__i386__ > -CFLAGS += -I $(KERNELDIR)/include > - > -tests = $(TEST_DIR)/taskswitch.flat $(TEST_DIR)/taskswitch2.flat > - > -include config-x86-common.mak > - > -$(TEST_DIR)/taskswitch.elf: $(cstart.o) $(TEST_DIR)/taskswitch.o > -$(TEST_DIR)/taskswitch2.elf: $(cstart.o) $(TEST_DIR)/taskswitch2.o > diff --git a/config-x86-common.mak b/config-x86-common.mak > deleted file mode 100644 > index 7e481192a0737..0000000000000 > --- a/config-x86-common.mak > +++ /dev/null > @@ -1,120 +0,0 @@ > -#This is a make file with common rules for both x86 & x86-64 > - > -all: test_cases > - > -cflatobjs += lib/x86/io.o > -cflatobjs += lib/x86/smp.o > -cflatobjs += lib/x86/vm.o > -cflatobjs += lib/x86/fwcfg.o > -cflatobjs += lib/x86/apic.o > -cflatobjs += lib/x86/atomic.o > -cflatobjs += lib/x86/desc.o > -cflatobjs += lib/x86/isr.o > -cflatobjs += lib/x86/pci.o > - > -$(libcflat): LDFLAGS += -nostdlib > -$(libcflat): CFLAGS += -ffreestanding -I lib > - > -CFLAGS += -m$(bits) > -CFLAGS += -O1 > - > -libgcc := $(shell $(CC) -m$(bits) --print-libgcc-file-name) > - > -FLATLIBS = lib/libcflat.a $(libgcc) > -%.elf: %.o $(FLATLIBS) flat.lds > - $(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,flat.lds \ > - $(filter %.o, $^) $(FLATLIBS) > - > -%.flat: %.elf > - $(OBJCOPY) -O elf32-i386 $^ $@ > - > -tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \ > - $(TEST_DIR)/smptest.flat $(TEST_DIR)/port80.flat \ > - $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \ > - $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat \ > - $(TEST_DIR)/kvmclock_test.flat $(TEST_DIR)/eventinj.flat \ > - $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat \ > - $(TEST_DIR)/tsc_adjust.flat $(TEST_DIR)/asyncpf.flat \ > - $(TEST_DIR)/init.flat > - > -ifdef API > -tests-common += api/api-sample > -tests-common += api/dirty-log > -tests-common += api/dirty-log-perf > -endif > - > -tests_and_config = $(TEST_DIR)/*.flat $(TEST_DIR)/unittests.cfg > - > -test_cases: $(tests-common) $(tests) > - > -$(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I lib -I lib/x86 > - > -$(TEST_DIR)/access.elf: $(cstart.o) $(TEST_DIR)/access.o > - > -$(TEST_DIR)/hypercall.elf: $(cstart.o) $(TEST_DIR)/hypercall.o > - > -$(TEST_DIR)/sieve.elf: $(cstart.o) $(TEST_DIR)/sieve.o > - > -$(TEST_DIR)/vmexit.elf: $(cstart.o) $(TEST_DIR)/vmexit.o > - > -$(TEST_DIR)/smptest.elf: $(cstart.o) $(TEST_DIR)/smptest.o > - > -$(TEST_DIR)/emulator.elf: $(cstart.o) $(TEST_DIR)/emulator.o > - > -$(TEST_DIR)/port80.elf: $(cstart.o) $(TEST_DIR)/port80.o > - > -$(TEST_DIR)/tsc.elf: $(cstart.o) $(TEST_DIR)/tsc.o > - > -$(TEST_DIR)/tsc_adjust.elf: $(cstart.o) $(TEST_DIR)/tsc_adjust.o > - > -$(TEST_DIR)/apic.elf: $(cstart.o) $(TEST_DIR)/apic.o > - > -$(TEST_DIR)/init.elf: $(cstart.o) $(TEST_DIR)/init.o > - > -$(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o > - $(CC) -m32 -nostdlib -o $@ -Wl,-T,$(TEST_DIR)/realmode.lds $^ > - > -$(TEST_DIR)/realmode.o: bits = 32 > - > -$(TEST_DIR)/msr.elf: $(cstart.o) $(TEST_DIR)/msr.o > - > -$(TEST_DIR)/idt_test.elf: $(cstart.o) $(TEST_DIR)/idt_test.o > - > -$(TEST_DIR)/xsave.elf: $(cstart.o) $(TEST_DIR)/xsave.o > - > -$(TEST_DIR)/rmap_chain.elf: $(cstart.o) $(TEST_DIR)/rmap_chain.o > - > -$(TEST_DIR)/svm.elf: $(cstart.o) > - > -$(TEST_DIR)/kvmclock_test.elf: $(cstart.o) $(TEST_DIR)/kvmclock.o \ > - $(TEST_DIR)/kvmclock_test.o > - > -$(TEST_DIR)/eventinj.elf: $(cstart.o) $(TEST_DIR)/eventinj.o > - > -$(TEST_DIR)/s3.elf: $(cstart.o) $(TEST_DIR)/s3.o > - > -$(TEST_DIR)/pmu.elf: $(cstart.o) $(TEST_DIR)/pmu.o > - > -$(TEST_DIR)/asyncpf.elf: $(cstart.o) $(TEST_DIR)/asyncpf.o > - > -$(TEST_DIR)/pcid.elf: $(cstart.o) $(TEST_DIR)/pcid.o > - > -$(TEST_DIR)/vmx.elf: $(cstart.o) $(TEST_DIR)/vmx.o $(TEST_DIR)/vmx_tests.o > - > -arch_clean: > - $(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \ > - $(TEST_DIR)/.*.d lib/x86/.*.d > - > -api/%.o: CFLAGS += -m32 > - > -api/%: LDLIBS += -lstdc++ -lboost_thread-mt -lpthread -lrt > -api/%: LDFLAGS += -m32 > - > -api/libapi.a: api/kvmxx.o api/identity.o api/exception.o api/memmap.o > - $(AR) rcs $@ $^ > - > -api/api-sample: api/api-sample.o api/libapi.a > - > -api/dirty-log: api/dirty-log.o api/libapi.a > - > -api/dirty-log-perf: api/dirty-log-perf.o api/libapi.a > diff --git a/config-x86_64.mak b/config-x86_64.mak > deleted file mode 100644 > index bb8ee89713abd..0000000000000 > --- a/config-x86_64.mak > +++ /dev/null > @@ -1,14 +0,0 @@ > -TEST_DIR=x86 > -cstart.o = $(TEST_DIR)/cstart64.o > -bits = 64 > -ldarch = elf64-x86-64 > -CFLAGS += -D__x86_64__ > - > -tests = $(TEST_DIR)/access.flat $(TEST_DIR)/apic.flat \ > - $(TEST_DIR)/emulator.flat $(TEST_DIR)/idt_test.flat \ > - $(TEST_DIR)/xsave.flat $(TEST_DIR)/rmap_chain.flat \ > - $(TEST_DIR)/pcid.flat > -tests += $(TEST_DIR)/svm.flat > -tests += $(TEST_DIR)/vmx.flat > - > -include config-x86-common.mak > diff --git a/config/config-i386.mak b/config/config-i386.mak > new file mode 100644 > index 0000000000000..82fed0f5a48b0 > --- /dev/null > +++ b/config/config-i386.mak > @@ -0,0 +1,12 @@ > +cstart.o = $(TEST_DIR)/cstart.o > +bits = 32 > +ldarch = elf32-i386 > +CFLAGS += -D__i386__ > +CFLAGS += -I $(KERNELDIR)/include > + > +tests = $(TEST_DIR)/taskswitch.flat $(TEST_DIR)/taskswitch2.flat > + > +include config/config-x86-common.mak > + > +$(TEST_DIR)/taskswitch.elf: $(cstart.o) $(TEST_DIR)/taskswitch.o > +$(TEST_DIR)/taskswitch2.elf: $(cstart.o) $(TEST_DIR)/taskswitch2.o > diff --git a/config/config-x86-common.mak b/config/config-x86-common.mak > new file mode 100644 > index 0000000000000..917cbbf801a65 > --- /dev/null > +++ b/config/config-x86-common.mak > @@ -0,0 +1,120 @@ > +#This is a make file with common rules for both x86 & x86-64 > + > +all: test_cases > + > +cflatobjs += lib/x86/io.o > +cflatobjs += lib/x86/smp.o > +cflatobjs += lib/x86/vm.o > +cflatobjs += lib/x86/fwcfg.o > +cflatobjs += lib/x86/apic.o > +cflatobjs += lib/x86/atomic.o > +cflatobjs += lib/x86/desc.o > +cflatobjs += lib/x86/isr.o > +cflatobjs += lib/x86/pci.o > + > +$(libcflat): LDFLAGS += -nostdlib > +$(libcflat): CFLAGS += -ffreestanding -I lib > + > +CFLAGS += -m$(bits) > +CFLAGS += -O1 > + > +libgcc := $(shell $(CC) -m$(bits) --print-libgcc-file-name) > + > +FLATLIBS = lib/libcflat.a $(libgcc) > +%.elf: %.o $(FLATLIBS) x86/flat.lds > + $(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,x86/flat.lds \ > + $(filter %.o, $^) $(FLATLIBS) > + > +%.flat: %.elf > + $(OBJCOPY) -O elf32-i386 $^ $@ > + > +tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \ > + $(TEST_DIR)/smptest.flat $(TEST_DIR)/port80.flat \ > + $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \ > + $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat \ > + $(TEST_DIR)/kvmclock_test.flat $(TEST_DIR)/eventinj.flat \ > + $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat \ > + $(TEST_DIR)/tsc_adjust.flat $(TEST_DIR)/asyncpf.flat \ > + $(TEST_DIR)/init.flat > + > +ifdef API > +tests-common += api/api-sample > +tests-common += api/dirty-log > +tests-common += api/dirty-log-perf > +endif > + > +tests_and_config = $(TEST_DIR)/*.flat $(TEST_DIR)/unittests.cfg > + > +test_cases: $(tests-common) $(tests) > + > +$(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I lib -I lib/x86 > + > +$(TEST_DIR)/access.elf: $(cstart.o) $(TEST_DIR)/access.o > + > +$(TEST_DIR)/hypercall.elf: $(cstart.o) $(TEST_DIR)/hypercall.o > + > +$(TEST_DIR)/sieve.elf: $(cstart.o) $(TEST_DIR)/sieve.o > + > +$(TEST_DIR)/vmexit.elf: $(cstart.o) $(TEST_DIR)/vmexit.o > + > +$(TEST_DIR)/smptest.elf: $(cstart.o) $(TEST_DIR)/smptest.o > + > +$(TEST_DIR)/emulator.elf: $(cstart.o) $(TEST_DIR)/emulator.o > + > +$(TEST_DIR)/port80.elf: $(cstart.o) $(TEST_DIR)/port80.o > + > +$(TEST_DIR)/tsc.elf: $(cstart.o) $(TEST_DIR)/tsc.o > + > +$(TEST_DIR)/tsc_adjust.elf: $(cstart.o) $(TEST_DIR)/tsc_adjust.o > + > +$(TEST_DIR)/apic.elf: $(cstart.o) $(TEST_DIR)/apic.o > + > +$(TEST_DIR)/init.elf: $(cstart.o) $(TEST_DIR)/init.o > + > +$(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o > + $(CC) -m32 -nostdlib -o $@ -Wl,-T,$(TEST_DIR)/realmode.lds $^ > + > +$(TEST_DIR)/realmode.o: bits = 32 > + > +$(TEST_DIR)/msr.elf: $(cstart.o) $(TEST_DIR)/msr.o > + > +$(TEST_DIR)/idt_test.elf: $(cstart.o) $(TEST_DIR)/idt_test.o > + > +$(TEST_DIR)/xsave.elf: $(cstart.o) $(TEST_DIR)/xsave.o > + > +$(TEST_DIR)/rmap_chain.elf: $(cstart.o) $(TEST_DIR)/rmap_chain.o > + > +$(TEST_DIR)/svm.elf: $(cstart.o) > + > +$(TEST_DIR)/kvmclock_test.elf: $(cstart.o) $(TEST_DIR)/kvmclock.o \ > + $(TEST_DIR)/kvmclock_test.o > + > +$(TEST_DIR)/eventinj.elf: $(cstart.o) $(TEST_DIR)/eventinj.o > + > +$(TEST_DIR)/s3.elf: $(cstart.o) $(TEST_DIR)/s3.o > + > +$(TEST_DIR)/pmu.elf: $(cstart.o) $(TEST_DIR)/pmu.o > + > +$(TEST_DIR)/asyncpf.elf: $(cstart.o) $(TEST_DIR)/asyncpf.o > + > +$(TEST_DIR)/pcid.elf: $(cstart.o) $(TEST_DIR)/pcid.o > + > +$(TEST_DIR)/vmx.elf: $(cstart.o) $(TEST_DIR)/vmx.o $(TEST_DIR)/vmx_tests.o > + > +arch_clean: > + $(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \ > + $(TEST_DIR)/.*.d lib/x86/.*.d > + > +api/%.o: CFLAGS += -m32 > + > +api/%: LDLIBS += -lstdc++ -lboost_thread-mt -lpthread -lrt > +api/%: LDFLAGS += -m32 > + > +api/libapi.a: api/kvmxx.o api/identity.o api/exception.o api/memmap.o > + $(AR) rcs $@ $^ > + > +api/api-sample: api/api-sample.o api/libapi.a > + > +api/dirty-log: api/dirty-log.o api/libapi.a > + > +api/dirty-log-perf: api/dirty-log-perf.o api/libapi.a > diff --git a/config/config-x86_64.mak b/config/config-x86_64.mak > new file mode 100644 > index 0000000000000..f089b05a178c3 > --- /dev/null > +++ b/config/config-x86_64.mak > @@ -0,0 +1,13 @@ > +cstart.o = $(TEST_DIR)/cstart64.o > +bits = 64 > +ldarch = elf64-x86-64 > +CFLAGS += -D__x86_64__ > + > +tests = $(TEST_DIR)/access.flat $(TEST_DIR)/apic.flat \ > + $(TEST_DIR)/emulator.flat $(TEST_DIR)/idt_test.flat \ > + $(TEST_DIR)/xsave.flat $(TEST_DIR)/rmap_chain.flat \ > + $(TEST_DIR)/pcid.flat > +tests += $(TEST_DIR)/svm.flat > +tests += $(TEST_DIR)/vmx.flat > + > +include config/config-x86-common.mak > diff --git a/configure b/configure > index d0c62e24dd1d2..6cfc64943f6e6 100755 > --- a/configure > +++ b/configure > @@ -15,6 +15,7 @@ usage() { > Usage: $0 [options] > > Options include: > + --test-dir=DIR the main directory for tests ($arch) huh? why would you want to specify something different from arch here? > --arch=ARCH architecture to compile for ($arch) > --cross-prefix=PREFIX cross compiler prefix > --cc=CC c compiler to use ($cc) > @@ -33,6 +34,9 @@ while [[ "$1" = -* ]]; do > opt="${opt%%=*}" > fi > case "$opt" in > + --test-dir) > + testdir="$arg" > + ;; > --prefix) > prefix="$arg" > ;; > @@ -62,6 +66,18 @@ while [[ "$1" = -* ]]; do > ;; > esac > done > +if [ -z "$testdir" -a \( "$arch" = "i386" -o "$arch" = "x86_64" \) ]; then > + testdir=x86 > +elif [ -z "$testdir" ]; then > + testdir=$arch > +fi > +if [ ! -d $testdir ]; then > + echo "$testdir does not exist!" > + exit 1 > +fi > +if [ -f $testdir/run ]; then > + ln -fs $testdir/run $testdir-run > +fi > > # check for dependent 32 bit libraries > cat << EOF > lib_test.c > @@ -89,4 +105,5 @@ LD=$cross_prefix$ld > OBJCOPY=$cross_prefix$objcopy > AR=$cross_prefix$ar > API=$api > +TEST_DIR=$testdir > EOF > diff --git a/docs/testdev.txt b/docs/testdev.txt > new file mode 100644 > index 0000000000000..854b5c774b60c > --- /dev/null > +++ b/docs/testdev.txt > @@ -0,0 +1,11 @@ > +This file describes the virtual device of qemu for supporting this test suite. > + > +Services supplied by the testdev device: > + > +serial output: write only, on io port 0xf1 > +exit process: write only, on io port 0xf4, value used as exit code > +ram size: read-only, on io port 0xd1, 4 bytes' size > +irq line setting: write only, on io ports 0x2000 - 0x2018, value to set/clear > +simple io: read/write, on io port 0xe0, 1/2/4 bytes > + > +Test device used a char device for actual output what do you mean by this last sentence? > diff --git a/flat.lds b/flat.lds > deleted file mode 100644 > index a278b56c9a4e3..0000000000000 > --- a/flat.lds > +++ /dev/null > @@ -1,21 +0,0 @@ > -SECTIONS > -{ > - . = 4M + SIZEOF_HEADERS; > - stext = .; > - .text : { *(.init) *(.text) *(.text.*) } > - . = ALIGN(4K); > - .data : { > - *(.data) > - exception_table_start = .; > - *(.data.ex) > - exception_table_end = .; > - } > - . = ALIGN(16); > - .rodata : { *(.rodata) } > - . = ALIGN(16); > - .bss : { *(.bss) } > - . = ALIGN(4K); > - edata = .; > -} > - > -ENTRY(start) > diff --git a/run_tests.sh b/run_tests.sh > index f373c533b75b2..400c62458ae18 100755 > --- a/run_tests.sh > +++ b/run_tests.sh > @@ -1,8 +1,10 @@ > #!/bin/bash > > -testroot=x86 > -config=$testroot/unittests.cfg > -qemu=${qemu:-qemu-system-x86_64} > +# As it happens, config.mak is valid shell script code, too :-) > +source config.mak is this a well-established method of doing things or a hack? If the latter, sems like something that could quickly come and bite us. > + > +config=$TEST_DIR/unittests.cfg > +qemu=${QEMU:-qemu-system-$ARCH} > verbose=0 > > function run() > @@ -27,7 +29,7 @@ function run() > return > fi > > - cmdline="./x86-run $kernel -smp $smp $opts" > + cmdline="./$TEST_DIR-run $kernel -smp $smp $opts" > if [ $verbose != 0 ]; then > echo $cmdline > fi > @@ -65,7 +67,7 @@ function run_all() > groups="" > arch="" > elif [[ $line =~ ^file\ *=\ *(.*)$ ]]; then > - kernel=$testroot/${BASH_REMATCH[1]} > + kernel=$TEST_DIR/${BASH_REMATCH[1]} > elif [[ $line =~ ^smp\ *=\ *(.*)$ ]]; then > smp=${BASH_REMATCH[1]} > elif [[ $line =~ ^extra_params\ *=\ *(.*)$ ]]; then > @@ -92,15 +94,12 @@ Usage: $0 [-g group] [-h] [-v] > -h: Output this help text > -v: Enables verbose mode > > -Set the environment variable QEMU=/path/to/qemu-system-x86_64 to allow the > -internally used x86-run to pick up the right qemu binary. > +Set the environment variable QEMU=/path/to/qemu-system-ARCH to allow the > +internally used ARCH-run to pick up the right qemu binary. this message may not make a lot of sense to non kvm-unit-test devevelopers, why not say that it allows the user to specify which QEMU binary to use? > > EOF > } > > -# As it happens, config.mak is valid shell script code, too :-) > -source config.mak > - ah, I see, this hack/method was used before too, still relevant to consider if it's a good approach though... > echo > test.log > while getopts "g:hv" opt; do > case $opt in > diff --git a/testdev.txt b/testdev.txt > deleted file mode 100644 > index ac436efadb633..0000000000000 > --- a/testdev.txt > +++ /dev/null > @@ -1,14 +0,0 @@ > -This file describes the virtual device of qemu for supporting this test suite. > - > -Services supplied by the testdev device: > - > -serial output: write only, on io port 0xf1 > -exit process: write only, on io port 0xf4, value used as exit code > -ram size: read-only, on io port 0xd1, 4 bytes' size > -irq line setting: write only, on io ports 0x2000 - 0x2018, value to set/clear > -simple io: read/write, on io port 0xe0, 1/2/4 bytes > - > -Test device used a char device for actual output > - > - > - > diff --git a/x86-run b/x86-run > deleted file mode 100755 > index 646c5770ed03f..0000000000000 > --- a/x86-run > +++ /dev/null > @@ -1,41 +0,0 @@ > -#!/bin/bash > - > -qemukvm="${QEMU:-qemu-kvm}" > -qemusystem="${QEMU:-qemu-system-x86_64}" > -if > - ${qemukvm} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null; > -then > - qemu="${qemukvm}" > -else > - if > - ${qemusystem} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null; > - then > - qemu="${qemusystem}" > - else > - echo QEMU binary ${QEMU} has no support for test device. Exiting. > - exit 2 > - fi > -fi > - > -if > - ${qemu} -device '?' 2>&1 | grep -F "pci-testdev" > /dev/null; > -then > - pci_testdev="-device pci-testdev" > -else > - pci_testdev="" > -fi > - > -if > - ${qemu} -device '?' 2>&1 | grep -F "pc-testdev" > /dev/null; > -then > - pc_testdev="-device pc-testdev -device isa-debug-exit,iobase=0xf4,iosize=0x4" > -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" > -echo ${command} "$@" > -${command} "$@" > -ret=$? > -echo Return value from qemu: $ret > -exit $ret > diff --git a/x86/README b/x86/README > index d644abdf31708..2f4baa46c6ed1 100644 > --- a/x86/README > +++ b/x86/README > @@ -1,16 +1,48 @@ > + > +Tests for x86 architecture are run as kernel images for qemu that supports > +multiboot format. Tests uses an infrastructure called from the bios code. > +The infrastructure initialize the system/cpu's, switch to long-mode and calls > +the 'main' function of the individual test. Tests uses a qemu's virtual test Tests use > +device, named testdev, for services like printing, exiting, query memory > +size etc. See file docs/testdev.txt for more details. > + > +An example of a test invocation: > +Using qemu-kvm: > + > +qemu-kvm -device testdev,chardev=testlog \ > + -chardev file,id=testlog,path=msr.out \ > + -serial stdio -kernel ./x86/msr.flat > +This invocation runs the msr test case. The test outputs to stdio. > + > +Using qemu (supported since qemu 1.3): > +qemu-system-x86_64 -enable-kvm -device pc-testdev -serial stdio \ > + -device isa-debug-exit,iobase=0xf4,iosize=0x4 \ > + -kernel ./x86/msr.flat > + > Tests in this directory and what they do: > > -access: lots of page table related access (pte/pde) (read/write) > -apic: enable x2apic, self ipi, ioapic intr, ioapic simultaneous > -emulator: move to/from regs, cmps, push, pop, to/from cr8, smsw and lmsw > -hypercall: intel and amd hypercall insn > -msr: write to msr (only KERNEL_GS_BASE for now) > -port80: lots of out to port 80 > -realmode: goes back to realmode, shld, push/pop, mov immediate, cmp immediate, add immediate, > - io, eflags instructions (clc, cli, etc.), jcc short, jcc near, call, long jmp, xchg > -sieve: heavy memory access with no paging and with paging static and with paging vmalloc'ed > -smptest: run smp_id() on every cpu and compares return value to number > -tsc: write to tsc(0) and write to tsc(100000000000) and read it back > -vmexit: long loops for each: cpuid, vmcall, mov_from_cr8, mov_to_cr8, inl_pmtimer, ipi, ipi+halt > -kvmclock_test: test of wallclock, monotonic cycle and performance of kvmclock > -pcid: basic functionality test of PCID/INVPCID feature > \ No newline at end of file > + access: lots of page table related access (pte/pde) (read/write) > + apic: enable x2apic, self ipi, ioapic intr, ioapic simultaneous > + emulator: move to/from regs, cmps, push, pop, to/from cr8, smsw and lmsw > + hypercall: intel and amd hypercall insn > + msr: write to msr (only KERNEL_GS_BASE for now) > + port80: lots of out to port 80 > + realmode: goes back to realmode, shld, push/pop, mov immediate, > + cmp immediate, add immediate, io, eflags instructions > + (clc, cli, etc.), jcc short, jcc near, call, long jmp, xchg > + sieve: heavy memory access with no paging and with paging static and > + with paging vmalloc'ed > + smptest: run smp_id() on every cpu and compares return value to number > + tsc: write to tsc(0) and write to tsc(100000000000) and read it back > + vmexit: long loops for each: cpuid, vmcall, mov_from_cr8, mov_to_cr8, > + inl_pmtimer, ipi, ipi+halt > + kvmclock_test: test of wallclock, monotonic cycle and performance of kvmclock > + pcid: basic functionality test of PCID/INVPCID featureThis directory > + contains sources for a kvm test suite. > + > +Legacy notes: > + > + The exit status of the binary (and the script) is inconsistent: with > + qemu-system, after the unittest is done, the exit status of qemu is 1, > + different from the 'old style' qemu-kvm, whose exit status in successful > + completion is 0. > diff --git a/x86/flat.lds b/x86/flat.lds > new file mode 100644 > index 0000000000000..a278b56c9a4e3 > --- /dev/null > +++ b/x86/flat.lds > @@ -0,0 +1,21 @@ > +SECTIONS > +{ > + . = 4M + SIZEOF_HEADERS; > + stext = .; > + .text : { *(.init) *(.text) *(.text.*) } > + . = ALIGN(4K); > + .data : { > + *(.data) > + exception_table_start = .; > + *(.data.ex) > + exception_table_end = .; > + } > + . = ALIGN(16); > + .rodata : { *(.rodata) } > + . = ALIGN(16); > + .bss : { *(.bss) } > + . = ALIGN(4K); > + edata = .; > +} > + > +ENTRY(start) > diff --git a/x86/run b/x86/run > new file mode 100755 > index 0000000000000..646c5770ed03f > --- /dev/null > +++ b/x86/run > @@ -0,0 +1,41 @@ > +#!/bin/bash > + > +qemukvm="${QEMU:-qemu-kvm}" > +qemusystem="${QEMU:-qemu-system-x86_64}" > +if > + ${qemukvm} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null; > +then > + qemu="${qemukvm}" > +else > + if > + ${qemusystem} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null; > + then > + qemu="${qemusystem}" > + else > + echo QEMU binary ${QEMU} has no support for test device. Exiting. > + exit 2 > + fi > +fi > + > +if > + ${qemu} -device '?' 2>&1 | grep -F "pci-testdev" > /dev/null; > +then > + pci_testdev="-device pci-testdev" > +else > + pci_testdev="" > +fi > + > +if > + ${qemu} -device '?' 2>&1 | grep -F "pc-testdev" > /dev/null; > +then > + pc_testdev="-device pc-testdev -device isa-debug-exit,iobase=0xf4,iosize=0x4" > +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" > +echo ${command} "$@" > +${command} "$@" > +ret=$? > +echo Return value from qemu: $ret > +exit $ret > -- > 1.8.1.4 > > _______________________________________________ > kvmarm mailing list > kvmarm@lists.cs.columbia.edu > https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm
On Sat, Dec 28, 2013 at 10:30:12PM -0800, Christoffer Dall wrote: > > > > clean: arch_clean > > - $(RM) *.o *.a .*.d lib/.*.d $(libcflat) $(cflatobjs) > > + $(RM) lib/.*.d $(libcflat) $(cflatobjs) > > so above you're referencing */.*.d and */*/.*.d but in make arch_clean > we're only removing lib/.*.d ? There are no longer any source files in the root dir, allowing us to remove the 'rm *.o *.a .*.d' from this top-level makefile. arch_clean doesn't remove lib/.*.d. It only removes its arch-specific files, e.g. $(TEST_DIR)/* and lib/$(ARCH)/*. > > > > Options include: > > + --test-dir=DIR the main directory for tests ($arch) > > huh? why would you want to specify something different from arch here? $(TEST_DIR) isn't new with this patch, only the ability to specify it is. As a separate tidyup patch we could s/r TEST_DIR with ARCH to get rid of it, but it wouldn't gain us much, and would lose the ability to have a second testdir for the same arch (for what I don't know - maybe just for a scratch dir?) > > +Services supplied by the testdev device: > > + > > +serial output: write only, on io port 0xf1 > > +exit process: write only, on io port 0xf4, value used as exit code > > +ram size: read-only, on io port 0xd1, 4 bytes' size > > +irq line setting: write only, on io ports 0x2000 - 0x2018, value to set/clear > > +simple io: read/write, on io port 0xe0, 1/2/4 bytes > > + > > +Test device used a char device for actual output > > what do you mean by this last sentence? Don't shoot the file-mover :-) I didn't write it, but it looks like it's referring to how testdev (as opposed to pc-testdev) works, i.e. '-device testdev,chardev=testlog -chardev file,id=testlog,path=msr.out' > > +# As it happens, config.mak is valid shell script code, too :-) > > +source config.mak > > is this a well-established method of doing things or a hack? If the > latter, sems like something that could quickly come and bite us. As long as config.mak is only ever a list of 'key=value's, then I guess we're pretty safe. > > > > -Set the environment variable QEMU=/path/to/qemu-system-x86_64 to allow the > > -internally used x86-run to pick up the right qemu binary. > > +Set the environment variable QEMU=/path/to/qemu-system-ARCH to allow the > > +internally used ARCH-run to pick up the right qemu binary. > > this message may not make a lot of sense to non kvm-unit-test > devevelopers, why not say that it allows the user to specify which QEMU > binary to use? OK, tweaked it to Set the environment variable QEMU=/path/to/qemu-system-ARCH to specify the appropriate qemu binary for ARCH-run. > > > > > EOF > > } > > > > -# As it happens, config.mak is valid shell script code, too :-) > > -source config.mak > > - > > ah, I see, this hack/method was used before too, still relevant to > consider if it's a good approach though... yup, I think it's OK. > > + > > +Tests for x86 architecture are run as kernel images for qemu that supports > > +multiboot format. Tests uses an infrastructure called from the bios code. > > +The infrastructure initialize the system/cpu's, switch to long-mode and calls > > +the 'main' function of the individual test. Tests uses a qemu's virtual test > > Tests use fixed drew -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Jan 02, 2014 at 04:00:17PM +0100, Andrew Jones wrote: > On Sat, Dec 28, 2013 at 10:30:12PM -0800, Christoffer Dall wrote: > > > > > > clean: arch_clean > > > - $(RM) *.o *.a .*.d lib/.*.d $(libcflat) $(cflatobjs) > > > + $(RM) lib/.*.d $(libcflat) $(cflatobjs) > > > > so above you're referencing */.*.d and */*/.*.d but in make arch_clean > > we're only removing lib/.*.d ? > > There are no longer any source files in the root dir, allowing us to > remove the 'rm *.o *.a .*.d' from this top-level makefile. arch_clean > doesn't remove lib/.*.d. It only removes its arch-specific files, e.g. > $(TEST_DIR)/* and lib/$(ARCH)/*. > ah ok. > > > > > > Options include: > > > + --test-dir=DIR the main directory for tests ($arch) > > > > huh? why would you want to specify something different from arch here? > > $(TEST_DIR) isn't new with this patch, only the ability to specify it > is. As a separate tidyup patch we could s/r TEST_DIR with ARCH to get > rid of it, but it wouldn't gain us much, and would lose the ability to > have a second testdir for the same arch (for what I don't know - maybe > just for a scratch dir?) > hmm, ok, I don't know what the original intention with this patch was then. > > > +Services supplied by the testdev device: > > > + > > > +serial output: write only, on io port 0xf1 > > > +exit process: write only, on io port 0xf4, value used as exit code > > > +ram size: read-only, on io port 0xd1, 4 bytes' size > > > +irq line setting: write only, on io ports 0x2000 - 0x2018, value to set/clear > > > +simple io: read/write, on io port 0xe0, 1/2/4 bytes > > > + > > > +Test device used a char device for actual output > > > > what do you mean by this last sentence? > > Don't shoot the file-mover :-) I didn't write it, but it looks like > it's referring to how testdev (as opposed to pc-testdev) works, i.e. > '-device testdev,chardev=testlog -chardev file,id=testlog,path=msr.out' > ok, I'll let you off on that one then :) > > > +# As it happens, config.mak is valid shell script code, too :-) > > > +source config.mak > > > > is this a well-established method of doing things or a hack? If the > > latter, sems like something that could quickly come and bite us. > > As long as config.mak is only ever a list of 'key=value's, then I > guess we're pretty safe. > > > > > > > -Set the environment variable QEMU=/path/to/qemu-system-x86_64 to allow the > > > -internally used x86-run to pick up the right qemu binary. > > > +Set the environment variable QEMU=/path/to/qemu-system-ARCH to allow the > > > +internally used ARCH-run to pick up the right qemu binary. > > > > this message may not make a lot of sense to non kvm-unit-test > > devevelopers, why not say that it allows the user to specify which QEMU > > binary to use? > > OK, tweaked it to > Set the environment variable QEMU=/path/to/qemu-system-ARCH to specify > the appropriate qemu binary for ARCH-run. thanks! > > > > > > > > > EOF > > > } > > > > > > -# As it happens, config.mak is valid shell script code, too :-) > > > -source config.mak > > > - > > > > ah, I see, this hack/method was used before too, still relevant to > > consider if it's a good approach though... > > yup, I think it's OK. > > > > + > > > +Tests for x86 architecture are run as kernel images for qemu that supports > > > +multiboot format. Tests uses an infrastructure called from the bios code. > > > +The infrastructure initialize the system/cpu's, switch to long-mode and calls > > > +the 'main' function of the individual test. Tests uses a qemu's virtual test > > > > Tests use > > fixed > > drew
diff --git a/Makefile b/Makefile index 697fc2a766966..7a5ec8e6348bf 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ cflatobjs := \ lib/string.o #include architecure specific make rules -include config-$(ARCH).mak +include config/config-$(ARCH).mak # cc-option # Usage: OP_CFLAGS+=$(call cc-option, -falign-functions=0, -malign-functions=0) @@ -29,7 +29,6 @@ CFLAGS += $(autodepend-flags) -Wall CFLAGS += $(call cc-option, -fomit-frame-pointer, "") CFLAGS += $(call cc-option, -fno-stack-protector, "") CFLAGS += $(call cc-option, -fno-stack-protector-all, "") -CFLAGS += -I. CXXFLAGS += $(CFLAGS) @@ -44,11 +43,11 @@ $(libcflat): $(cflatobjs) %.o: %.S $(CC) $(CFLAGS) -c -nostdlib -o $@ $< --include .*.d */.*.d */*/.*.d +-include */.*.d */*/.*.d install: mkdir -p $(DESTDIR) install $(tests_and_config) $(DESTDIR) clean: arch_clean - $(RM) *.o *.a .*.d lib/.*.d $(libcflat) $(cflatobjs) + $(RM) lib/.*.d $(libcflat) $(cflatobjs) diff --git a/README b/README index db525e3bbb79d..0174679c05021 100644 --- a/README +++ b/README @@ -1,36 +1,27 @@ This directory contains sources for a kvm test suite. -Tests for x86 architecture are run as kernel images for qemu that supports multiboot format. -Tests uses an infrastructure called from the bios code. The infrastructure initialize the system/cpu's, -switch to long-mode and calls the 'main' function of the individual test. -Tests uses a qemu's virtual test device, named testdev, for services like printing, exiting, query memory size etc. -See file testdev.txt for more details. - -To create the tests' images just type 'make' in this directory. -Tests' images created in ./<ARCH>/*.flat - -An example of a test invocation: -Using qemu-kvm: - -qemu-kvm -device testdev,chardev=testlog -chardev file,id=testlog,path=msr.out -serial stdio -kernel ./x86/msr.flat -This invocation runs the msr test case. The test outputs to stdio. - -Using qemu (supported since qemu 1.3): -qemu-system-x86_64 -enable-kvm -device pc-testdev -serial stdio -device isa-debug-exit,iobase=0xf4,iosize=0x4 -kernel ./x86/msr.flat - -Or use a runner script to detect the correct invocation: -./x86-run ./x86/msr.flat -To select a specific qemu binary, specify the QEMU=<path> environment: -QEMU=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64 ./x86-run ./x86/msr.flat - -The exit status of the binary (and the script) is inconsistent: with -qemu-system, after the unittest is done, the exit status of qemu is 1, -different from the 'old style' qemu-kvm, whose exit status in successful -completion is 0. +To create the test images do + ./configure + make +in this directory. Test images are created in ./<ARCH>/*.flat + +Then use the runner script to detect the correct invocation and +invoke the test, e.g. + ./x86-run ./x86/msr.flat +or + ./run_tests.sh +to run them all. + +To select a specific qemu binary, specify the QEMU=<path> +environment, e.g. + QEMU=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64 ./x86-run ./x86/msr.flat Directory structure: -.: Makefile and config files for the tests -./lib: general services for the tests -./lib/<ARCH>: architecture dependent services for the tests -./<ARCH>: the sources of the tests and the created objects/images - +.: Makefile and config files for the tests +./config: config files for the tests +./docs: documentation files +./lib: general services for the tests +./lib/<ARCH>: architecture dependent services for the tests +./<ARCH>: the sources of the tests and the created objects/images + +See <ARCH>/README for arch specific documentation. diff --git a/config-i386.mak b/config-i386.mak deleted file mode 100644 index de52f3d53cff8..0000000000000 --- a/config-i386.mak +++ /dev/null @@ -1,13 +0,0 @@ -TEST_DIR=x86 -cstart.o = $(TEST_DIR)/cstart.o -bits = 32 -ldarch = elf32-i386 -CFLAGS += -D__i386__ -CFLAGS += -I $(KERNELDIR)/include - -tests = $(TEST_DIR)/taskswitch.flat $(TEST_DIR)/taskswitch2.flat - -include config-x86-common.mak - -$(TEST_DIR)/taskswitch.elf: $(cstart.o) $(TEST_DIR)/taskswitch.o -$(TEST_DIR)/taskswitch2.elf: $(cstart.o) $(TEST_DIR)/taskswitch2.o diff --git a/config-x86-common.mak b/config-x86-common.mak deleted file mode 100644 index 7e481192a0737..0000000000000 --- a/config-x86-common.mak +++ /dev/null @@ -1,120 +0,0 @@ -#This is a make file with common rules for both x86 & x86-64 - -all: test_cases - -cflatobjs += lib/x86/io.o -cflatobjs += lib/x86/smp.o -cflatobjs += lib/x86/vm.o -cflatobjs += lib/x86/fwcfg.o -cflatobjs += lib/x86/apic.o -cflatobjs += lib/x86/atomic.o -cflatobjs += lib/x86/desc.o -cflatobjs += lib/x86/isr.o -cflatobjs += lib/x86/pci.o - -$(libcflat): LDFLAGS += -nostdlib -$(libcflat): CFLAGS += -ffreestanding -I lib - -CFLAGS += -m$(bits) -CFLAGS += -O1 - -libgcc := $(shell $(CC) -m$(bits) --print-libgcc-file-name) - -FLATLIBS = lib/libcflat.a $(libgcc) -%.elf: %.o $(FLATLIBS) flat.lds - $(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,flat.lds \ - $(filter %.o, $^) $(FLATLIBS) - -%.flat: %.elf - $(OBJCOPY) -O elf32-i386 $^ $@ - -tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \ - $(TEST_DIR)/smptest.flat $(TEST_DIR)/port80.flat \ - $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \ - $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat \ - $(TEST_DIR)/kvmclock_test.flat $(TEST_DIR)/eventinj.flat \ - $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat \ - $(TEST_DIR)/tsc_adjust.flat $(TEST_DIR)/asyncpf.flat \ - $(TEST_DIR)/init.flat - -ifdef API -tests-common += api/api-sample -tests-common += api/dirty-log -tests-common += api/dirty-log-perf -endif - -tests_and_config = $(TEST_DIR)/*.flat $(TEST_DIR)/unittests.cfg - -test_cases: $(tests-common) $(tests) - -$(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I lib -I lib/x86 - -$(TEST_DIR)/access.elf: $(cstart.o) $(TEST_DIR)/access.o - -$(TEST_DIR)/hypercall.elf: $(cstart.o) $(TEST_DIR)/hypercall.o - -$(TEST_DIR)/sieve.elf: $(cstart.o) $(TEST_DIR)/sieve.o - -$(TEST_DIR)/vmexit.elf: $(cstart.o) $(TEST_DIR)/vmexit.o - -$(TEST_DIR)/smptest.elf: $(cstart.o) $(TEST_DIR)/smptest.o - -$(TEST_DIR)/emulator.elf: $(cstart.o) $(TEST_DIR)/emulator.o - -$(TEST_DIR)/port80.elf: $(cstart.o) $(TEST_DIR)/port80.o - -$(TEST_DIR)/tsc.elf: $(cstart.o) $(TEST_DIR)/tsc.o - -$(TEST_DIR)/tsc_adjust.elf: $(cstart.o) $(TEST_DIR)/tsc_adjust.o - -$(TEST_DIR)/apic.elf: $(cstart.o) $(TEST_DIR)/apic.o - -$(TEST_DIR)/init.elf: $(cstart.o) $(TEST_DIR)/init.o - -$(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o - $(CC) -m32 -nostdlib -o $@ -Wl,-T,$(TEST_DIR)/realmode.lds $^ - -$(TEST_DIR)/realmode.o: bits = 32 - -$(TEST_DIR)/msr.elf: $(cstart.o) $(TEST_DIR)/msr.o - -$(TEST_DIR)/idt_test.elf: $(cstart.o) $(TEST_DIR)/idt_test.o - -$(TEST_DIR)/xsave.elf: $(cstart.o) $(TEST_DIR)/xsave.o - -$(TEST_DIR)/rmap_chain.elf: $(cstart.o) $(TEST_DIR)/rmap_chain.o - -$(TEST_DIR)/svm.elf: $(cstart.o) - -$(TEST_DIR)/kvmclock_test.elf: $(cstart.o) $(TEST_DIR)/kvmclock.o \ - $(TEST_DIR)/kvmclock_test.o - -$(TEST_DIR)/eventinj.elf: $(cstart.o) $(TEST_DIR)/eventinj.o - -$(TEST_DIR)/s3.elf: $(cstart.o) $(TEST_DIR)/s3.o - -$(TEST_DIR)/pmu.elf: $(cstart.o) $(TEST_DIR)/pmu.o - -$(TEST_DIR)/asyncpf.elf: $(cstart.o) $(TEST_DIR)/asyncpf.o - -$(TEST_DIR)/pcid.elf: $(cstart.o) $(TEST_DIR)/pcid.o - -$(TEST_DIR)/vmx.elf: $(cstart.o) $(TEST_DIR)/vmx.o $(TEST_DIR)/vmx_tests.o - -arch_clean: - $(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \ - $(TEST_DIR)/.*.d lib/x86/.*.d - -api/%.o: CFLAGS += -m32 - -api/%: LDLIBS += -lstdc++ -lboost_thread-mt -lpthread -lrt -api/%: LDFLAGS += -m32 - -api/libapi.a: api/kvmxx.o api/identity.o api/exception.o api/memmap.o - $(AR) rcs $@ $^ - -api/api-sample: api/api-sample.o api/libapi.a - -api/dirty-log: api/dirty-log.o api/libapi.a - -api/dirty-log-perf: api/dirty-log-perf.o api/libapi.a diff --git a/config-x86_64.mak b/config-x86_64.mak deleted file mode 100644 index bb8ee89713abd..0000000000000 --- a/config-x86_64.mak +++ /dev/null @@ -1,14 +0,0 @@ -TEST_DIR=x86 -cstart.o = $(TEST_DIR)/cstart64.o -bits = 64 -ldarch = elf64-x86-64 -CFLAGS += -D__x86_64__ - -tests = $(TEST_DIR)/access.flat $(TEST_DIR)/apic.flat \ - $(TEST_DIR)/emulator.flat $(TEST_DIR)/idt_test.flat \ - $(TEST_DIR)/xsave.flat $(TEST_DIR)/rmap_chain.flat \ - $(TEST_DIR)/pcid.flat -tests += $(TEST_DIR)/svm.flat -tests += $(TEST_DIR)/vmx.flat - -include config-x86-common.mak diff --git a/config/config-i386.mak b/config/config-i386.mak new file mode 100644 index 0000000000000..82fed0f5a48b0 --- /dev/null +++ b/config/config-i386.mak @@ -0,0 +1,12 @@ +cstart.o = $(TEST_DIR)/cstart.o +bits = 32 +ldarch = elf32-i386 +CFLAGS += -D__i386__ +CFLAGS += -I $(KERNELDIR)/include + +tests = $(TEST_DIR)/taskswitch.flat $(TEST_DIR)/taskswitch2.flat + +include config/config-x86-common.mak + +$(TEST_DIR)/taskswitch.elf: $(cstart.o) $(TEST_DIR)/taskswitch.o +$(TEST_DIR)/taskswitch2.elf: $(cstart.o) $(TEST_DIR)/taskswitch2.o diff --git a/config/config-x86-common.mak b/config/config-x86-common.mak new file mode 100644 index 0000000000000..917cbbf801a65 --- /dev/null +++ b/config/config-x86-common.mak @@ -0,0 +1,120 @@ +#This is a make file with common rules for both x86 & x86-64 + +all: test_cases + +cflatobjs += lib/x86/io.o +cflatobjs += lib/x86/smp.o +cflatobjs += lib/x86/vm.o +cflatobjs += lib/x86/fwcfg.o +cflatobjs += lib/x86/apic.o +cflatobjs += lib/x86/atomic.o +cflatobjs += lib/x86/desc.o +cflatobjs += lib/x86/isr.o +cflatobjs += lib/x86/pci.o + +$(libcflat): LDFLAGS += -nostdlib +$(libcflat): CFLAGS += -ffreestanding -I lib + +CFLAGS += -m$(bits) +CFLAGS += -O1 + +libgcc := $(shell $(CC) -m$(bits) --print-libgcc-file-name) + +FLATLIBS = lib/libcflat.a $(libgcc) +%.elf: %.o $(FLATLIBS) x86/flat.lds + $(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,x86/flat.lds \ + $(filter %.o, $^) $(FLATLIBS) + +%.flat: %.elf + $(OBJCOPY) -O elf32-i386 $^ $@ + +tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \ + $(TEST_DIR)/smptest.flat $(TEST_DIR)/port80.flat \ + $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \ + $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat \ + $(TEST_DIR)/kvmclock_test.flat $(TEST_DIR)/eventinj.flat \ + $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat \ + $(TEST_DIR)/tsc_adjust.flat $(TEST_DIR)/asyncpf.flat \ + $(TEST_DIR)/init.flat + +ifdef API +tests-common += api/api-sample +tests-common += api/dirty-log +tests-common += api/dirty-log-perf +endif + +tests_and_config = $(TEST_DIR)/*.flat $(TEST_DIR)/unittests.cfg + +test_cases: $(tests-common) $(tests) + +$(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I lib -I lib/x86 + +$(TEST_DIR)/access.elf: $(cstart.o) $(TEST_DIR)/access.o + +$(TEST_DIR)/hypercall.elf: $(cstart.o) $(TEST_DIR)/hypercall.o + +$(TEST_DIR)/sieve.elf: $(cstart.o) $(TEST_DIR)/sieve.o + +$(TEST_DIR)/vmexit.elf: $(cstart.o) $(TEST_DIR)/vmexit.o + +$(TEST_DIR)/smptest.elf: $(cstart.o) $(TEST_DIR)/smptest.o + +$(TEST_DIR)/emulator.elf: $(cstart.o) $(TEST_DIR)/emulator.o + +$(TEST_DIR)/port80.elf: $(cstart.o) $(TEST_DIR)/port80.o + +$(TEST_DIR)/tsc.elf: $(cstart.o) $(TEST_DIR)/tsc.o + +$(TEST_DIR)/tsc_adjust.elf: $(cstart.o) $(TEST_DIR)/tsc_adjust.o + +$(TEST_DIR)/apic.elf: $(cstart.o) $(TEST_DIR)/apic.o + +$(TEST_DIR)/init.elf: $(cstart.o) $(TEST_DIR)/init.o + +$(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o + $(CC) -m32 -nostdlib -o $@ -Wl,-T,$(TEST_DIR)/realmode.lds $^ + +$(TEST_DIR)/realmode.o: bits = 32 + +$(TEST_DIR)/msr.elf: $(cstart.o) $(TEST_DIR)/msr.o + +$(TEST_DIR)/idt_test.elf: $(cstart.o) $(TEST_DIR)/idt_test.o + +$(TEST_DIR)/xsave.elf: $(cstart.o) $(TEST_DIR)/xsave.o + +$(TEST_DIR)/rmap_chain.elf: $(cstart.o) $(TEST_DIR)/rmap_chain.o + +$(TEST_DIR)/svm.elf: $(cstart.o) + +$(TEST_DIR)/kvmclock_test.elf: $(cstart.o) $(TEST_DIR)/kvmclock.o \ + $(TEST_DIR)/kvmclock_test.o + +$(TEST_DIR)/eventinj.elf: $(cstart.o) $(TEST_DIR)/eventinj.o + +$(TEST_DIR)/s3.elf: $(cstart.o) $(TEST_DIR)/s3.o + +$(TEST_DIR)/pmu.elf: $(cstart.o) $(TEST_DIR)/pmu.o + +$(TEST_DIR)/asyncpf.elf: $(cstart.o) $(TEST_DIR)/asyncpf.o + +$(TEST_DIR)/pcid.elf: $(cstart.o) $(TEST_DIR)/pcid.o + +$(TEST_DIR)/vmx.elf: $(cstart.o) $(TEST_DIR)/vmx.o $(TEST_DIR)/vmx_tests.o + +arch_clean: + $(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \ + $(TEST_DIR)/.*.d lib/x86/.*.d + +api/%.o: CFLAGS += -m32 + +api/%: LDLIBS += -lstdc++ -lboost_thread-mt -lpthread -lrt +api/%: LDFLAGS += -m32 + +api/libapi.a: api/kvmxx.o api/identity.o api/exception.o api/memmap.o + $(AR) rcs $@ $^ + +api/api-sample: api/api-sample.o api/libapi.a + +api/dirty-log: api/dirty-log.o api/libapi.a + +api/dirty-log-perf: api/dirty-log-perf.o api/libapi.a diff --git a/config/config-x86_64.mak b/config/config-x86_64.mak new file mode 100644 index 0000000000000..f089b05a178c3 --- /dev/null +++ b/config/config-x86_64.mak @@ -0,0 +1,13 @@ +cstart.o = $(TEST_DIR)/cstart64.o +bits = 64 +ldarch = elf64-x86-64 +CFLAGS += -D__x86_64__ + +tests = $(TEST_DIR)/access.flat $(TEST_DIR)/apic.flat \ + $(TEST_DIR)/emulator.flat $(TEST_DIR)/idt_test.flat \ + $(TEST_DIR)/xsave.flat $(TEST_DIR)/rmap_chain.flat \ + $(TEST_DIR)/pcid.flat +tests += $(TEST_DIR)/svm.flat +tests += $(TEST_DIR)/vmx.flat + +include config/config-x86-common.mak diff --git a/configure b/configure index d0c62e24dd1d2..6cfc64943f6e6 100755 --- a/configure +++ b/configure @@ -15,6 +15,7 @@ usage() { Usage: $0 [options] Options include: + --test-dir=DIR the main directory for tests ($arch) --arch=ARCH architecture to compile for ($arch) --cross-prefix=PREFIX cross compiler prefix --cc=CC c compiler to use ($cc) @@ -33,6 +34,9 @@ while [[ "$1" = -* ]]; do opt="${opt%%=*}" fi case "$opt" in + --test-dir) + testdir="$arg" + ;; --prefix) prefix="$arg" ;; @@ -62,6 +66,18 @@ while [[ "$1" = -* ]]; do ;; esac done +if [ -z "$testdir" -a \( "$arch" = "i386" -o "$arch" = "x86_64" \) ]; then + testdir=x86 +elif [ -z "$testdir" ]; then + testdir=$arch +fi +if [ ! -d $testdir ]; then + echo "$testdir does not exist!" + exit 1 +fi +if [ -f $testdir/run ]; then + ln -fs $testdir/run $testdir-run +fi # check for dependent 32 bit libraries cat << EOF > lib_test.c @@ -89,4 +105,5 @@ LD=$cross_prefix$ld OBJCOPY=$cross_prefix$objcopy AR=$cross_prefix$ar API=$api +TEST_DIR=$testdir EOF diff --git a/docs/testdev.txt b/docs/testdev.txt new file mode 100644 index 0000000000000..854b5c774b60c --- /dev/null +++ b/docs/testdev.txt @@ -0,0 +1,11 @@ +This file describes the virtual device of qemu for supporting this test suite. + +Services supplied by the testdev device: + +serial output: write only, on io port 0xf1 +exit process: write only, on io port 0xf4, value used as exit code +ram size: read-only, on io port 0xd1, 4 bytes' size +irq line setting: write only, on io ports 0x2000 - 0x2018, value to set/clear +simple io: read/write, on io port 0xe0, 1/2/4 bytes + +Test device used a char device for actual output diff --git a/flat.lds b/flat.lds deleted file mode 100644 index a278b56c9a4e3..0000000000000 --- a/flat.lds +++ /dev/null @@ -1,21 +0,0 @@ -SECTIONS -{ - . = 4M + SIZEOF_HEADERS; - stext = .; - .text : { *(.init) *(.text) *(.text.*) } - . = ALIGN(4K); - .data : { - *(.data) - exception_table_start = .; - *(.data.ex) - exception_table_end = .; - } - . = ALIGN(16); - .rodata : { *(.rodata) } - . = ALIGN(16); - .bss : { *(.bss) } - . = ALIGN(4K); - edata = .; -} - -ENTRY(start) diff --git a/run_tests.sh b/run_tests.sh index f373c533b75b2..400c62458ae18 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -1,8 +1,10 @@ #!/bin/bash -testroot=x86 -config=$testroot/unittests.cfg -qemu=${qemu:-qemu-system-x86_64} +# As it happens, config.mak is valid shell script code, too :-) +source config.mak + +config=$TEST_DIR/unittests.cfg +qemu=${QEMU:-qemu-system-$ARCH} verbose=0 function run() @@ -27,7 +29,7 @@ function run() return fi - cmdline="./x86-run $kernel -smp $smp $opts" + cmdline="./$TEST_DIR-run $kernel -smp $smp $opts" if [ $verbose != 0 ]; then echo $cmdline fi @@ -65,7 +67,7 @@ function run_all() groups="" arch="" elif [[ $line =~ ^file\ *=\ *(.*)$ ]]; then - kernel=$testroot/${BASH_REMATCH[1]} + kernel=$TEST_DIR/${BASH_REMATCH[1]} elif [[ $line =~ ^smp\ *=\ *(.*)$ ]]; then smp=${BASH_REMATCH[1]} elif [[ $line =~ ^extra_params\ *=\ *(.*)$ ]]; then @@ -92,15 +94,12 @@ Usage: $0 [-g group] [-h] [-v] -h: Output this help text -v: Enables verbose mode -Set the environment variable QEMU=/path/to/qemu-system-x86_64 to allow the -internally used x86-run to pick up the right qemu binary. +Set the environment variable QEMU=/path/to/qemu-system-ARCH to allow the +internally used ARCH-run to pick up the right qemu binary. EOF } -# As it happens, config.mak is valid shell script code, too :-) -source config.mak - echo > test.log while getopts "g:hv" opt; do case $opt in diff --git a/testdev.txt b/testdev.txt deleted file mode 100644 index ac436efadb633..0000000000000 --- a/testdev.txt +++ /dev/null @@ -1,14 +0,0 @@ -This file describes the virtual device of qemu for supporting this test suite. - -Services supplied by the testdev device: - -serial output: write only, on io port 0xf1 -exit process: write only, on io port 0xf4, value used as exit code -ram size: read-only, on io port 0xd1, 4 bytes' size -irq line setting: write only, on io ports 0x2000 - 0x2018, value to set/clear -simple io: read/write, on io port 0xe0, 1/2/4 bytes - -Test device used a char device for actual output - - - diff --git a/x86-run b/x86-run deleted file mode 100755 index 646c5770ed03f..0000000000000 --- a/x86-run +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -qemukvm="${QEMU:-qemu-kvm}" -qemusystem="${QEMU:-qemu-system-x86_64}" -if - ${qemukvm} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null; -then - qemu="${qemukvm}" -else - if - ${qemusystem} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null; - then - qemu="${qemusystem}" - else - echo QEMU binary ${QEMU} has no support for test device. Exiting. - exit 2 - fi -fi - -if - ${qemu} -device '?' 2>&1 | grep -F "pci-testdev" > /dev/null; -then - pci_testdev="-device pci-testdev" -else - pci_testdev="" -fi - -if - ${qemu} -device '?' 2>&1 | grep -F "pc-testdev" > /dev/null; -then - pc_testdev="-device pc-testdev -device isa-debug-exit,iobase=0xf4,iosize=0x4" -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" -echo ${command} "$@" -${command} "$@" -ret=$? -echo Return value from qemu: $ret -exit $ret diff --git a/x86/README b/x86/README index d644abdf31708..2f4baa46c6ed1 100644 --- a/x86/README +++ b/x86/README @@ -1,16 +1,48 @@ + +Tests for x86 architecture are run as kernel images for qemu that supports +multiboot format. Tests uses an infrastructure called from the bios code. +The infrastructure initialize the system/cpu's, switch to long-mode and calls +the 'main' function of the individual test. Tests uses a qemu's virtual test +device, named testdev, for services like printing, exiting, query memory +size etc. See file docs/testdev.txt for more details. + +An example of a test invocation: +Using qemu-kvm: + +qemu-kvm -device testdev,chardev=testlog \ + -chardev file,id=testlog,path=msr.out \ + -serial stdio -kernel ./x86/msr.flat +This invocation runs the msr test case. The test outputs to stdio. + +Using qemu (supported since qemu 1.3): +qemu-system-x86_64 -enable-kvm -device pc-testdev -serial stdio \ + -device isa-debug-exit,iobase=0xf4,iosize=0x4 \ + -kernel ./x86/msr.flat + Tests in this directory and what they do: -access: lots of page table related access (pte/pde) (read/write) -apic: enable x2apic, self ipi, ioapic intr, ioapic simultaneous -emulator: move to/from regs, cmps, push, pop, to/from cr8, smsw and lmsw -hypercall: intel and amd hypercall insn -msr: write to msr (only KERNEL_GS_BASE for now) -port80: lots of out to port 80 -realmode: goes back to realmode, shld, push/pop, mov immediate, cmp immediate, add immediate, - io, eflags instructions (clc, cli, etc.), jcc short, jcc near, call, long jmp, xchg -sieve: heavy memory access with no paging and with paging static and with paging vmalloc'ed -smptest: run smp_id() on every cpu and compares return value to number -tsc: write to tsc(0) and write to tsc(100000000000) and read it back -vmexit: long loops for each: cpuid, vmcall, mov_from_cr8, mov_to_cr8, inl_pmtimer, ipi, ipi+halt -kvmclock_test: test of wallclock, monotonic cycle and performance of kvmclock -pcid: basic functionality test of PCID/INVPCID feature \ No newline at end of file + access: lots of page table related access (pte/pde) (read/write) + apic: enable x2apic, self ipi, ioapic intr, ioapic simultaneous + emulator: move to/from regs, cmps, push, pop, to/from cr8, smsw and lmsw + hypercall: intel and amd hypercall insn + msr: write to msr (only KERNEL_GS_BASE for now) + port80: lots of out to port 80 + realmode: goes back to realmode, shld, push/pop, mov immediate, + cmp immediate, add immediate, io, eflags instructions + (clc, cli, etc.), jcc short, jcc near, call, long jmp, xchg + sieve: heavy memory access with no paging and with paging static and + with paging vmalloc'ed + smptest: run smp_id() on every cpu and compares return value to number + tsc: write to tsc(0) and write to tsc(100000000000) and read it back + vmexit: long loops for each: cpuid, vmcall, mov_from_cr8, mov_to_cr8, + inl_pmtimer, ipi, ipi+halt + kvmclock_test: test of wallclock, monotonic cycle and performance of kvmclock + pcid: basic functionality test of PCID/INVPCID featureThis directory + contains sources for a kvm test suite. + +Legacy notes: + + The exit status of the binary (and the script) is inconsistent: with + qemu-system, after the unittest is done, the exit status of qemu is 1, + different from the 'old style' qemu-kvm, whose exit status in successful + completion is 0. diff --git a/x86/flat.lds b/x86/flat.lds new file mode 100644 index 0000000000000..a278b56c9a4e3 --- /dev/null +++ b/x86/flat.lds @@ -0,0 +1,21 @@ +SECTIONS +{ + . = 4M + SIZEOF_HEADERS; + stext = .; + .text : { *(.init) *(.text) *(.text.*) } + . = ALIGN(4K); + .data : { + *(.data) + exception_table_start = .; + *(.data.ex) + exception_table_end = .; + } + . = ALIGN(16); + .rodata : { *(.rodata) } + . = ALIGN(16); + .bss : { *(.bss) } + . = ALIGN(4K); + edata = .; +} + +ENTRY(start) diff --git a/x86/run b/x86/run new file mode 100755 index 0000000000000..646c5770ed03f --- /dev/null +++ b/x86/run @@ -0,0 +1,41 @@ +#!/bin/bash + +qemukvm="${QEMU:-qemu-kvm}" +qemusystem="${QEMU:-qemu-system-x86_64}" +if + ${qemukvm} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null; +then + qemu="${qemukvm}" +else + if + ${qemusystem} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null; + then + qemu="${qemusystem}" + else + echo QEMU binary ${QEMU} has no support for test device. Exiting. + exit 2 + fi +fi + +if + ${qemu} -device '?' 2>&1 | grep -F "pci-testdev" > /dev/null; +then + pci_testdev="-device pci-testdev" +else + pci_testdev="" +fi + +if + ${qemu} -device '?' 2>&1 | grep -F "pc-testdev" > /dev/null; +then + pc_testdev="-device pc-testdev -device isa-debug-exit,iobase=0xf4,iosize=0x4" +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" +echo ${command} "$@" +${command} "$@" +ret=$? +echo Return value from qemu: $ret +exit $ret
Remove all references to x86 from the root dir (except from in configure). Also remove references from the root dir README by moving that documentation to the x86/README, and touch up the READMEs at the same time. Signed-off-by: Andrew Jones <drjones@redhat.com> --- v2: - tests' images => test images [Christoffer Dall] TODO: - more documentation is still needed, we should add * an overview of the framework * improve the quickstart guide for running the tests * add a quickstart guide for developing tests --- Makefile | 7 ++- README | 55 +++++++++----------- config-i386.mak | 13 ----- config-x86-common.mak | 120 ------------------------------------------- config-x86_64.mak | 14 ----- config/config-i386.mak | 12 +++++ config/config-x86-common.mak | 120 +++++++++++++++++++++++++++++++++++++++++++ config/config-x86_64.mak | 13 +++++ configure | 17 ++++++ docs/testdev.txt | 11 ++++ flat.lds | 21 -------- run_tests.sh | 19 ++++--- testdev.txt | 14 ----- x86-run | 41 --------------- x86/README | 60 +++++++++++++++++----- x86/flat.lds | 21 ++++++++ x86/run | 41 +++++++++++++++ 17 files changed, 316 insertions(+), 283 deletions(-) delete mode 100644 config-i386.mak delete mode 100644 config-x86-common.mak delete mode 100644 config-x86_64.mak create mode 100644 config/config-i386.mak create mode 100644 config/config-x86-common.mak create mode 100644 config/config-x86_64.mak create mode 100644 docs/testdev.txt delete mode 100644 flat.lds delete mode 100644 testdev.txt delete mode 100755 x86-run create mode 100644 x86/flat.lds create mode 100755 x86/run