1# $OpenBSD: Makefile.inc,v 1.179 2024/05/18 05:20:22 guenther 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 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+= ptrace.c semctl.c \ 20 timer_create.c timer_delete.c timer_getoverrun.c timer_gettime.c \ 21 timer_settime.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 pread preadv pselect pwrite pwritev \ 37 read readv recvfrom recvmmsg recvmsg \ 38 select sendmmsg sendmsg sendto \ 39 wait4 waitid write writev 40SRCS+= ${CANCEL:%=w_%.c} 41 42# modules with default implementations on all architectures, unless overridden 43# below: 44ASM= __semctl.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 ftruncate.o 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 kqueue1.o ktrace.o lchown.o \ 60 link.o linkat.o listen.o lseek.o lstat.o \ 61 madvise.o mimmutable.o minherit.o mkdir.o mkdirat.o mkfifo.o mkfifoat.o \ 62 mknod.o mknodat.o mlock.o mlockall.o mmap.o mount.o mprotect.o \ 63 mquery.o msgctl.o msgget.o munlock.o munlockall.o munmap.o \ 64 nfssvc.o \ 65 pathconf.o pathconfat.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 \ 77 thrkill.o truncate.o \ 78 unlink.o unlinkat.o \ 79 unmount.o unveil.o utimensat.o utimes.o utrace.o 80 81SRCS+= ${SRCS_${MACHINE_CPU}} 82.for i in ${SRCS_${MACHINE_CPU}} 83ASM:= ${ASM:N${i:R}.o} 84.endfor 85 86PASM= ${ASM:.o=.po} 87SASM= ${ASM:.o=.so} 88DASM= ${ASM:.o=.do} 89 90# syscalls that CANNOT FAIL. They can return whatever value they want, 91# they just never want to set errno. 92ASM_NOERR=__get_tcb.o __set_tcb.o __threxit.o __thrsleep.o __thrwakeup.o \ 93 getdtablecount.o getegid.o geteuid.o getgid.o getlogin_r.o \ 94 getpgrp.o getpid.o getppid.o getrtable.o getthrid.o \ 95 getthrname.o getuid.o \ 96 issetugid.o \ 97 sched_yield.o setthrname.o sync.o \ 98 umask.o 99PASM_NOERR= ${ASM_NOERR:.o=.po} 100SASM_NOERR= ${ASM_NOERR:.o=.so} 101DASM_NOERR= ${ASM_NOERR:.o=.do} 102 103PSEUDO= 104PPSEUDO=${PSEUDO:.o=.po} 105SPSEUDO=${PSEUDO:.o=.so} 106DPSEUDO=${PSEUDO:.o=.do} 107 108# syscalls that CANNOT FAIL and whose function has one more leading underbar 109# than its matching SYS_* symbol. E.g., _exit() --> SYS_exit 110PSEUDO_NOERR= _exit.o 111PPSEUDO_NOERR=${PSEUDO_NOERR:.o=.po} 112SPSEUDO_NOERR=${PSEUDO_NOERR:.o=.so} 113DPSEUDO_NOERR=${PSEUDO_NOERR:.o=.do} 114 115HIDDEN= ___realpath.o ___getcwd.o fork.o sigaction.o _ptrace.o ${CANCEL:=.o} \ 116 clock_gettime.o gettimeofday.o ypconnect.o 117PHIDDEN=${HIDDEN:.o=.po} 118SHIDDEN=${HIDDEN:.o=.so} 119DHIDDEN=${HIDDEN:.o=.do} 120 121OBJS+= ${ASM} ${ASM_NOERR} ${PSEUDO} ${PSEUDO_NOERR} ${HIDDEN} 122 123# XXX only difference is -x removes FILE symbols? 124TRIM=${LD} -x -r ${.TARGET}.o -o ${.TARGET} && rm -f ${.TARGET}.o 125TRIM.debug=${LD} -X -r ${.TARGET}.o -o ${.TARGET} && rm -f ${.TARGET}.o 126 127 128GEN_PREFIX=\t.file "${@:R}.S"\n\#include "SYS.h" 129# Pick one of these to set what ASM is generated... 130GENERATE.rsyscall=\ 131 echo creating ${.TARGET} && \ 132 printf '${GEN_PREFIX}\nRSYSCALL(${.PREFIX})\n' 133GENERATE.rsyscall_noerr=\ 134 echo creating ${.TARGET} && \ 135 printf '${GEN_PREFIX}\nPSEUDO_NOERROR(${.PREFIX},${.PREFIX})\n' 136GENERATE.pseudo=\ 137 echo creating ${.TARGET} && \ 138 printf '${GEN_PREFIX}\nPSEUDO(${.PREFIX},${.PREFIX:S/^_//})\n' 139GENERATE.pseudo_noerr=\ 140 echo creating ${.TARGET} && \ 141 printf '${GEN_PREFIX}\nPSEUDO_NOERROR(${.PREFIX},${.PREFIX:S/^_//})\n' 142GENERATE.rsyscall_hidden=\ 143 echo creating ${.TARGET} && \ 144 printf '${GEN_PREFIX}\nRSYSCALL_HIDDEN(${.PREFIX:S/^_//})\n' 145 146# ...and one of these to control how it's compiled 147FINISH= ${COMPILE.S} ${CFLAGS:M-[ID]*} ${CFLAGS:M-pipe} ${AINC} -P -x assembler-with-cpp - ${DFLAGS} -MF ${.TARGET:R}.d 148FINISH.po=${FINISH} -o ${.TARGET}.o -DPROF && ${TRIM.debug} 149FINISH.so=${FINISH} -o ${.TARGET} ${PICFLAG} 150FINISH.do=${FINISH} -o ${.TARGET}.o ${DIST_CFLAGS} && ${TRIM} 151FINISH.o =${FINISH} -o ${.TARGET}.o && ${TRIM} 152 153# Use those to generate the desired syscall stubs 154${PASM}: ; @${GENERATE.rsyscall} | ${FINISH.po} 155${SASM}: ; @${GENERATE.rsyscall} | ${FINISH.so} 156${DASM}: ; @${GENERATE.rsyscall} | ${FINISH.do} 157${ASM}: ; @${GENERATE.rsyscall} | ${FINISH.o} 158 159${PASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.po} 160${SASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.so} 161${DASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.do} 162${ASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.o} 163 164${PPSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.po} 165${SPSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.so} 166${DPSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.do} 167${PSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.o} 168 169${PPSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.po} 170${SPSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.so} 171${DPSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.do} 172${PSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.o} 173 174${PHIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.po} 175${SHIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.so} 176${DHIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.do} 177${HIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.o} 178 179 180MAN+= __get_tcb.2 __thrsigdivert.2 __thrsleep.2 _exit.2 accept.2 \ 181 access.2 acct.2 adjfreq.2 adjtime.2 bind.2 brk.2 chdir.2 \ 182 chflags.2 chmod.2 chown.2 chroot.2 clock_gettime.2 close.2 \ 183 closefrom.2 connect.2 dup.2 execve.2 fcntl.2 fhopen.2 flock.2 \ 184 fork.2 fsync.2 futex.2 getentropy.2 getdents.2 getdtablecount.2 \ 185 getfh.2 getfsstat.2 getgid.2 getgroups.2 getitimer.2 getlogin.2 \ 186 getpeername.2 getpgrp.2 getpid.2 getpriority.2 getrlimit.2 \ 187 getrtable.2 getrusage.2 getsid.2 getsockname.2 getsockopt.2 \ 188 getthrid.2 getthrname.2 gettimeofday.2 getuid.2 \ 189 intro.2 ioctl.2 issetugid.2 \ 190 kbind.2 kill.2 kqueue.2 ktrace.2 link.2 listen.2 lseek.2 madvise.2 \ 191 mimmutable.2 minherit.2 mkdir.2 mkfifo.2 mknod.2 mlock.2 \ 192 mlockall.2 mmap.2 mount.2 mprotect.2 mquery.2 msgctl.2 \ 193 msgget.2 msgrcv.2 msgsnd.2 msync.2 munmap.2 nanosleep.2 \ 194 nfssvc.2 open.2 pathconf.2 pinsyscalls.2 pipe.2 pledge.2 \ 195 poll.2 profil.2 ptrace.2 quotactl.2 read.2 readlink.2 reboot.2 recv.2 \ 196 rename.2 revoke.2 rmdir.2 sched_yield.2 select.2 semctl.2 semget.2 \ 197 semop.2 send.2 setgroups.2 setpgid.2 setregid.2 \ 198 setresuid.2 setreuid.2 setsid.2 sendsyslog.2 setuid.2 shmat.2 \ 199 shmctl.2 shmget.2 shutdown.2 sigaction.2 sigaltstack.2 sigpending.2 \ 200 sigprocmask.2 sigreturn.2 sigsuspend.2 socket.2 \ 201 socketpair.2 stat.2 statfs.2 swapctl.2 symlink.2 \ 202 sync.2 sysarch.2 sysctl.2 thrkill.2 truncate.2 \ 203 umask.2 unlink.2 unveil.2 utimes.2 utrace.2 vfork.2 \ 204 wait.2 waitid.2 write.2 \ 205 ypconnect.2 206