1f6482872SAlex Bennée# 2f6482872SAlex Bennée# Aarch64 system tests 3f6482872SAlex Bennée# 4f6482872SAlex Bennée 5*06dd94e8SGustavo RomeroAARCH64_SRC=$(SRC_PATH)/tests/tcg/aarch64 6*06dd94e8SGustavo RomeroAARCH64_SYSTEM_SRC=$(AARCH64_SRC)/system 7*06dd94e8SGustavo Romero 8f6482872SAlex BennéeVPATH+=$(AARCH64_SYSTEM_SRC) 9f6482872SAlex Bennée 10f6482872SAlex Bennée# These objects provide the basic boot code and helper functions for all tests 11f6482872SAlex BennéeCRT_OBJS=boot.o 12f6482872SAlex Bennée 13*06dd94e8SGustavo RomeroAARCH64_TEST_C_SRCS=$(wildcard $(AARCH64_SYSTEM_SRC)/*.c) 14*06dd94e8SGustavo RomeroAARCH64_TEST_S_SRCS=$(AARCH64_SYSTEM_SRC)/mte.S 15*06dd94e8SGustavo Romero 16*06dd94e8SGustavo RomeroAARCH64_C_TESTS = $(patsubst $(AARCH64_SYSTEM_SRC)/%.c, %, $(AARCH64_TEST_C_SRCS)) 17*06dd94e8SGustavo RomeroAARCH64_S_TESTS = $(patsubst $(AARCH64_SYSTEM_SRC)/%.S, %, $(AARCH64_TEST_S_SRCS)) 18*06dd94e8SGustavo Romero 19*06dd94e8SGustavo RomeroAARCH64_TESTS = $(AARCH64_C_TESTS) 20*06dd94e8SGustavo RomeroAARCH64_TESTS += $(AARCH64_S_TESTS) 21f6482872SAlex Bennée 22f6482872SAlex BennéeCRT_PATH=$(AARCH64_SYSTEM_SRC) 23f6482872SAlex BennéeLINK_SCRIPT=$(AARCH64_SYSTEM_SRC)/kernel.ld 24f6482872SAlex BennéeLDFLAGS=-Wl,-T$(LINK_SCRIPT) 25f6482872SAlex BennéeTESTS+=$(AARCH64_TESTS) $(MULTIARCH_TESTS) 26c00506aaSAlex BennéeEXTRA_RUNS+=$(MULTIARCH_RUNS) 27f6482872SAlex BennéeCFLAGS+=-nostdlib -ggdb -O0 $(MINILIB_INC) 28f6482872SAlex BennéeLDFLAGS+=-static -nostdlib $(CRT_OBJS) $(MINILIB_OBJS) -lgcc 29f6482872SAlex Bennée 3015b273f8SPaolo Bonziniconfig-cc.mak: Makefile 3115b273f8SPaolo Bonzini $(quiet-@)( \ 32*06dd94e8SGustavo Romero $(call cc-option,-march=armv8.3-a, CROSS_CC_HAS_ARMV8_3); \ 33*06dd94e8SGustavo Romero $(call cc-option,-march=armv8.5-a+memtag, CROSS_CC_HAS_ARMV8_MTE)) 3> config-cc.mak 3415b273f8SPaolo Bonzini-include config-cc.mak 3515b273f8SPaolo Bonzini 36f6482872SAlex Bennée# building head blobs 37f6482872SAlex Bennée.PRECIOUS: $(CRT_OBJS) 38f6482872SAlex Bennée 39f6482872SAlex Bennée%.o: $(CRT_PATH)/%.S 406c180490SRichard Henderson $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -x assembler-with-cpp -Wa,--noexecstack -c $< -o $@ 41f6482872SAlex Bennée 42f6482872SAlex Bennée# Build and link the tests 43f6482872SAlex Bennée%: %.c $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS) 446a9e0ef3SPaolo Bonzini $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) 45f6482872SAlex Bennée 467ac283e9SAlex Bennéememory: CFLAGS+=-DCHECK_UNALIGNED=1 477ac283e9SAlex Bennée 48d54c6d3bSAlex Bennéememory-sve: memory.c $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS) 49d54c6d3bSAlex Bennée $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) 50d54c6d3bSAlex Bennée 51e35562b3SRichard Hendersonmemory-sve: CFLAGS+=-DCHECK_UNALIGNED=1 -march=armv8.1-a+sve -O3 52d54c6d3bSAlex Bennée 53d54c6d3bSAlex BennéeTESTS+=memory-sve 54d54c6d3bSAlex Bennée 55f6482872SAlex Bennée# Running 569c354591SAlex BennéeQEMU_BASE_MACHINE=-M virt -cpu max -display none 578d37a142SPeter MaydellQEMU_BASE_ARGS=-semihosting-config enable=on,target=native,chardev=output 588d37a142SPeter MaydellQEMU_OPTS+=$(QEMU_BASE_MACHINE) $(QEMU_BASE_ARGS) -kernel 599c354591SAlex Bennée 609c354591SAlex Bennée# console test is manual only 611be75e24SAlex BennéeQEMU_SEMIHOST=-serial none -chardev stdio,mux=on,id=stdio0 -semihosting-config enable=on,chardev=stdio0 -mon chardev=stdio0,mode=readline 629c354591SAlex Bennéerun-semiconsole: QEMU_OPTS=$(QEMU_BASE_MACHINE) $(QEMU_SEMIHOST) -kernel 639c354591SAlex Bennéerun-semiconsole: semiconsole 649c354591SAlex Bennée $(call skip-test, $<, "MANUAL ONLY") 651be75e24SAlex Bennée $(if $(V),@printf " %-7s %s %s\n" "TO RUN" $(notdir $(QEMU)) "$(QEMU_OPTS) $<") 669c354591SAlex Bennéerun-plugin-semiconsole-with-%: semiconsole 679c354591SAlex Bennée $(call skip-test, $<, "MANUAL ONLY") 68b9fe0063SAlex Bennée 698d37a142SPeter Maydell# vtimer test needs EL2 708d37a142SPeter MaydellQEMU_EL2_MACHINE=-machine virt,virtualization=on,gic-version=2 -cpu cortex-a57 -smp 4 718d37a142SPeter Maydellrun-vtimer: QEMU_OPTS=$(QEMU_EL2_MACHINE) $(QEMU_BASE_ARGS) -kernel 728d37a142SPeter Maydell 73b9fe0063SAlex Bennée# Simple Record/Replay Test 74b9fe0063SAlex Bennée.PHONY: memory-record 75b9fe0063SAlex Bennéerun-memory-record: memory-record memory 76b9fe0063SAlex Bennée $(call run-test, $<, \ 77b9fe0063SAlex Bennée $(QEMU) -monitor none -display none \ 78b9fe0063SAlex Bennée -chardev file$(COMMA)path=$<.out$(COMMA)id=output \ 79b9fe0063SAlex Bennée -icount shift=5$(COMMA)rr=record$(COMMA)rrfile=record.bin \ 80c6cf8a20SPaolo Bonzini $(QEMU_OPTS) memory) 81b9fe0063SAlex Bennée 82b9fe0063SAlex Bennée.PHONY: memory-replay 83b9fe0063SAlex Bennéerun-memory-replay: memory-replay run-memory-record 84b9fe0063SAlex Bennée $(call run-test, $<, \ 85b9fe0063SAlex Bennée $(QEMU) -monitor none -display none \ 86b9fe0063SAlex Bennée -chardev file$(COMMA)path=$<.out$(COMMA)id=output \ 87b9fe0063SAlex Bennée -icount shift=5$(COMMA)rr=replay$(COMMA)rrfile=record.bin \ 88c6cf8a20SPaolo Bonzini $(QEMU_OPTS) memory) 89b9fe0063SAlex Bennée 90be9bc1b7SAlex BennéeEXTRA_RUNS+=run-memory-replay 9173fc0798SRichard Henderson 92f084839aSPaolo Bonziniifneq ($(CROSS_CC_HAS_ARMV8_3),) 93546215d3SRichard Hendersonpauth-3: CFLAGS += $(CROSS_CC_HAS_ARMV8_3) 94bb516dfcSAlex Bennéeelse 95bb516dfcSAlex Bennéepauth-3: 96bb516dfcSAlex Bennée $(call skip-test, "BUILD of $@", "missing compiler support") 97bb516dfcSAlex Bennéerun-pauth-3: 98bb516dfcSAlex Bennée $(call skip-test, "RUN of pauth-3", "not built") 99bb516dfcSAlex Bennéeendif 100*06dd94e8SGustavo Romero 101*06dd94e8SGustavo Romeroifneq ($(CROSS_CC_HAS_ARMV8_MTE),) 102*06dd94e8SGustavo RomeroQEMU_MTE_ENABLED_MACHINE=-M virt,mte=on -cpu max -display none 103*06dd94e8SGustavo RomeroQEMU_OPTS_WITH_MTE_ON = $(QEMU_MTE_ENABLED_MACHINE) $(QEMU_BASE_ARGS) -kernel 104*06dd94e8SGustavo Romeromte: CFLAGS+=-march=armv8.5-a+memtag 105*06dd94e8SGustavo Romeromte: mte.S $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS) 106*06dd94e8SGustavo Romero $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) 107*06dd94e8SGustavo Romero 108*06dd94e8SGustavo Romerorun-mte: QEMU_OPTS=$(QEMU_OPTS_WITH_MTE_ON) 109*06dd94e8SGustavo Romerorun-mte: mte 110*06dd94e8SGustavo Romero 111*06dd94e8SGustavo Romeroifeq ($(GDB_SUPPORTS_MTE_IN_BAREMETAL),y) 112*06dd94e8SGustavo Romerorun-gdbstub-mte: QEMU_OPTS=$(QEMU_OPTS_WITH_MTE_ON) 113*06dd94e8SGustavo Romerorun-gdbstub-mte: mte 114*06dd94e8SGustavo Romero $(call run-test, $@, $(GDB_SCRIPT) \ 115*06dd94e8SGustavo Romero --output run-gdbstub-mte.out \ 116*06dd94e8SGustavo Romero --gdb $(GDB) \ 117*06dd94e8SGustavo Romero --qemu $(QEMU) --qargs "-chardev null$(COMMA)id=output $(QEMU_OPTS)" \ 118*06dd94e8SGustavo Romero --bin $< --test $(AARCH64_SRC)/gdbstub/test-mte.py -- --mode=system, \ 119*06dd94e8SGustavo Romero gdbstub MTE support) 120*06dd94e8SGustavo Romero 121*06dd94e8SGustavo RomeroEXTRA_RUNS += run-gdbstub-mte 122*06dd94e8SGustavo Romeroelse # !GDB_SUPPORTS_MTE_IN_BAREMETAL 123*06dd94e8SGustavo Romerorun-gdbstub-mte: 124*06dd94e8SGustavo Romero $(call skip-test "RUN of gdbstub-mte", "GDB does not support MTE in baremetal!") 125*06dd94e8SGustavo Romeroendif 126*06dd94e8SGustavo Romeroelse # !CROSS_CC_HAS_ARMV8_MTE 127*06dd94e8SGustavo Romeromte: 128*06dd94e8SGustavo Romero $(call skip-test, "BUILD of $@", "missing compiler support") 129*06dd94e8SGustavo Romerorun-mte: 130*06dd94e8SGustavo Romero $(call skip-test, "RUN of mte", "not build") 131*06dd94e8SGustavo Romeroendif 132