1# $OpenBSD: Makefile.inc,v 1.159 2020/07/06 13:33:06 pirofti 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 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 futex.o \ 92 getdtablecount.o getegid.o geteuid.o getgid.o getlogin_r.o \ 93 getpgrp.o getpid.o getppid.o getrtable.o getthrid.o getuid.o \ 94 issetugid.o \ 95 sched_yield.o sync.o \ 96 umask.o 97PASM_NOERR= ${ASM_NOERR:.o=.po} 98SASM_NOERR= ${ASM_NOERR:.o=.so} 99DASM_NOERR= ${ASM_NOERR:.o=.do} 100 101PSEUDO= 102PPSEUDO=${PSEUDO:.o=.po} 103SPSEUDO=${PSEUDO:.o=.so} 104DPSEUDO=${PSEUDO:.o=.do} 105 106# syscalls that CANNOT FAIL and whose function has one more leading underbar 107# than its matching SYS_* symbol. E.g., _exit() --> SYS_exit 108PSEUDO_NOERR= _exit.o 109PPSEUDO_NOERR=${PSEUDO_NOERR:.o=.po} 110SPSEUDO_NOERR=${PSEUDO_NOERR:.o=.so} 111DPSEUDO_NOERR=${PSEUDO_NOERR:.o=.do} 112 113HIDDEN= ___realpath.o ___getcwd.o fork.o sigaction.o _ptrace.o ${CANCEL:=.o} \ 114 clock_gettime.o gettimeofday.o 115PHIDDEN=${HIDDEN:.o=.po} 116SHIDDEN=${HIDDEN:.o=.so} 117DHIDDEN=${HIDDEN:.o=.do} 118 119OBJS+= ${ASM} ${ASM_NOERR} ${PSEUDO} ${PSEUDO_NOERR} ${HIDDEN} 120 121# XXX only difference is -x removes FILE symbols? 122TRIM=${LD} -x -r ${.TARGET}.o -o ${.TARGET} && rm -f ${.TARGET}.o 123TRIM.debug=${LD} -X -r ${.TARGET}.o -o ${.TARGET} && rm -f ${.TARGET}.o 124 125 126GEN_PREFIX=\t.file "${@:R}.S"\n\#include "SYS.h" 127# Pick one of these to set what ASM is generated... 128GENERATE.rsyscall=\ 129 echo creating ${.TARGET} && \ 130 printf '${GEN_PREFIX}\nRSYSCALL(${.PREFIX})\n' 131GENERATE.rsyscall_noerr=\ 132 echo creating ${.TARGET} && \ 133 printf '${GEN_PREFIX}\nPSEUDO_NOERROR(${.PREFIX},${.PREFIX})\n' 134GENERATE.pseudo=\ 135 echo creating ${.TARGET} && \ 136 printf '${GEN_PREFIX}\nPSEUDO(${.PREFIX},${.PREFIX:S/^_//})\n' 137GENERATE.pseudo_noerr=\ 138 echo creating ${.TARGET} && \ 139 printf '${GEN_PREFIX}\nPSEUDO_NOERROR(${.PREFIX},${.PREFIX:S/^_//})\n' 140GENERATE.rsyscall_hidden=\ 141 echo creating ${.TARGET} && \ 142 printf '${GEN_PREFIX}\nRSYSCALL_HIDDEN(${.PREFIX:S/^_//})\n' 143 144# ...and one of these to control how it's compiled 145FINISH= ${COMPILE.S} ${CFLAGS:M-[ID]*} ${CFLAGS:M-pipe} ${AINC} -P -x assembler-with-cpp - ${DFLAGS} -MF ${.TARGET:R}.d 146FINISH.po=${FINISH} -o ${.TARGET}.o -DPROF && ${TRIM.debug} 147FINISH.so=${FINISH} -o ${.TARGET} ${PICFLAG} 148FINISH.do=${FINISH} -o ${.TARGET}.o ${DIST_CFLAGS} && ${TRIM} 149FINISH.o =${FINISH} -o ${.TARGET}.o && ${TRIM} 150 151# Use those to generate the desired syscall stubs 152${PASM}: ; @${GENERATE.rsyscall} | ${FINISH.po} 153${SASM}: ; @${GENERATE.rsyscall} | ${FINISH.so} 154${DASM}: ; @${GENERATE.rsyscall} | ${FINISH.do} 155${ASM}: ; @${GENERATE.rsyscall} | ${FINISH.o} 156 157${PASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.po} 158${SASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.so} 159${DASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.do} 160${ASM_NOERR}: ; @${GENERATE.rsyscall_noerr} | ${FINISH.o} 161 162${PPSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.po} 163${SPSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.so} 164${DPSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.do} 165${PSEUDO}: ; @${GENERATE.pseudo} | ${FINISH.o} 166 167${PPSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.po} 168${SPSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.so} 169${DPSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.do} 170${PSEUDO_NOERR}: ; @${GENERATE.pseudo_noerr} | ${FINISH.o} 171 172${PHIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.po} 173${SHIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.so} 174${DHIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.do} 175${HIDDEN}: ; @${GENERATE.rsyscall_hidden} | ${FINISH.o} 176 177 178MAN+= __get_tcb.2 __thrsigdivert.2 __thrsleep.2 _exit.2 accept.2 \ 179 access.2 acct.2 adjfreq.2 adjtime.2 bind.2 brk.2 chdir.2 \ 180 chflags.2 chmod.2 chown.2 chroot.2 clock_gettime.2 close.2 \ 181 closefrom.2 connect.2 dup.2 execve.2 fcntl.2 fhopen.2 flock.2 \ 182 fork.2 fsync.2 futex.2 getentropy.2 getdents.2 getdtablecount.2 \ 183 getfh.2 getfsstat.2 getgid.2 getgroups.2 getitimer.2 getlogin.2 \ 184 getpeername.2 getpgrp.2 getpid.2 getpriority.2 getrlimit.2 \ 185 getrtable.2 getrusage.2 getsid.2 getsockname.2 getsockopt.2 \ 186 getthrid.2 gettimeofday.2 getuid.2 intro.2 ioctl.2 issetugid.2 \ 187 kbind.2 kill.2 kqueue.2 ktrace.2 link.2 listen.2 lseek.2 madvise.2 \ 188 minherit.2 mkdir.2 mkfifo.2 mknod.2 mlock.2 \ 189 mlockall.2 mmap.2 mount.2 mprotect.2 mquery.2 msyscall.2 msgctl.2 \ 190 msgget.2 msgrcv.2 msgsnd.2 msync.2 munmap.2 nanosleep.2 \ 191 nfssvc.2 open.2 pathconf.2 pipe.2 pledge.2 poll.2 profil.2 \ 192 ptrace.2 quotactl.2 read.2 readlink.2 reboot.2 recv.2 \ 193 rename.2 revoke.2 rmdir.2 sched_yield.2 select.2 semctl.2 semget.2 \ 194 semop.2 send.2 setgroups.2 setpgid.2 setregid.2 \ 195 setresuid.2 setreuid.2 setsid.2 sendsyslog.2 setuid.2 shmat.2 \ 196 shmctl.2 shmget.2 shutdown.2 sigaction.2 sigaltstack.2 sigpending.2 \ 197 sigprocmask.2 sigreturn.2 sigsuspend.2 socket.2 \ 198 socketpair.2 stat.2 statfs.2 swapctl.2 symlink.2 \ 199 sync.2 sysarch.2 syscall.2 sysctl.2 thrkill.2 truncate.2 \ 200 umask.2 unlink.2 unveil.2 utimes.2 utrace.2 vfork.2 wait.2 write.2 201