aboutsummaryrefslogtreecommitdiff
path: root/tests/tcg/multiarch/Makefile.target
blob: 979a0dd1bc22de93524528f5b051adbb1e326f24 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# -*- Mode: makefile -*-
#
# Multiarch Tests - included from tests/tcg/Makefile.target
#
# These tests are plain C and built without any architecture specific code.
#

MULTIARCH_SRC=$(SRC_PATH)/tests/tcg/multiarch

# Set search path for all sources
VPATH 	       += $(MULTIARCH_SRC)
MULTIARCH_SRCS =  $(notdir $(wildcard $(MULTIARCH_SRC)/*.c))
ifeq ($(filter %-linux-user, $(TARGET)),$(TARGET))
VPATH 	       += $(MULTIARCH_SRC)/linux
MULTIARCH_SRCS += $(notdir $(wildcard $(MULTIARCH_SRC)/linux/*.c))
endif
MULTIARCH_TESTS = $(MULTIARCH_SRCS:.c=)

#
# The following are any additional rules needed to build things
#


float_%: LDFLAGS+=-lm
float_%: float_%.c libs/float_helpers.c
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< $(MULTIARCH_SRC)/libs/float_helpers.c -o $@ $(LDFLAGS)

run-float_%: float_%
	$(call run-test,$<, $(QEMU) $(QEMU_OPTS) $<)
	$(call conditional-diff-out,$<,$(SRC_PATH)/tests/tcg/$(TARGET_NAME)/$<.ref)


testthread: LDFLAGS+=-lpthread

threadcount: LDFLAGS+=-lpthread

signals: LDFLAGS+=-lrt -lpthread

munmap-pthread: CFLAGS+=-pthread
munmap-pthread: LDFLAGS+=-pthread

vma-pthread: CFLAGS+=-pthread
vma-pthread: LDFLAGS+=-pthread

# The vma-pthread seems very sensitive on gitlab and we currently
# don't know if its exposing a real bug or the test is flaky.
ifneq ($(GITLAB_CI),)
run-vma-pthread: vma-pthread
	$(call skip-test, $<, "flaky on CI?")
run-plugin-vma-pthread-with-%: vma-pthread
	$(call skip-test, $<, "flaky on CI?")
endif

run-test-mmap: test-mmap
	$(call run-test, test-mmap, $(QEMU) $<, $< (default))

ifneq ($(GDB),)
GDB_SCRIPT=$(SRC_PATH)/tests/guest-debug/run-test.py

run-gdbstub-sha1: sha1
	$(call run-test, $@, $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
		--bin $< --test $(MULTIARCH_SRC)/gdbstub/sha1.py, \
	basic gdbstub support)

run-gdbstub-qxfer-auxv-read: sha1
	$(call run-test, $@, $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
		--bin $< --test $(MULTIARCH_SRC)/gdbstub/test-qxfer-auxv-read.py, \
	basic gdbstub qXfer:auxv:read support)

run-gdbstub-proc-mappings: sha1
	$(call run-test, $@, $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
		--bin $< --test $(MULTIARCH_SRC)/gdbstub/test-proc-mappings.py, \
	proc mappings support)

run-gdbstub-thread-breakpoint: testthread
	$(call run-test, $@, $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
		--bin $< --test $(MULTIARCH_SRC)/gdbstub/test-thread-breakpoint.py, \
	hitting a breakpoint on non-main thread)

run-gdbstub-registers: sha512
	$(call run-test, $@, $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
		--bin $< --test $(MULTIARCH_SRC)/gdbstub/registers.py, \
	checking register enumeration)

run-gdbstub-prot-none: prot-none
	$(call run-test, $@, env PROT_NONE_PY=1 $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
		--bin $< --test $(MULTIARCH_SRC)/gdbstub/prot-none.py, \
	accessing PROT_NONE memory)

run-gdbstub-catch-syscalls: catch-syscalls
	$(call run-test, $@, $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
		--bin $< --test $(MULTIARCH_SRC)/gdbstub/catch-syscalls.py, \
	hitting a syscall catchpoint)

run-gdbstub-follow-fork-mode-child: follow-fork-mode
	$(call run-test, $@, $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
		--bin $< --test $(MULTIARCH_SRC)/gdbstub/follow-fork-mode-child.py, \
	following children on fork)

run-gdbstub-follow-fork-mode-parent: follow-fork-mode
	$(call run-test, $@, $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
		--bin $< --test $(MULTIARCH_SRC)/gdbstub/follow-fork-mode-parent.py, \
	following parents on fork)

else
run-gdbstub-%:
	$(call skip-test, "gdbstub test $*", "need working gdb with $(patsubst -%,,$(TARGET_NAME)) support")
endif
EXTRA_RUNS += run-gdbstub-sha1 run-gdbstub-qxfer-auxv-read \
	      run-gdbstub-proc-mappings run-gdbstub-thread-breakpoint \
	      run-gdbstub-registers run-gdbstub-prot-none \
	      run-gdbstub-catch-syscalls run-gdbstub-follow-fork-mode-child \
	      run-gdbstub-follow-fork-mode-parent

# ARM Compatible Semi Hosting Tests
#
# Despite having ARM in the name we actually have several
# architectures that implement it. We gate the tests on the feature
# appearing in config.
#
ifeq ($(CONFIG_ARM_COMPATIBLE_SEMIHOSTING),y)
VPATH += $(MULTIARCH_SRC)/arm-compat-semi

# Add -I path back to TARGET_NAME for semicall.h
semihosting: CFLAGS+=-I$(SRC_PATH)/tests/tcg/$(TARGET_NAME)

run-semihosting: semihosting
	$(call run-test,$<,$(QEMU) $< 2> $<.err)

run-plugin-semihosting-with-%:
	$(call run-test, $@, $(QEMU) $(QEMU_OPTS) \
		-plugin $(PLUGIN_LIB)/$(call extract-plugin,$@) \
		 $(call strip-plugin,$<) 2> $<.err, \
		$< with $*)

semiconsole: CFLAGS+=-I$(SRC_PATH)/tests/tcg/$(TARGET_NAME)

run-semiconsole: semiconsole
	$(call skip-test, $<, "MANUAL ONLY")

run-plugin-semiconsole-with-%:
	$(call skip-test, $<, "MANUAL ONLY")

TESTS += semihosting semiconsole
endif

# Update TESTS
TESTS += $(MULTIARCH_TESTS)