[PATCH v7 040/104] tests/tcg/aarch64: user 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.target | 210 ------------------------------ tests/tcg/aarch64/meson.build | 205 +++++++++++++++++++++++++++++ tests/tcg/meson.build | 3 + 3 files changed, 208 insertions(+), 210 deletions(-) delete mode 100644 tests/tcg/aarch64/Makefile.target create mode 100644 tests/tcg/aarch64/meson.build diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target deleted file mode 100644 index 32f26892737..00000000000 --- a/tests/tcg/aarch64/Makefile.target +++ /dev/null @@ -1,210 +0,0 @@ -# -*- Mode: makefile -*- -# -# AArch64 specific tweaks - -ARM_SRC=$(SRC_PATH)/tests/tcg/arm -VPATH += $(ARM_SRC) - -AARCH64_SRC=$(SRC_PATH)/tests/tcg/aarch64 -VPATH += $(AARCH64_SRC) - -# Base architecture tests -AARCH64_TESTS=fcvt pcalign-a64 lse2-fault -AARCH64_TESTS += test-2248 test-2150 - -fcvt: LDFLAGS+=-lm - -run-fcvt: fcvt - $(call run-test,$<,$(QEMU) $<) - $(call diff-out,$<,$(AARCH64_SRC)/fcvt.ref) - -config-cc.mak: Makefile - $(quiet-@)( \ - fnia=`$(call cc-test,-fno-integrated-as) && echo -fno-integrated-as`; \ - $(call cc-option,-march=armv8.1-a+sve, CROSS_CC_HAS_SVE); \ - $(call cc-option,-march=armv8.1-a+sve2, CROSS_CC_HAS_SVE2); \ - $(call cc-option,-march=armv8.2-a, CROSS_CC_HAS_ARMV8_2); \ - $(call cc-option,-march=armv8.3-a, CROSS_CC_HAS_ARMV8_3); \ - $(call cc-option,-march=armv8.5-a, CROSS_CC_HAS_ARMV8_5); \ - $(call cc-option,-mbranch-protection=standard, CROSS_CC_HAS_ARMV8_BTI); \ - $(call cc-option,-march=armv8.5-a+memtag, CROSS_CC_HAS_ARMV8_MTE); \ - $(call cc-option,-Wa$(COMMA)-march=armv9-a+sme $$fnia, CROSS_AS_HAS_ARMV9_SME); \ - $(call cc-option,-march=armv9-a+fprcvt, CROSS_CC_HAS_ARMV9_FPRCVT)) 3> config-cc.mak --include config-cc.mak - -ifneq ($(CROSS_CC_HAS_ARMV9_FPRCVT),) -AARCH64_TESTS += fcvt-fprcvt -fcvt-fprcvt: LDFLAGS += -lm -fcvt-fprcvt: CFLAGS += $(CROSS_CC_HAS_ARMV9_FPRCVT) -DFPRCVT -fcvt-fprcvt: fcvt.c - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) -run-fcvt-fprcvt: fcvt-fprcvt - $(call run-test,$<,$(QEMU) $<) - $(call diff-out,$<,$(AARCH64_SRC)/fcvt.ref) -endif - -ifneq ($(CROSS_CC_HAS_ARMV8_2),) -AARCH64_TESTS += dcpop -dcpop: CFLAGS += $(CROSS_CC_HAS_ARMV8_2) -endif -ifneq ($(CROSS_CC_HAS_ARMV8_5),) -AARCH64_TESTS += dcpodp -dcpodp: CFLAGS += $(CROSS_CC_HAS_ARMV8_5) -endif - -# Pauth Tests -ifneq ($(CROSS_CC_HAS_ARMV8_3),) -AARCH64_TESTS += pauth-1 pauth-2 pauth-4 pauth-5 test-2375 -pauth-%: CFLAGS += $(CROSS_CC_HAS_ARMV8_3) -test-2375: CFLAGS += -march=armv8.3-a -run-pauth-1: QEMU_OPTS += -cpu max -run-pauth-2: QEMU_OPTS += -cpu max -# Choose a cpu with FEAT_Pauth but without FEAT_FPAC for pauth-[45]. -run-pauth-4: QEMU_OPTS += -cpu neoverse-v1 -run-pauth-5: QEMU_OPTS += -cpu neoverse-v1 -endif - -# BTI Tests -# bti-1 tests the elf notes, so we require special compiler support. -ifneq ($(CROSS_CC_HAS_ARMV8_BTI),) -AARCH64_TESTS += bti-1 bti-3 -bti-1 bti-3: CFLAGS += -fno-stack-protector $(CROSS_CC_HAS_ARMV8_BTI) -bti-1 bti-3: LDFLAGS += -nostdlib -endif -# bti-2 tests PROT_BTI, so no special compiler support required. -AARCH64_TESTS += bti-2 - -# MTE Tests -ifneq ($(CROSS_CC_HAS_ARMV8_MTE),) -AARCH64_TESTS += mte-1 mte-2 mte-3 mte-4 mte-5 mte-6 mte-7 mte-8 mte-9 mte-10 -mte-%: CFLAGS += $(CROSS_CC_HAS_ARMV8_MTE) -endif - -# SME Tests -ifneq ($(CROSS_AS_HAS_ARMV9_SME),) -SME_TESTS = sme-outprod1 sme-smopa-1 sme-smopa-2 sme-fmopa-1 sme-fmopa-2 sme-fmopa-3 -AARCH64_TESTS += $(SME_TESTS) -$(SME_TESTS): CFLAGS += $(CROSS_AS_HAS_ARMV9_SME) -endif - -# GCS Tests -GCS_TESTS += gcsstr gcspushm gcsss -AARCH64_TESTS += $(GCS_TESTS) -$(GCS_TESTS): gcs.h - -# System Registers Tests -AARCH64_TESTS += sysregs - -AARCH64_TESTS += test-aes -test-aes: CFLAGS += -O -march=armv8-a+aes -test-aes: test-aes-main.c.inc - -# Vector SHA1 -# Work around compiler false-positive warning, as we do for the 'sha1' test -sha1-vector: CFLAGS=-O3 -Wno-stringop-overread -sha1-vector: sha1.c - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) -run-sha1-vector: sha1-vector run-sha1 - $(call run-test, $<, $(QEMU) $(QEMU_OPTS) $<) - $(call diff-out, sha1-vector, sha1.out) - -TESTS += sha1-vector - -# Vector versions of sha512 (-O3 triggers vectorisation) -sha512-vector: CFLAGS=-O3 -sha512-vector: sha512.c - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) - -TESTS += sha512-vector - -ifneq ($(CROSS_CC_HAS_SVE),) -# SVE ioctl test -AARCH64_TESTS += sve-ioctls -sve-ioctls: CFLAGS += $(CROSS_CC_HAS_SVE) - -sha512-sve: CFLAGS=-O3 -march=armv8.1-a+sve -sha512-sve: sha512.c - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) - -sve-str: CFLAGS=-O1 -march=armv8.1-a+sve -sve-str: sve-str.c - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) - -TESTS += sha512-sve sve-str - -ifneq ($(GDB),) -GDB_SCRIPT=$(SRC_PATH)/tests/guest-debug/run-test.py - -run-gdbstub-sysregs: sysregs - $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(GDB) \ - --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ - --bin $< --test $(AARCH64_SRC)/gdbstub/test-sve.py, \ - basic gdbstub SVE support) - -run-gdbstub-sve-ioctls: sve-ioctls - $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(GDB) \ - --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ - --bin $< --test $(AARCH64_SRC)/gdbstub/test-sve-ioctl.py, \ - basic gdbstub SVE ZLEN support) - -EXTRA_RUNS += run-gdbstub-sysregs run-gdbstub-sve-ioctls - -ifneq ($(CROSS_AS_HAS_ARMV9_SME),) -# SME gdbstub tests - -run-gdbstub-sysregs-sme: sysregs - $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(GDB) \ - --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ - --bin $< --test $(AARCH64_SRC)/gdbstub/test-sme.py \ - -- test_sme --gdb_basic_za_test, \ - basic gdbstub SME support) - -ifeq ($(GDB_HAS_SME_TILES),y) -run-gdbstub-sysregs-sme-tile-slice: sysregs - $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(GDB) \ - --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ - --bin $< --test $(AARCH64_SRC)/gdbstub/test-sme.py \ - -- test_sme --gdb_tile_slice_test, \ - gdbstub SME ZA tile slice support) -else -run-gdbstub-sysregs-sme-tile-slice: sysregs - $(call skip-test,"gdbstub SME ZA tile slice support", \ - "selected gdb ($(GDB)) does not support SME ZA tile slices") -endif - -run-gdbstub-sysregs-sme2: sysregs - $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(GDB) \ - --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ - --bin $< --test $(AARCH64_SRC)/gdbstub/test-sme2.py, \ - gdbstub SME ZA tile slice support) - -EXTRA_RUNS += run-gdbstub-sysregs-sme run-gdbstub-sysregs-sme-tile-slice run-gdbstub-sysregs-sme2 - -endif - -ifeq ($(GDB_HAS_MTE),y) -run-gdbstub-mte: mte-8 - $(call run-test, $@, $(GDB_SCRIPT) \ - --gdb $(GDB) \ - --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ - --bin $< --test $(AARCH64_SRC)/gdbstub/test-mte.py \ - -- --mode=user, \ - gdbstub MTE support) - -EXTRA_RUNS += run-gdbstub-mte -endif - -endif -endif - -ifneq ($(CROSS_CC_HAS_SVE2),) -AARCH64_TESTS += test-826 -test-826: CFLAGS += $(CROSS_CC_HAS_SVE2) -endif - -TESTS += $(AARCH64_TESTS) diff --git a/tests/tcg/aarch64/meson.build b/tests/tcg/aarch64/meson.build new file mode 100644 index 00000000000..959d1cf698f --- /dev/null +++ b/tests/tcg/aarch64/meson.build @@ -0,0 +1,205 @@ +cc = 'aarch64-linux-gnu-gcc' +cc_dockerfile = 'debian-all-test-cross' +cc_docker_host_arch = ['aarch64', 'x86_64'] + +cc_feat_cflags = { + 'aes': '-march=armv8-a+aes', + 'sve': '-march=armv8.1-a+sve', + 'sve2': '-march=armv8.1-a+sve2', + 'v8.2': '-march=armv8.2-a', + 'v8.3': '-march=armv8.3-a', + 'v8.5': '-march=armv8.5-a', + 'bti': '-mbranch-protection=standard', + 'mte': '-march=armv8.5-a+memtag', + 'sme': '-Wa,-march=armv9-a+sme', + 'fprcvt': '-march=armv9-a+fprcvt', +} + +gdb_feat_version = { + 'sme-tiles': '14.1', + 'mte': '15.1', + 'mte-baremetal': '16.0', +} + +tests = [] + +# Multi arch tests +tests += tcg_tests['multiarch-linux-user']['tests'] + +# Base architecture tests +tests += { + '../arm/fcvt.c': {'cflags': '-lm', 'expected_output': 'fcvt.ref'}, + 'pcalign-a64.c': {}, + 'lse2-fault.c': {}, + 'test-2248.c': {}, + 'test-2150.c': {}, +} + +tests += {'dcpop.c': {'cc_feat': 'v8.2'}} +tests += {'dcpodp.c': {'cc_feat': 'v8.5'}} + +# Pauth Tests +cpu_max = ['-cpu', 'max'] +cpu_neoverse = ['-cpu', 'neoverse-v1'] +tests += { + 'test-2375.c': {'cc_feat': 'v8.3'}, + 'pauth-1.c': {'cc_feat': 'v8.3', 'qemu_args': cpu_max}, + 'pauth-2.c': {'cc_feat': 'v8.3', 'qemu_args': cpu_max}, + # Choose a cpu with FEAT_Pauth but without FEAT_FPAC for pauth-[45]. + 'pauth-4.c': {'cc_feat': 'v8.3', 'qemu_args': cpu_neoverse}, + 'pauth-5.c': {'cc_feat': 'v8.3', 'qemu_args': cpu_neoverse}, +} + +# BTI Tests +# bti-1 tests the elf notes, so we require special compiler support. +f = ['-fno-stack-protector', '-nostdlib'] +tests += { + 'bti-1.c': {'cc_feat': 'bti', 'cflags': f}, + 'bti-3.c': {'cc_feat': 'bti', 'cflags': f}, +} +# bti-2 tests PROT_BTI, so no special compiler support required. +tests += {'bti-2.c': {}} + +# MTE Tests +tests += { + 'mte-1.c': {'cc_feat': 'mte'}, + 'mte-2.c': {'cc_feat': 'mte'}, + 'mte-3.c': {'cc_feat': 'mte'}, + 'mte-4.c': {'cc_feat': 'mte'}, + 'mte-5.c': {'cc_feat': 'mte'}, + 'mte-6.c': {'cc_feat': 'mte'}, + 'mte-7.c': {'cc_feat': 'mte'}, + 'mte-8.c': {'cc_feat': 'mte'}, + 'mte-9.c': {'cc_feat': 'mte'}, + 'mte-10.c': {'cc_feat': 'mte'}, +} +tests += { + 'mte-8.c': { + 'gdb_test': ['--test', files('gdbstub/test-mte.py'), '--', '--mode=user'], + 'gdb_feat': 'mte', + } +} + +# SME Tests +tests += { + 'sme-outprod1.c': {'cc_feat': 'sme'}, + 'sme-smopa-1.c': {'cc_feat': 'sme'}, + 'sme-smopa-2.c': {'cc_feat': 'sme'}, + 'sme-fmopa-1.c': {'cc_feat': 'sme'}, + 'sme-fmopa-2.c': {'cc_feat': 'sme'}, + 'sme-fmopa-3.c': {'cc_feat': 'sme'}, +} +sysregs_sme = 'sysregs-sme' +tests += { + 'sysregs.c': { + 'exe_name': sysregs_sme, + 'cc_feat': 'sme', + 'gdb_test': ['--test', files('gdbstub/test-sme.py'), '--', + 'test_sme', '--gdb_basic_za_test'], + } +} +tests += { + 'sysregs.c': { + 'test_name': 'sysregs-sme-tile-slice', + 'exe_name': sysregs_sme, + 'gdb_test': ['--test', files('gdbstub/test-sme.py'), '--', + 'test_sme', '--gdb_tile_slice_test'], + 'gdb_feat': 'sme-tiles', + } +} +tests += { + 'sysregs.c': { + 'test_name': 'sysregs-sme2', + 'exe_name': sysregs_sme, + 'gdb_test': ['--test', files('gdbstub/test-sme2.py')], + } +} + +# GCS Tests +tests += { + 'gcsstr.c': {}, + 'gcspushm.c': {}, + 'gcsss.c': {}, +} + +# System Registers Tests +tests += {'sysregs.c': {}} + +# Crypto Tests +tests += {'test-aes.c': {'cc_feat': 'aes'}} + +# Vector SHA1 +# Work around compiler false-positive warning, as we do for the 'sha1' test +tests += {'../multiarch/sha1.c': { + 'exe_name': 'sha1-vector', + 'cflags': ['-O3', '-Wno-stringop-overread'], + 'expected_output': '../multiarch/sha1.ref', + }} + +# Vector versions of sha512 (-O3 triggers vectorisation) +tests += {'../multiarch/sha512.c': { + 'exe_name': 'sha512-vector', + 'cflags': ['-O3'], + }} + +# SVE Tests +tests += { + 'sve-ioctls.c': {'cc_feat': 'sve'}, + '../multiarch/sha512.c': { + 'exe_name': 'sha512-sve', + 'cc_feat': 'sve', + }, + 'sve-str.c': {'cc_feat': 'sve', 'cflags': ['-O1']}, +} +tests += { + 'sysregs.c': { + 'exe_name': 'sysregs-sve', + 'cc_feat': 'sve', + 'gdb_test': ['--test', files('gdbstub/test-sve.py')], + }, + 'sve-ioctls.c': { + 'gdb_test': ['--test', files('gdbstub/test-sve-ioctl.py')], + }, +} + +# SVE2 Tests +tests += {'test-826.c': {'cc_feat': 'sve2'}} + +# FPRCVT test +tests += { + '../arm/fcvt.c': { + 'exe_name': 'fcvt-fprcvt', + 'cflags': ['-DFPRCVT', '-lm'], + # fprcvt is available only from gcc-16. + # Use raw opcode until it's available in cross container. + # 'cc_feat': 'fprcvt', + 'expected_output': 'fcvt.ref'}, +} + +# Semihosting tests +# Add -I path for semicall.h +semihosting_cflags = ['-I', meson.current_source_dir()] + +tests += { + '../multiarch/arm-compat-semi/semiconsole.c': { + 'cflags': semihosting_cflags, + 'wrapper': [prog_run_with_input, 'X'], + }, + '../multiarch/arm-compat-semi/semihosting.c': {'cflags': semihosting_cflags}, +} + +if 'qemu-aarch64' in emulators + tcg_tests += { + 'aarch64-linux-user': { + 'cc': cc, + 'cc_dockerfile': cc_dockerfile, + 'cc_docker_host_arch': cc_docker_host_arch, + 'cc_feat_cflags': cc_feat_cflags, + 'folder': 'aarch64', + 'gdb_arch': 'aarch64', + 'gdb_feat_version': gdb_feat_version, + 'qemu': emulators['qemu-aarch64'], + 'tests': tests, + } + } +endif diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build index 16292d4d7b0..76d7dbe045b 100644 --- a/tests/tcg/meson.build +++ b/tests/tcg/meson.build @@ -135,6 +135,9 @@ foreach target: ['multiarch-linux-user', 'multiarch-softmmu'] tcg_tests += {target: {'tests': tests + plugin_tests}} endforeach +# Now let's go through all architectures +subdir('aarch64') + image_targets = {} exe_targets = [] # Finally, we can create all test executables and test targets -- 2.43.0