1# $OpenBSD: Makefile,v 1.11 2023/01/09 11:50:01 anton Exp $
2
3# Start with a clean /var/account/acct accounting file and turn on
4# process accounting with accton(8).  Each test executes a command
5# with a unique name and checks the flags in the lastcomm(1) output.
6# Run tests with fork, map, core, xsig, pledge, unveil, trap accounting.
7
8.if ! (make(clean) || make(cleandir) || make(obj))
9
10MOUNT_OBJ !!= mount | grep ^$$(df -P . | tail -1 | awk '{ print $$1 }')
11
12.if "${MOUNT_OBJ:M*wxallowed*}" == ""
13REGRESS_SKIP_TARGETS +=	run-syscallwx
14.endif
15
16.endif
17
18.if ${MACHINE} == amd64
19# calling trapsignal() from syscall path does not work on amd64
20REGRESS_EXPECTED_FAILURES +=	run-callstack run-syscallwx
21.endif
22
23PROGS=			crash trapstack callstack syscallwx unveil
24WARNINGS=		Yes
25SRCS_syscallwx=		syscallwx.c gadget.S
26LDADD_syscallwx=	-Wl,-z,wxneeded
27CLEANFILES=		regress-*
28
29REGRESS_SETUP =		${PROGS}
30
31REGRESS_SETUP_ONCE =	setup-rotate
32# Rotate accouting files and keep statistics, from /etc/daily.
33setup-rotate:
34	${SUDO} touch /var/account/acct
35	-${SUDO} mv -f /var/account/acct.2 /var/account/acct.3
36	-${SUDO} mv -f /var/account/acct.1 /var/account/acct.2
37	-${SUDO} mv -f /var/account/acct.0 /var/account/acct.1
38	${SUDO} cp -f /var/account/acct /var/account/acct.0
39	${SUDO} sa -sq
40	${SUDO} accton /var/account/acct
41
42REGRESS_TARGETS +=	run-fork
43run-fork:
44	# Create shell program, fork a sub shell, and check the -F flag.
45	cp -f /bin/sh regress-fork
46	./regress-fork -c '( : ) &'
47	lastcomm regress-fork | grep -q ' -F '
48
49REGRESS_TARGETS +=	run-trapstack
50run-trapstack: trapstack
51	# Use invalid stack pointer, trap, SIGSEGV handler, check -M flag.
52	cp -f trapstack regress-trapstack
53	./regress-trapstack
54	lastcomm regress-trapstack | grep -q ' -MT '
55
56REGRESS_TARGETS +=	run-callstack
57run-callstack: callstack
58	# Use invalid stack pointer, syscall, SIGSEGV handler, check -M flag.
59	cp -f callstack regress-callstack
60	./regress-callstack
61	lastcomm regress-callstack | grep -q ' -MT '
62
63REGRESS_TARGETS +=	run-syscallwx
64run-syscallwx: syscallwx
65	# Use writable syscall code, run SIGSEGV handler, check -M flag.
66	cp -f syscallwx regress-syscallwx
67	./regress-syscallwx
68	lastcomm regress-syscallwx | grep -q ' -MT '
69
70REGRESS_TARGETS +=	run-core
71run-core:
72	# Create shell program, abort sub shell, and check the -DX flag.
73	cp -f /bin/sh regress-core
74	rm -f regress-core.core
75	ulimit -c 100000; ./regress-core -c '( : ) & kill -SEGV $$!; wait'
76	lastcomm regress-core | grep -q ' -FDX '
77
78REGRESS_TARGETS +=	run-xsig
79run-xsig:
80	# Create shell program, kill sub shell, and check the -X flag.
81	cp -f /bin/sh regress-xsig
82	./regress-xsig -c '( : ) & kill -KILL $$!; wait'
83	lastcomm regress-xsig | grep -q ' -FX '
84
85REGRESS_TARGETS +=	run-pledge
86run-pledge:
87	# Create perl program, violate pledge, and check the -P flag.
88	cp -f /usr/bin/perl regress-pledge
89	ulimit -c 0; ! ./regress-pledge -MOpenBSD::Pledge -e\
90	    'pledge("stdio") or die $$!; chdir("/")'
91	lastcomm regress-pledge | grep -q ' -XP '
92
93REGRESS_TARGETS +=	run-unveil
94run-unveil: unveil
95	# Attempt to open veiled file, check -U flag.
96	cp -f unveil regress-unveil
97	./regress-unveil
98	lastcomm regress-unveil | grep -q ' -U '
99
100REGRESS_TARGETS +=	run-trap
101run-trap: crash
102	# Build crashing program, run SIGSEGV handler, and check the -T flag.
103	cp -f crash regress-trap
104	./regress-trap
105	lastcomm regress-trap | grep -q ' -T '
106
107.include <bsd.regress.mk>
108