[PATCH v7 042/104] tests/tcg/aarch64: system tests
Pierrick Bouvier <[email protected]>
| Newsgroups | gmane.comp.emulators.qemu |
|---|---|
| Message-ID | <[email protected]> |
Tested-by: Aniket Sahu <[email protected]> Signed-off-by: Pierrick Bouvier <[email protected]> --- tests/tcg/aarch64/Makefile.softmmu-target | 147 ---------------------- tests/tcg/aarch64/meson.build | 2 + tests/tcg/aarch64/system/meson.build | 109 ++++++++++++++++ 3 files changed, 111 insertions(+), 147 deletions(-) delete mode 100644 tests/tcg/aarch64/Makefile.softmmu-target create mode 100644 tests/tcg/aarch64/system/meson.build diff --git a/tests/tcg/aarch64/Makefile.softmmu-target b/tests/tcg/aarch64/Makefile.softmmu-target deleted file mode 100644 index 3f30be6c5d6..00000000000 --- a/tests/tcg/aarch64/Makefile.softmmu-target +++ /dev/null @@ -1,147 +0,0 @@ -# -# Aarch64 system tests -# - -AARCH64_SRC=$(SRC_PATH)/tests/tcg/aarch64 -AARCH64_SYSTEM_SRC=$(AARCH64_SRC)/system - -VPATH+=$(AARCH64_SYSTEM_SRC) - -# These objects provide the basic boot code and helper functions for all tests -CRT_OBJS=boot.o - -AARCH64_TEST_C_SRCS=$(wildcard $(AARCH64_SYSTEM_SRC)/*.c) -AARCH64_TEST_S_SRCS=$(AARCH64_SYSTEM_SRC)/mte.S - -AARCH64_C_TESTS = $(patsubst $(AARCH64_SYSTEM_SRC)/%.c, %, $(AARCH64_TEST_C_SRCS)) -AARCH64_S_TESTS = $(patsubst $(AARCH64_SYSTEM_SRC)/%.S, %, $(AARCH64_TEST_S_SRCS)) - -AARCH64_TESTS = $(AARCH64_C_TESTS) -AARCH64_TESTS += $(AARCH64_S_TESTS) - -CRT_PATH=$(AARCH64_SYSTEM_SRC) -LINK_SCRIPT=$(AARCH64_SYSTEM_SRC)/kernel.ld -LDFLAGS=-Wl,-T$(LINK_SCRIPT) -TESTS+=$(AARCH64_TESTS) $(MULTIARCH_TESTS) -EXTRA_RUNS+=$(MULTIARCH_RUNS) -CFLAGS+=-nostdlib -ggdb -O0 $(MINILIB_INC) -LDFLAGS+=-static -nostdlib $(MINILIB_OBJS) -lgcc - -config-cc.mak: Makefile - $(quiet-@)( \ - $(call cc-option,-march=armv8.3-a, CROSS_CC_HAS_ARMV8_3); \ - $(call cc-option,-march=armv8.5-a+memtag, CROSS_CC_HAS_ARMV8_MTE)) 3> config-cc.mak --include config-cc.mak - -# building head blobs -.PRECIOUS: $(CRT_OBJS) - -vector_log_boot.o: $(CRT_PATH)/boot.S - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DLOGGING_VECTOR_TABLE -x assembler-with-cpp -Wa,--noexecstack -c $< -o $@ - -%.o: $(CRT_PATH)/%.S - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -x assembler-with-cpp -Wa,--noexecstack -c $< -o $@ - -# Build and link the tests -%: %.c $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) boot.o - -memory: CFLAGS+=-DCHECK_UNALIGNED=1 - -memory-sve: memory.c $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) boot.o - -memory-sve: CFLAGS+=-DCHECK_UNALIGNED=1 -march=armv8.1-a+sve -O3 - -gpc-test: gpc-test.c $(LINK_SCRIPT) vector_log_boot.o $(MINILIB_OBJS) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) vector_log_boot.o - -TESTS+=memory-sve gpc-test - -# Running -QEMU_BASE_MACHINE=-M virt -cpu max -display none -QEMU_BASE_ARGS=-semihosting-config enable=on,target=native,chardev=output -QEMU_OPTS+=$(QEMU_BASE_MACHINE) $(QEMU_BASE_ARGS) -kernel - -# console test is manual only -QEMU_SEMIHOST=-serial none -chardev stdio,mux=on,id=stdio0 -semihosting-config enable=on,chardev=stdio0 -mon chardev=stdio0,mode=readline -run-semiconsole: QEMU_OPTS=$(QEMU_BASE_MACHINE) $(QEMU_SEMIHOST) -kernel -run-semiconsole: semiconsole - $(call skip-test, $<, "MANUAL ONLY") - $(if $(V),@printf " %-7s %s %s\n" "TO RUN" $(notdir $(QEMU)) "$(QEMU_OPTS) $<") -run-plugin-semiconsole-with-%: semiconsole - $(call skip-test, $<, "MANUAL ONLY") - -# vtimer test needs EL2 -QEMU_EL2_MACHINE=-machine virt,virtualization=on,gic-version=2 -cpu cortex-a57 -smp 4 -QEMU_EL2_BASE_ARGS=-semihosting-config enable=on,target=native,chardev=output,arg="2" -run-vtimer: QEMU_OPTS=$(QEMU_EL2_MACHINE) $(QEMU_EL2_BASE_ARGS) -kernel - -# gpc tests need EL3 and RME -QEMU_EL3_MACHINE=-machine virt,virtualization=on,secure=on,gic-version=3 -cpu max,x-rme=on -QEMU_EL3_BASE_ARGS=-semihosting-config enable=on,target=native,chardev=output,arg="3" -run-gpc-test: QEMU_OPTS=$(QEMU_EL3_MACHINE) $(QEMU_EL3_BASE_ARGS) -kernel -run-gpc3-test: QEMU_OPTS=$(QEMU_EL3_MACHINE) $(QEMU_EL3_BASE_ARGS) -kernel - -# Simple Record/Replay Test -.PHONY: memory-record -run-memory-record: memory-record memory - $(call run-test, $<, \ - $(QEMU) -monitor none -display none \ - -chardev file$(COMMA)path=$<.out$(COMMA)id=output \ - -icount shift=5$(COMMA)rr=record$(COMMA)rrfile=record.bin \ - $(QEMU_OPTS) memory) - -.PHONY: memory-replay -run-memory-replay: memory-replay run-memory-record - $(call run-test, $<, \ - $(QEMU) -monitor none -display none \ - -chardev file$(COMMA)path=$<.out$(COMMA)id=output \ - -icount shift=5$(COMMA)rr=replay$(COMMA)rrfile=record.bin \ - $(QEMU_OPTS) memory) - -EXTRA_RUNS+=run-memory-replay - -ifneq ($(CROSS_CC_HAS_ARMV8_3),) -pauth-3: CFLAGS += $(CROSS_CC_HAS_ARMV8_3) -# This test explicitly checks the output of the pauth operation so we -# must force the use of the QARMA5 algorithm for it. -run-pauth-3: QEMU_BASE_MACHINE=-M virt -cpu max,pauth-qarma5=on -display none -else -pauth-3: - $(call skip-test, "BUILD of $@", "missing compiler support") -run-pauth-3: - $(call skip-test, "RUN of pauth-3", "not built") -endif - -ifneq ($(CROSS_CC_HAS_ARMV8_MTE),) -QEMU_MTE_ENABLED_MACHINE=-M virt,mte=on -cpu max -display none -QEMU_OPTS_WITH_MTE_ON = $(QEMU_MTE_ENABLED_MACHINE) $(QEMU_BASE_ARGS) -kernel -mte: CFLAGS+=-march=armv8.5-a+memtag -mte: mte.S $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) boot.o - -run-mte: QEMU_OPTS=$(QEMU_OPTS_WITH_MTE_ON) -run-mte: mte - -ifeq ($(GDB_SUPPORTS_MTE_IN_BAREMETAL),y) -run-gdbstub-mte: QEMU_OPTS=$(QEMU_OPTS_WITH_MTE_ON) -run-gdbstub-mte: mte - $(call run-test, $@, $(GDB_SCRIPT) \ - --output run-gdbstub-mte.out \ - --gdb $(GDB) \ - --qemu $(QEMU) --qargs "-chardev null$(COMMA)id=output $(QEMU_OPTS)" \ - --bin $< --test $(AARCH64_SRC)/gdbstub/test-mte.py -- --mode=system, \ - gdbstub MTE support) - -EXTRA_RUNS += run-gdbstub-mte -else # !GDB_SUPPORTS_MTE_IN_BAREMETAL -run-gdbstub-mte: - $(call skip-test "RUN of gdbstub-mte", "GDB does not support MTE in baremetal!") -endif -else # !CROSS_CC_HAS_ARMV8_MTE -mte: - $(call skip-test, "BUILD of $@", "missing compiler support") -run-mte: - $(call skip-test, "RUN of mte", "not build") -endif diff --git a/tests/tcg/aarch64/meson.build b/tests/tcg/aarch64/meson.build index 959d1cf698f..7301d004606 100644 --- a/tests/tcg/aarch64/meson.build +++ b/tests/tcg/aarch64/meson.build @@ -21,6 +21,8 @@ gdb_feat_version = { 'mte-baremetal': '16.0', } +subdir('system') + tests = [] # Multi arch tests diff --git a/tests/tcg/aarch64/system/meson.build b/tests/tcg/aarch64/system/meson.build new file mode 100644 index 00000000000..94e16ba3300 --- /dev/null +++ b/tests/tcg/aarch64/system/meson.build @@ -0,0 +1,109 @@ +tests = [] + +minilib_dir = meson.current_source_dir() / '..' / '..' / 'minilib' +minilib_printf = files(minilib_dir / 'printf.c')[0] +link_script = files('kernel.ld')[0] +boot = files('boot.S')[0] +cflags = ['-nostdlib', + '-ffreestanding', + '-Wa,--noexecstack', + '-I', minilib_dir, minilib_printf, boot, + '-Wl,-T', link_script] +qemu_base_args = ['-display', 'none', + '-semihosting-config', 'enable=on', + '-kernel'] +qemu_def_args = ['-M', 'virt', '-cpu', 'max', qemu_base_args] + +# Multi arch tests - add cflags only once per src +multi_src = [] +foreach t: tcg_tests['multiarch-softmmu']['tests'] + foreach src, setup: t + new_cflags = cflags + if fs.stem(src) == 'memory' + new_cflags += '-DCHECK_UNALIGNED=1' + endif + if src not in multi_src + setup += {'cflags': [new_cflags]} + multi_src += src + endif + tests += {src: setup + {'qemu_args': qemu_def_args}} + endforeach +endforeach + +tests += { + '../../multiarch/system/memory.c': { + 'exe_name': 'memory-sve', + 'cc_feat': 'sve', + 'cflags': [cflags, '-DCHECK_UNALIGNED=1', '-O3'], + 'qemu_args': qemu_def_args, + }, +} + +tests += { + 'asid2.c': {'cflags': cflags, 'qemu_args': qemu_def_args}, + 'feat-xs.c': {'cflags': cflags, 'qemu_args': qemu_def_args}, + 'gpc-test.c': { + 'cflags': [cflags, '-DLOGGING_VECTOR_TABLE', + '-Wno-main', '-Wno-unused-but-set-variable'], + 'qemu_args': ['-M', 'virt,secure=on,virtualization=on,gic-version=3', + '-cpu', 'max,x-rme=on', + '-semihosting-config', 'enable=on,arg=3', + qemu_base_args], + }, + 'rme_gdi.c': {'cflags': cflags, 'qemu_args': qemu_def_args}, + 'semiheap.c': {'cflags': cflags, 'qemu_args': qemu_def_args}, + 'semiconsole.c': { + 'cflags': cflags, + 'qemu_args': ['-serial', 'none', '-chardev', 'stdio,mux=on,id=stdio0', + '-semihosting-config', 'enable=on,chardev=stdio0', + '-mon', 'chardev=stdio0,mode=readline', + qemu_def_args], + 'wrapper': [prog_run_with_input, 'X'] + }, + '../../multiarch/system/memory.c': { + 'test_name': 'memory-record-replay', + 'qemu_args': qemu_def_args, + 'wrapper': [prog_record_replay], + }, + 'vtimer.c': { + 'cflags': cflags, + 'qemu_args': ['-M', 'virt,virtualization=on,gic-version=2', + '-cpu', 'cortex-a57', '-smp', '4', + '-semihosting-config', 'enable=on,arg=2', + qemu_base_args] + }, +} + +tests += { + 'pauth-3.c': { + 'cc_feat': 'v8.3', + 'cflags': cflags, + 'qemu_args': ['-M', 'virt', '-cpu', 'max,pauth-qarma5=on', qemu_base_args], + } +} + +tests += { + 'mte.S': { + 'cc_feat': 'mte', + 'cflags': cflags, + 'qemu_args': ['-M', 'virt,mte=on', '-cpu', 'max', qemu_base_args], + 'gdb_test': ['--test', files('../gdbstub/test-mte.py'), '--', '--mode=system'], + 'gdb_feat': 'mte-baremetal', + } +} + +if 'qemu-system-aarch64' in emulators + tcg_tests += { + 'aarch64-softmmu': { + 'cc': cc, + 'cc_dockerfile': cc_dockerfile, + 'cc_docker_host_arch': cc_docker_host_arch, + 'cc_feat_cflags': cc_feat_cflags, + 'folder': 'aarch64/system', + 'gdb_arch': 'aarch64', + 'gdb_feat_version': gdb_feat_version, + 'qemu': emulators['qemu-system-aarch64'], + 'tests': tests, + } + } +endif -- 2.43.0