xref: /linux/tools/testing/selftests/exec/Makefile (revision 277d787feb2edeb3adae81a99fc47294d523a106)
1b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
2c9b26b81SDavid DrysdaleCFLAGS = -Wall
34e7301e6SAlexey DobriyanCFLAGS += -Wno-nonnull
4b083cc81SMickaël SalaünCFLAGS += $(KHDR_INCLUDES)
5b083cc81SMickaël Salaün
6b083cc81SMickaël SalaünLDLIBS += -lcap
7c9b26b81SDavid Drysdale
8b57a2907SKees CookALIGNS := 0x1000 0x200000 0x1000000
9b57a2907SKees CookALIGN_PIES        := $(patsubst %,load_address.%,$(ALIGNS))
10b57a2907SKees CookALIGN_STATIC_PIES := $(patsubst %,load_address.static.%,$(ALIGNS))
113545deffSKees CookALIGNMENT_TESTS   := $(ALIGN_PIES) $(ALIGN_STATIC_PIES)
12b57a2907SKees Cook
132a69962bSMickaël SalaünTEST_PROGS := binfmt_script.py check-exec-tests.sh
14b57a2907SKees CookTEST_GEN_PROGS := execveat non-regular $(ALIGNMENT_TESTS)
152a69962bSMickaël SalaünTEST_GEN_PROGS_EXTENDED := false inc set-exec script-exec.inc script-noexec.inc
16908a26e1SMuhammad Usama AnjumTEST_GEN_FILES := execveat.symlink execveat.denatured script subdir
1780d443e8Sbamvor.zhangjian@huawei.com# Makefile is a run-time dependency, since it's accessed by the execveat test
1880d443e8Sbamvor.zhangjian@huawei.comTEST_FILES := Makefile
1980d443e8Sbamvor.zhangjian@huawei.com
204e7301e6SAlexey DobriyanTEST_GEN_PROGS += recursion-depth
219132c394SKees CookTEST_GEN_PROGS += null-argv
22b083cc81SMickaël SalaünTEST_GEN_PROGS += check-exec
234e7301e6SAlexey Dobriyan
24*277d787fSFarid Zakaria# binfmt_misc bpf-backed ('B') handler test: a libbpf harness plus its
25*277d787fSFarid Zakaria# struct_ops objects and the test interpreter/app it routes between. Only
26*277d787fSFarid Zakaria# built when clang, bpftool, the vmlinux BTF and libbpf are all present
27*277d787fSFarid Zakaria# (HAVE_BPF_TOOLCHAIN=y forces it) so the other exec selftests don't grow
28*277d787fSFarid Zakaria# a bpf toolchain dependency.
29*277d787fSFarid ZakariaCLANG ?= clang
30*277d787fSFarid ZakariaBPFTOOL ?= bpftool
31*277d787fSFarid ZakariaVMLINUX_BTF ?= /sys/kernel/btf/vmlinux
32*277d787fSFarid ZakariaHAVE_BPF_TOOLCHAIN ?= $(shell command -v $(CLANG) >/dev/null 2>&1 && \
33*277d787fSFarid Zakaria			command -v $(BPFTOOL) >/dev/null 2>&1 && \
34*277d787fSFarid Zakaria			test -r $(VMLINUX_BTF) && \
35*277d787fSFarid Zakaria			pkg-config --exists libbpf 2>/dev/null && echo y)
36*277d787fSFarid Zakariaifeq ($(HAVE_BPF_TOOLCHAIN),y)
37*277d787fSFarid ZakariaTEST_GEN_PROGS += binfmt_misc_bpf
38*277d787fSFarid ZakariaTEST_GEN_FILES += bpf_interp.bpf.o nix_origin.bpf.o
39*277d787fSFarid ZakariaTEST_GEN_FILES += binfmt_bpf_interp binfmt_bpf_app
40*277d787fSFarid Zakariaelse
41*277d787fSFarid Zakaria$(info exec selftests: skipping binfmt_misc_bpf, needs clang, bpftool, vmlinux BTF and libbpf)
42*277d787fSFarid Zakariaendif
43*277d787fSFarid Zakaria
440f71241aSKees CookEXTRA_CLEAN := $(OUTPUT)/subdir.moved $(OUTPUT)/execveat.moved $(OUTPUT)/xxxxx*	\
450f71241aSKees Cook	       $(OUTPUT)/S_I*.test
4680d443e8Sbamvor.zhangjian@huawei.com
4780d443e8Sbamvor.zhangjian@huawei.cominclude ../lib.mk
4880d443e8Sbamvor.zhangjian@huawei.com
492a69962bSMickaël SalaünCHECK_EXEC_SAMPLES := $(top_srcdir)/samples/check-exec
502a69962bSMickaël Salaün
51a8ba798bSbamvor.zhangjian@huawei.com$(OUTPUT)/subdir:
52c9b26b81SDavid Drysdale	mkdir -p $@
53472874cfSKees Cook$(OUTPUT)/script: Makefile
54472874cfSKees Cook	echo '#!/bin/bash' > $@
55c9b26b81SDavid Drysdale	echo 'exit $$*' >> $@
56c9b26b81SDavid Drysdale	chmod +x $@
57a8ba798bSbamvor.zhangjian@huawei.com$(OUTPUT)/execveat.symlink: $(OUTPUT)/execveat
58a8ba798bSbamvor.zhangjian@huawei.com	cd $(OUTPUT) && ln -s -f $(shell basename $<) $(shell basename $@)
59a8ba798bSbamvor.zhangjian@huawei.com$(OUTPUT)/execveat.denatured: $(OUTPUT)/execveat
60c9b26b81SDavid Drysdale	cp $< $@
61c9b26b81SDavid Drysdale	chmod -x $@
62b57a2907SKees Cook$(OUTPUT)/load_address.0x%: load_address.c
63b57a2907SKees Cook	$(CC) $(CFLAGS) $(LDFLAGS) -Wl,-z,max-page-size=$(lastword $(subst ., ,$@)) \
64b57a2907SKees Cook		-fPIE -pie $< -o $@
65b57a2907SKees Cook$(OUTPUT)/load_address.static.0x%: load_address.c
66b57a2907SKees Cook	$(CC) $(CFLAGS) $(LDFLAGS) -Wl,-z,max-page-size=$(lastword $(subst ., ,$@)) \
67b57a2907SKees Cook		-fPIE -static-pie $< -o $@
68b083cc81SMickaël Salaün$(OUTPUT)/false: false.c
69b083cc81SMickaël Salaün	$(CC) $(CFLAGS) $(LDFLAGS) -static $< -o $@
702a69962bSMickaël Salaün$(OUTPUT)/inc: $(CHECK_EXEC_SAMPLES)/inc.c
712a69962bSMickaël Salaün	$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
722a69962bSMickaël Salaün$(OUTPUT)/set-exec: $(CHECK_EXEC_SAMPLES)/set-exec.c
732a69962bSMickaël Salaün	$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
742a69962bSMickaël Salaün$(OUTPUT)/script-exec.inc: $(CHECK_EXEC_SAMPLES)/script-exec.inc
752a69962bSMickaël Salaün	cp $< $@
762a69962bSMickaël Salaün$(OUTPUT)/script-noexec.inc: $(CHECK_EXEC_SAMPLES)/script-noexec.inc
772a69962bSMickaël Salaün	cp $< $@
78*277d787fSFarid Zakaria
79*277d787fSFarid Zakaria# --- binfmt_misc bpf ('B') handler test ---------------------------------
80*277d787fSFarid Zakaria# The struct_ops bpf objects are compiled against the running kernel's BTF.
81*277d787fSFarid Zakaria# CLANG/BPFTOOL/VMLINUX_BTF are set above next to the toolchain check;
82*277d787fSFarid Zakaria# override LIBBPF_CFLAGS/LDLIBS to point at a libbpf install.
83*277d787fSFarid ZakariaBPF_CFLAGS ?= -I$(OUTPUT)
84*277d787fSFarid ZakariaLIBBPF_CFLAGS ?=
85*277d787fSFarid ZakariaLIBBPF_LDLIBS ?= -lbpf -lelf -lz
86*277d787fSFarid Zakaria
87*277d787fSFarid Zakaria$(OUTPUT)/vmlinux.h:
88*277d787fSFarid Zakaria	$(BPFTOOL) btf dump file $(VMLINUX_BTF) format c > $@
89*277d787fSFarid Zakaria	sed -i '/__ksym;$$/d' $@
90*277d787fSFarid Zakaria
91*277d787fSFarid Zakaria$(OUTPUT)/%.bpf.o: %.bpf.c $(OUTPUT)/vmlinux.h
92*277d787fSFarid Zakaria	$(CLANG) -g -O2 -target bpf -mcpu=v3 $(BPF_CFLAGS) $(LIBBPF_CFLAGS) -c $< -o $@
93*277d787fSFarid Zakaria
94*277d787fSFarid Zakaria$(OUTPUT)/binfmt_misc_bpf: binfmt_misc_bpf.c
95*277d787fSFarid Zakaria	$(CC) $(CFLAGS) $(LIBBPF_CFLAGS) $(LDFLAGS) $< $(LIBBPF_LDLIBS) -o $@
96*277d787fSFarid Zakaria
97*277d787fSFarid Zakaria$(OUTPUT)/binfmt_bpf_interp: binfmt_bpf_interp.c
98*277d787fSFarid Zakaria	$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
99*277d787fSFarid Zakaria
100*277d787fSFarid Zakaria# PT_INTERP is set to the literal "$ORIGIN/binfmt_bpf_interp"; the nix_origin
101*277d787fSFarid Zakaria# handler resolves it relative to the binary at run time.
102*277d787fSFarid Zakaria$(OUTPUT)/binfmt_bpf_app: binfmt_bpf_app.c
103*277d787fSFarid Zakaria	$(CC) $(CFLAGS) $(LDFLAGS) -Wl,--dynamic-linker,'$$ORIGIN/binfmt_bpf_interp' $< -o $@
104*277d787fSFarid Zakaria
105*277d787fSFarid ZakariaEXTRA_CLEAN += $(OUTPUT)/vmlinux.h $(OUTPUT)/bpf_interp.bpf.o $(OUTPUT)/nix_origin.bpf.o
106