# -*- 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)

fnmsub: LDFLAGS+=-lm

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

sigreturn-sigmask: CFLAGS+=-pthread
sigreturn-sigmask: LDFLAGS+=-pthread

# GCC versions 12/13/14/15 at least incorrectly complain about
# "'SHA1Transform' reading 64 bytes from a region of size 0"; see the gcc bug
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106709
# Since this is just a standard piece of library code we've borrowed for a
# TCG test case, suppress the warning rather than trying to modify the
# code to work around the compiler.
sha1: CFLAGS+=-Wno-stringop-overread -Wno-unknown-warning-option

# 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-qxfer-siginfo-read: segfault
	$(call run-test, $@, $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
		--bin "$< -s" --test $(MULTIARCH_SRC)/gdbstub/test-qxfer-siginfo-read.py, \
	basic gdbstub qXfer:siginfo: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)

run-gdbstub-late-attach: late-attach
	$(call run-test, $@, env LATE_ATTACH_PY=1 $(GDB_SCRIPT) \
		--gdb $(GDB) \
		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" --no-suspend \
		--bin $< --test $(MULTIARCH_SRC)/gdbstub/late-attach.py, \
	attaching to a running process)

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 \
	      run-gdbstub-qxfer-siginfo-read run-gdbstub-late-attach

# 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

test-plugin-mem-access: CFLAGS+=-pthread -O0
test-plugin-mem-access: LDFLAGS+=-pthread -O0

ifeq ($(CONFIG_PLUGIN),y)
# Test plugin memory access instrumentation
run-plugin-test-plugin-mem-access-with-libmem.so: \
	PLUGIN_ARGS=$(COMMA)print-accesses=true
run-plugin-test-plugin-mem-access-with-libmem.so: \
	CHECK_PLUGIN_OUTPUT_COMMAND= \
	$(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
	$(QEMU) $<

EXTRA_RUNS_WITH_PLUGIN += run-plugin-test-plugin-mem-access-with-libmem.so
endif

# Update TESTS
TESTS += $(MULTIARCH_TESTS)
