master
softmmu-target 147 lines 5.2 KB
Raw
1 #
2 # Aarch64 system tests
3 #
4
5 AARCH64_SRC=$(SRC_PATH)/tests/tcg/aarch64
6 AARCH64_SYSTEM_SRC=$(AARCH64_SRC)/system
7
8 VPATH+=$(AARCH64_SYSTEM_SRC)
9
10 # These objects provide the basic boot code and helper functions for all tests
11 CRT_OBJS=boot.o
12
13 AARCH64_TEST_C_SRCS=$(wildcard $(AARCH64_SYSTEM_SRC)/*.c)
14 AARCH64_TEST_S_SRCS=$(AARCH64_SYSTEM_SRC)/mte.S
15
16 AARCH64_C_TESTS = $(patsubst $(AARCH64_SYSTEM_SRC)/%.c, %, $(AARCH64_TEST_C_SRCS))
17 AARCH64_S_TESTS = $(patsubst $(AARCH64_SYSTEM_SRC)/%.S, %, $(AARCH64_TEST_S_SRCS))
18
19 AARCH64_TESTS = $(AARCH64_C_TESTS)
20 AARCH64_TESTS += $(AARCH64_S_TESTS)
21
22 CRT_PATH=$(AARCH64_SYSTEM_SRC)
23 LINK_SCRIPT=$(AARCH64_SYSTEM_SRC)/kernel.ld
24 LDFLAGS=-Wl,-T$(LINK_SCRIPT)
25 TESTS+=$(AARCH64_TESTS) $(MULTIARCH_TESTS)
26 EXTRA_RUNS+=$(MULTIARCH_RUNS)
27 CFLAGS+=-nostdlib -ggdb -O0 $(MINILIB_INC)
28 LDFLAGS+=-static -nostdlib $(MINILIB_OBJS) -lgcc
29
30 config-cc.mak: Makefile
31 $(quiet-@)( \
32 $(call cc-option,-march=armv8.3-a, CROSS_CC_HAS_ARMV8_3); \
33 $(call cc-option,-march=armv8.5-a+memtag, CROSS_CC_HAS_ARMV8_MTE)) 3> config-cc.mak
34 -include config-cc.mak
35
36 # building head blobs
37 .PRECIOUS: $(CRT_OBJS)
38
39 vector_log_boot.o: $(CRT_PATH)/boot.S
40 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DLOGGING_VECTOR_TABLE -x assembler-with-cpp -Wa,--noexecstack -c $< -o $@
41
42 %.o: $(CRT_PATH)/%.S
43 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -x assembler-with-cpp -Wa,--noexecstack -c $< -o $@
44
45 # Build and link the tests
46 %: %.c $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS)
47 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) boot.o
48
49 memory: CFLAGS+=-DCHECK_UNALIGNED=1
50
51 memory-sve: memory.c $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS)
52 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) boot.o
53
54 memory-sve: CFLAGS+=-DCHECK_UNALIGNED=1 -march=armv8.1-a+sve -O3
55
56 gpc-test: gpc-test.c $(LINK_SCRIPT) vector_log_boot.o $(MINILIB_OBJS)
57 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) vector_log_boot.o
58
59 TESTS+=memory-sve gpc-test
60
61 # Running
62 QEMU_BASE_MACHINE=-M virt -cpu max -display none
63 QEMU_BASE_ARGS=-semihosting-config enable=on,target=native,chardev=output
64 QEMU_OPTS+=$(QEMU_BASE_MACHINE) $(QEMU_BASE_ARGS) -kernel
65
66 # console test is manual only
67 QEMU_SEMIHOST=-serial none -chardev stdio,mux=on,id=stdio0 -semihosting-config enable=on,chardev=stdio0 -mon chardev=stdio0,mode=readline
68 run-semiconsole: QEMU_OPTS=$(QEMU_BASE_MACHINE) $(QEMU_SEMIHOST) -kernel
69 run-semiconsole: semiconsole
70 $(call skip-test, $<, "MANUAL ONLY")
71 $(if $(V),@printf " %-7s %s %s\n" "TO RUN" $(notdir $(QEMU)) "$(QEMU_OPTS) $<")
72 run-plugin-semiconsole-with-%: semiconsole
73 $(call skip-test, $<, "MANUAL ONLY")
74
75 # vtimer test needs EL2
76 QEMU_EL2_MACHINE=-machine virt,virtualization=on,gic-version=2 -cpu cortex-a57 -smp 4
77 QEMU_EL2_BASE_ARGS=-semihosting-config enable=on,target=native,chardev=output,arg="2"
78 run-vtimer: QEMU_OPTS=$(QEMU_EL2_MACHINE) $(QEMU_EL2_BASE_ARGS) -kernel
79
80 # gpc tests need EL3 and RME
81 QEMU_EL3_MACHINE=-machine virt,virtualization=on,secure=on,gic-version=3 -cpu max,x-rme=on
82 QEMU_EL3_BASE_ARGS=-semihosting-config enable=on,target=native,chardev=output,arg="3"
83 run-gpc-test: QEMU_OPTS=$(QEMU_EL3_MACHINE) $(QEMU_EL3_BASE_ARGS) -kernel
84 run-gpc3-test: QEMU_OPTS=$(QEMU_EL3_MACHINE) $(QEMU_EL3_BASE_ARGS) -kernel
85
86 # Simple Record/Replay Test
87 .PHONY: memory-record
88 run-memory-record: memory-record memory
89 $(call run-test, $<, \
90 $(QEMU) -monitor none -display none \
91 -chardev file$(COMMA)path=$<.out$(COMMA)id=output \
92 -icount shift=5$(COMMA)rr=record$(COMMA)rrfile=record.bin \
93 $(QEMU_OPTS) memory)
94
95 .PHONY: memory-replay
96 run-memory-replay: memory-replay run-memory-record
97 $(call run-test, $<, \
98 $(QEMU) -monitor none -display none \
99 -chardev file$(COMMA)path=$<.out$(COMMA)id=output \
100 -icount shift=5$(COMMA)rr=replay$(COMMA)rrfile=record.bin \
101 $(QEMU_OPTS) memory)
102
103 EXTRA_RUNS+=run-memory-replay
104
105 ifneq ($(CROSS_CC_HAS_ARMV8_3),)
106 pauth-3: CFLAGS += $(CROSS_CC_HAS_ARMV8_3)
107 # This test explicitly checks the output of the pauth operation so we
108 # must force the use of the QARMA5 algorithm for it.
109 run-pauth-3: QEMU_BASE_MACHINE=-M virt -cpu max,pauth-qarma5=on -display none
110 else
111 pauth-3:
112 $(call skip-test, "BUILD of $@", "missing compiler support")
113 run-pauth-3:
114 $(call skip-test, "RUN of pauth-3", "not built")
115 endif
116
117 ifneq ($(CROSS_CC_HAS_ARMV8_MTE),)
118 QEMU_MTE_ENABLED_MACHINE=-M virt,mte=on -cpu max -display none
119 QEMU_OPTS_WITH_MTE_ON = $(QEMU_MTE_ENABLED_MACHINE) $(QEMU_BASE_ARGS) -kernel
120 mte: CFLAGS+=-march=armv8.5-a+memtag
121 mte: mte.S $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS)
122 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) boot.o
123
124 run-mte: QEMU_OPTS=$(QEMU_OPTS_WITH_MTE_ON)
125 run-mte: mte
126
127 ifeq ($(GDB_SUPPORTS_MTE_IN_BAREMETAL),y)
128 run-gdbstub-mte: QEMU_OPTS=$(QEMU_OPTS_WITH_MTE_ON)
129 run-gdbstub-mte: mte
130 $(call run-test, $@, $(GDB_SCRIPT) \
131 --output run-gdbstub-mte.out \
132 --gdb $(GDB) \
133 --qemu $(QEMU) --qargs "-chardev null$(COMMA)id=output $(QEMU_OPTS)" \
134 --bin $< --test $(AARCH64_SRC)/gdbstub/test-mte.py -- --mode=system, \
135 gdbstub MTE support)
136
137 EXTRA_RUNS += run-gdbstub-mte
138 else # !GDB_SUPPORTS_MTE_IN_BAREMETAL
139 run-gdbstub-mte:
140 $(call skip-test "RUN of gdbstub-mte", "GDB does not support MTE in baremetal!")
141 endif
142 else # !CROSS_CC_HAS_ARMV8_MTE
143 mte:
144 $(call skip-test, "BUILD of $@", "missing compiler support")
145 run-mte:
146 $(call skip-test, "RUN of mte", "not build")
147 endif