Makefile.inc revision 1.160
1#	$OpenBSD: Makefile.inc,v 1.160 2021/06/11 10:29:33 kettenis Exp $
2#	$NetBSD: Makefile.inc,v 1.35 1995/10/16 23:49:07 jtc Exp $
3#	@(#)Makefile.inc	8.1 (Berkeley) 6/17/93
4
5# sys sources
6.PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/sys ${LIBCSRCDIR}/sys
7
8# modules with non-default implementations on at least one architecture:
9SRCS+=	Ovfork.S brk.S ${CERROR} \
10	sbrk.S sigpending.S sigprocmask.S \
11	sigsuspend.S syscall.S tfork_thread.S
12
13# glue to offer userland wrappers for some syscalls
14SRCS+=	posix_madvise.c pthread_sigmask.c \
15	w_fork.c w_sigaction.c w_sigprocmask.c w_sigsuspend.c w_vfork.c \
16	w_clock_gettime.c w_gettimeofday.c microtime.c
17
18# glue for compat with old syscall interfaces.
19SRCS+=	ftruncate.c lseek.c mquery.c mmap.c ptrace.c semctl.c truncate.c \
20	timer_create.c timer_delete.c timer_getoverrun.c timer_gettime.c \
21	timer_settime.c pread.c preadv.c pwrite.c pwritev.c
22
23# stack protector helper functions
24SRCS+=	stack_protector.c
25
26# cancelation details
27SRCS+=	canceled.c
28
29# syscalls that would be normal...except for cancellation or SIGTHR
30CANCEL=	accept accept4 \
31	close closefrom connect \
32	fcntl fsync \
33	msgrcv msgsnd msync \
34	nanosleep \
35	open openat \
36	poll ppoll pselect \
37	read readv recvfrom recvmsg \
38	select sendmsg sendto \
39	wait4 write writev
40SRCS+=	${CANCEL:%=w_%.c} w_pread.c w_preadv.c w_pwrite.c w_pwritev.c
41
42# modules with default implementations on all architectures, unless overridden
43# below:
44ASM=	__semctl.o __syscall.o __thrsigdivert.o \
45	access.o acct.o adjfreq.o adjtime.o \
46	bind.o chdir.o chflags.o chflagsat.o chmod.o chown.o chroot.o \
47	clock_getres.o clock_settime.o \
48	dup.o dup2.o dup3.o \
49	execve.o \
50	faccessat.o fchdir.o fchflags.o fchmod.o fchmodat.o fchown.o \
51	fchownat.o fhopen.o fhstat.o fhstatfs.o \
52	flock.o fpathconf.o fstat.o fstatat.o fstatfs.o \
53	futex.o futimens.o futimes.o \
54	getentropy.o getdents.o getfh.o getfsstat.o \
55	getgroups.o getitimer.o getpeername.o getpgid.o \
56	getpriority.o getresgid.o getresuid.o \
57	getrlimit.o getrusage.o getsid.o getsockname.o \
58	getsockopt.o ioctl.o \
59	kevent.o kill.o kqueue.o ktrace.o lchown.o \
60	link.o linkat.o listen.o lstat.o madvise.o \
61	minherit.o mkdir.o mkdirat.o mkfifo.o mkfifoat.o \
62	mknod.o mknodat.o mlock.o mlockall.o mount.o mprotect.o \
63	msgctl.o msgget.o munlock.o munlockall.o munmap.o \
64	nfssvc.o \
65	pathconf.o pipe.o pipe2.o pledge.o profil.o \
66	quotactl.o \
67	readlink.o readlinkat.o reboot.o \
68	rename.o renameat.o revoke.o rmdir.o \
69	semget.o semop.o sendsyslog.o \
70	setegid.o seteuid.o setgid.o setgroups.o setitimer.o setlogin.o \
71	setpgid.o setpriority.o setregid.o setresgid.o setresuid.o \
72	setreuid.o setrlimit.o setrtable.o setsid.o setsockopt.o \
73	settimeofday.o setuid.o shmat.o shmctl.o shmdt.o \
74	shmget.o shutdown.o sigaltstack.o socket.o \
75	socketpair.o stat.o statfs.o swapctl.o symlink.o symlinkat.o \
76	sysarch.o sysctl.o thrkill.o unlink.o unlinkat.o \
77	unmount.o unveil.o utimensat.o utimes.o utrace.o
78
79SRCS+=	${SRCS_${MACHINE_CPU}}
80.for i in ${SRCS_${MACHINE_CPU}}
81ASM:=	${ASM:N${i:R}.o}
82.endfor
83
84PASM=	${ASM:.o=.po}
85SASM=	${ASM:.o=.so}
86DASM=	${ASM:.o=.do}
87
88# syscalls that CANNOT FAIL.  They can return whatever value they want,
89# they just never want to set errno.
90ASM_NOERR=__get_tcb.o __set_tcb.o __threxit.o __thrsleep.o __thrwakeup.o \
91	getdtablecount.o getegid.o geteuid.o getgid.o getlogin_r.o \
92	getpgrp.o getpid.o getppid.o getrtable.o getthrid.o getuid.o \
93	issetugid.o \
94	sched_yield.o sync.o \
95	umask.o 
96PASM_NOERR=	${ASM_NOERR:.o=.po}
97SASM_NOERR=	${ASM_NOERR:.o=.so}
98DASM_NOERR=	${ASM_NOERR:.o=.do}
99
100PSEUDO=
101PPSEUDO=${PSEUDO:.o=.po}
102SPSEUDO=${PSEUDO:.o=.so}
103DPSEUDO=${PSEUDO:.o=.do}
104
105# syscalls that CANNOT FAIL and whose function has one more leading underbar
106# than its matching SYS_* symbol.  E.g., _exit() --> SYS_exit
107PSEUDO_NOERR=	_exit.o
108PPSEUDO_NOERR=${PSEUDO_NOERR:.o=.po}
109SPSEUDO_NOERR=${PSEUDO_NOERR:.o=.so}
110DPSEUDO_NOERR=${PSEUDO_NOERR:.o=.do}
111
112HIDDEN= ___realpath.o ___getcwd.o fork.o sigaction.o _ptrace.o ${CANCEL:=.o} \
113	clock_gettime.o gettimeofday.o
114PHIDDEN=${HIDDEN:.o=.po}
115SHIDDEN=${HIDDEN:.o=.so}
116DHIDDEN=${HIDDEN:.o=.do}
117
118OBJS+=	${ASM} ${ASM_NOERR} ${PSEUDO} ${PSEUDO_NOERR} ${HIDDEN}
119
120# XXX only difference is -x removes FILE symbols?
121TRIM=${LD} -x -r ${.TARGET}.o -o ${.TARGET} && rm -f ${.TARGET}.o
122TRIM.debug=${LD} -X -r ${.TARGET}.o -o ${.TARGET} && rm -f ${.TARGET}.o
123
124
125GEN_PREFIX=\t.file "${@:R}.S"\n\#include "SYS.h"
126# Pick one of these to set what ASM is generated...
127GENERATE.rsyscall=\
128	echo creating ${.TARGET} && \
129	printf '${GEN_PREFIX}\nRSYSCALL(${.PREFIX})\n'
130GENERATE.rsyscall_noerr=\
131	echo creating ${.TARGET} && \
132	printf '${GEN_PREFIX}\nPSEUDO_NOERROR(${.PREFIX},${.PREFIX})\n'
133GENERATE.pseudo=\
134	echo creating ${.TARGET} && \
135	printf '${GEN_PREFIX}\nPSEUDO(${.PREFIX},${.PREFIX:S/^_//})\n'
136GENERATE.pseudo_noerr=\
137	echo creating ${.TARGET} && \
138	printf '${GEN_PREFIX}\nPSEUDO_NOERROR(${.PREFIX},${.PREFIX:S/^_//})\n'
139GENERATE.rsyscall_hidden=\
140	echo creating ${.TARGET} && \
141	printf '${GEN_PREFIX}\nRSYSCALL_HIDDEN(${.PREFIX:S/^_//})\n'
142
143# ...and one of these to control how it's compiled
144FINISH=	${COMPILE.S} ${CFLAGS:M-[ID]*} ${CFLAGS:M-pipe} ${AINC} -P -x assembler-with-cpp - ${DFLAGS} -MF ${.TARGET:R}.d
145FINISH.po=${FINISH} -o ${.TARGET}.o -DPROF		&& ${TRIM.debug}
146FINISH.so=${FINISH} -o ${.TARGET}   ${PICFLAG}
147FINISH.do=${FINISH} -o ${.TARGET}.o ${DIST_CFLAGS}	&& ${TRIM}
148FINISH.o =${FINISH} -o ${.TARGET}.o			&& ${TRIM}
149
150# Use those to generate the desired syscall stubs
151${PASM}: ; @${GENERATE.rsyscall} | ${FINISH.po}
152${SASM}: ; @${GENERATE.rsyscall} | ${FINISH.so}
153${DASM}: ; @${GENERATE.rsyscall} | ${FINISH.do}
154${ASM}:  ; @${GENERATE.rsyscall} | ${FINISH.o}
155
156${PASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.po}
157${SASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.so}
158${DASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.do}
159${ASM_NOERR}:  ; @${GENERATE.rsyscall_noerr} | ${FINISH.o}
160
161${PPSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.po}
162${SPSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.so}
163${DPSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.do}
164${PSEUDO}:  ; @${GENERATE.pseudo} | ${FINISH.o}
165
166${PPSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.po}
167${SPSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.so}
168${DPSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.do}
169${PSEUDO_NOERR}:  ; @${GENERATE.pseudo_noerr} | ${FINISH.o}
170
171${PHIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.po}
172${SHIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.so}
173${DHIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.do}
174${HIDDEN}:  ; @${GENERATE.rsyscall_hidden} | ${FINISH.o}
175
176
177MAN+=	__get_tcb.2 __thrsigdivert.2 __thrsleep.2 _exit.2 accept.2 \
178	access.2 acct.2 adjfreq.2 adjtime.2 bind.2 brk.2 chdir.2 \
179	chflags.2 chmod.2 chown.2 chroot.2 clock_gettime.2 close.2 \
180	closefrom.2 connect.2 dup.2 execve.2 fcntl.2 fhopen.2 flock.2 \
181	fork.2 fsync.2 futex.2 getentropy.2 getdents.2 getdtablecount.2 \
182	getfh.2 getfsstat.2 getgid.2 getgroups.2 getitimer.2 getlogin.2 \
183	getpeername.2 getpgrp.2 getpid.2 getpriority.2 getrlimit.2 \
184	getrtable.2 getrusage.2 getsid.2 getsockname.2 getsockopt.2 \
185	getthrid.2 gettimeofday.2 getuid.2 intro.2 ioctl.2 issetugid.2 \
186	kbind.2 kill.2 kqueue.2 ktrace.2 link.2 listen.2 lseek.2 madvise.2 \
187	minherit.2 mkdir.2 mkfifo.2 mknod.2 mlock.2 \
188	mlockall.2 mmap.2 mount.2 mprotect.2 mquery.2 msyscall.2 msgctl.2 \
189	msgget.2 msgrcv.2 msgsnd.2 msync.2 munmap.2 nanosleep.2 \
190	nfssvc.2 open.2 pathconf.2 pipe.2 pledge.2 poll.2 profil.2 \
191	ptrace.2 quotactl.2 read.2 readlink.2 reboot.2 recv.2 \
192	rename.2 revoke.2 rmdir.2 sched_yield.2 select.2 semctl.2 semget.2 \
193	semop.2 send.2 setgroups.2 setpgid.2 setregid.2 \
194	setresuid.2 setreuid.2 setsid.2 sendsyslog.2 setuid.2 shmat.2 \
195	shmctl.2 shmget.2 shutdown.2 sigaction.2 sigaltstack.2 sigpending.2 \
196	sigprocmask.2 sigreturn.2 sigsuspend.2 socket.2 \
197	socketpair.2 stat.2 statfs.2 swapctl.2 symlink.2 \
198	sync.2 sysarch.2 syscall.2 sysctl.2 thrkill.2 truncate.2 \
199	umask.2 unlink.2 unveil.2 utimes.2 utrace.2 vfork.2 wait.2 write.2
200