mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 12:54:27 +00:00
d7847a8d35
These provide standard APIs, but are implemented using another system call (e.g., pipe implemented in terms of pipe2) or are interposed by the threading library to support cancelation. After discussion with kib (see D44111), I've concluded that it is better to keep most public interfaces in libc with as little as possible in libsys. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D44241
545 lines
12 KiB
Makefile
545 lines
12 KiB
Makefile
# Implement symbols common to libc and libsys.
|
|
#
|
|
# When dynamically linked, the libc symbols are filtered by the actual
|
|
# implementations in libsys. When statically linked, both libc and
|
|
# libsys contain full implementations to preserve the API of libc.a.
|
|
#
|
|
# The following variable are programmer-defined:
|
|
#
|
|
# MDASM Override the default syscall implementation in MIASM
|
|
# (from syscall.mk below). Each entry is a source file
|
|
# name (e.g., vfork.S).
|
|
# Generally defined in <arch>/Makefile.sys.
|
|
# NOASM Don't generate system call stubs. Each entry is an
|
|
# object file name (e.g., yeild.o). Don't add more of these.
|
|
# PSEUDO Generate _<sys> and __sys_<sys> symbols, but not <sys>.
|
|
# Each entry is a bare syscall name (e.g., "clock_gettime").
|
|
# INTERPOSED Like PSEUDO, but <sys>.c is added to SRCS.
|
|
# Used for syscalls intercepted by the threading library.
|
|
#
|
|
.PATH: ${LIBSYS_SRCTOP}/${LIBC_ARCH} ${LIBSYS_SRCTOP}
|
|
|
|
# Include the generated makefile containing the *complete* list
|
|
# of syscall names in MIASM.
|
|
.include "${SRCTOP}/sys/sys/syscall.mk"
|
|
|
|
# Include machine dependent definitions.
|
|
.include "${LIBSYS_SRCTOP}/${LIBC_ARCH}/Makefile.sys"
|
|
.if ${LIBC_ARCH} == "i386" || ${LIBC_ARCH} == "amd64"
|
|
.include "${LIBSYS_SRCTOP}/x86/Makefile.sys"
|
|
.endif
|
|
|
|
SRCS+= clock_gettime.c gettimeofday.c __vdso_gettimeofday.c
|
|
|
|
# Sources common to both syscall interfaces:
|
|
SRCS+= \
|
|
__error.c \
|
|
__getosreldate.c \
|
|
getpagesize.c \
|
|
getpagesizes.c \
|
|
interposing_table.c \
|
|
libsys_sigwait.c
|
|
|
|
.if ${LIB} == "c"
|
|
# Trapping stubs in dynamic libc to be filtered by libsys.
|
|
SOBJS+= libc_stubs.pico
|
|
|
|
# Link the full implementation of ELF auxargs for static libc.
|
|
STATICOBJS+= auxv.o
|
|
.endif
|
|
|
|
NOASM= yield.o
|
|
|
|
PSEUDO= \
|
|
clock_gettime \
|
|
exit \
|
|
getlogin \
|
|
gettimeofday \
|
|
sched_getcpu
|
|
|
|
INTERPOSED = \
|
|
accept \
|
|
accept4 \
|
|
aio_suspend \
|
|
clock_nanosleep \
|
|
close \
|
|
connect \
|
|
fcntl \
|
|
fdatasync \
|
|
fsync \
|
|
fork \
|
|
kevent \
|
|
msync \
|
|
nanosleep \
|
|
open \
|
|
openat \
|
|
pdfork \
|
|
poll \
|
|
ppoll \
|
|
pselect \
|
|
ptrace \
|
|
read \
|
|
readv \
|
|
recvfrom \
|
|
recvmsg \
|
|
select \
|
|
sendmsg \
|
|
sendto \
|
|
setcontext \
|
|
sigaction \
|
|
sigprocmask \
|
|
sigsuspend \
|
|
sigtimedwait \
|
|
sigwait \
|
|
sigwaitinfo \
|
|
swapcontext \
|
|
wait4 \
|
|
wait6 \
|
|
write \
|
|
writev
|
|
|
|
PSEUDO+= ${INTERPOSED}
|
|
|
|
# Add machine dependent asm sources:
|
|
SRCS+=${MDASM}
|
|
|
|
# Look though the complete list of syscalls (MIASM) for names that are
|
|
# not defined with machine dependent implementations (MDASM), not declared
|
|
# without a trival <sys> symbol (PSEUDO). Add each syscall that satisfies
|
|
# these conditions to the ASM list.
|
|
.for _asm in ${MIASM}
|
|
.if !${MDASM:R:M${_asm:R}} && !${NOASM:R:M${_asm:R}} && !${PSEUDO:M${_asm:R}}
|
|
ASM+=$(_asm)
|
|
.endif
|
|
.endfor
|
|
|
|
SASM= ${ASM:S/.o/.S/}
|
|
|
|
SPSEUDO= ${PSEUDO:C/^.*$/_&.S/}
|
|
|
|
SRCS+= ${SASM} ${SPSEUDO}
|
|
|
|
SYM_MAPS+= ${LIBSYS_SRCTOP}/syscalls.map
|
|
SYM_MAPS+= ${LIBSYS_SRCTOP}/Symbol.sys.map
|
|
.if exists(${LIBSYS_SRCTOP}/${LIBC_ARCH}/Symbol.sys.map)
|
|
SYM_MAPS+= ${LIBSYS_SRCTOP}/${LIBC_ARCH}/Symbol.sys.map
|
|
.endif
|
|
|
|
# Generated files
|
|
CLEANFILES+= ${SASM} ${SPSEUDO}
|
|
|
|
.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" || \
|
|
${MACHINE_CPUARCH} == "powerpc" || ${MACHINE_CPUARCH} == "arm"
|
|
NOTE_GNU_STACK='\t.section .note.GNU-stack,"",%%progbits\n'
|
|
.else
|
|
NOTE_GNU_STACK=''
|
|
.endif
|
|
.if ${MACHINE_CPUARCH} == "aarch64"
|
|
FEATURE_NOTE='\#include <sys/elf_common.h>\nGNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)\n'
|
|
.else
|
|
FEATURE_NOTE=''
|
|
.endif
|
|
|
|
${SASM}:
|
|
printf '/* %sgenerated by libc/sys/Makefile.inc */\n' @ > ${.TARGET}
|
|
printf '#include "compat.h"\n' >> ${.TARGET}
|
|
printf '#include "SYS.h"\nRSYSCALL(${.PREFIX})\n' >> ${.TARGET}
|
|
printf ${NOTE_GNU_STACK} >>${.TARGET}
|
|
printf ${FEATURE_NOTE} >> ${.TARGET}
|
|
|
|
${SPSEUDO}:
|
|
printf '/* %sgenerated by libc/sys/Makefile.inc */\n' @ > ${.TARGET}
|
|
printf '#include "compat.h"\n' >> ${.TARGET}
|
|
printf '#include "SYS.h"\nPSEUDO(${.PREFIX:S/_//})\n' \
|
|
>> ${.TARGET}
|
|
printf ${NOTE_GNU_STACK} >>${.TARGET}
|
|
printf ${FEATURE_NOTE} >> ${.TARGET}
|
|
|
|
.if ${LIB} == "sys"
|
|
MAN+= abort2.2 \
|
|
accept.2 \
|
|
access.2 \
|
|
acct.2 \
|
|
adjtime.2 \
|
|
aio_cancel.2 \
|
|
aio_error.2 \
|
|
aio_fsync.2 \
|
|
aio_mlock.2 \
|
|
aio_read.2 \
|
|
aio_return.2 \
|
|
aio_suspend.2 \
|
|
aio_waitcomplete.2 \
|
|
aio_write.2 \
|
|
auxv.3 \
|
|
bind.2 \
|
|
bindat.2 \
|
|
brk.2 \
|
|
cap_enter.2 \
|
|
cap_fcntls_limit.2 \
|
|
cap_ioctls_limit.2 \
|
|
cap_rights_limit.2 \
|
|
chdir.2 \
|
|
chflags.2 \
|
|
chmod.2 \
|
|
chown.2 \
|
|
chroot.2 \
|
|
clock_gettime.2 \
|
|
close.2 \
|
|
closefrom.2 \
|
|
connect.2 \
|
|
connectat.2 \
|
|
copy_file_range.2 \
|
|
cpuset.2 \
|
|
cpuset_getaffinity.2 \
|
|
cpuset_getdomain.2 \
|
|
creat.2 \
|
|
dup.2 \
|
|
eventfd.2 \
|
|
execve.2 \
|
|
_exit.2 \
|
|
extattr_get_file.2 \
|
|
fcntl.2 \
|
|
ffclock.2 \
|
|
fhlink.2 \
|
|
fhopen.2 \
|
|
fhreadlink.2 \
|
|
flock.2 \
|
|
fork.2 \
|
|
fspacectl.2 \
|
|
fsync.2 \
|
|
getdirentries.2 \
|
|
getdtablesize.2 \
|
|
getfh.2 \
|
|
getfsstat.2 \
|
|
getgid.2 \
|
|
getgroups.2 \
|
|
getitimer.2 \
|
|
getlogin.2 \
|
|
getloginclass.2 \
|
|
getpeername.2 \
|
|
getpgrp.2 \
|
|
getpid.2 \
|
|
getpriority.2 \
|
|
getrandom.2 \
|
|
getrlimit.2 \
|
|
getrusage.2 \
|
|
getsid.2 \
|
|
getsockname.2 \
|
|
getsockopt.2 \
|
|
gettimeofday.2 \
|
|
getuid.2 \
|
|
intro.2 \
|
|
ioctl.2 \
|
|
issetugid.2 \
|
|
jail.2 \
|
|
kcmp.2 \
|
|
kenv.2 \
|
|
kill.2 \
|
|
kldfind.2 \
|
|
kldfirstmod.2 \
|
|
kldload.2 \
|
|
kldnext.2 \
|
|
kldstat.2 \
|
|
kldsym.2 \
|
|
kldunload.2 \
|
|
kqueue.2 \
|
|
ktrace.2 \
|
|
link.2 \
|
|
lio_listio.2 \
|
|
listen.2 \
|
|
lseek.2 \
|
|
madvise.2 \
|
|
mincore.2 \
|
|
minherit.2 \
|
|
mkdir.2 \
|
|
mkfifo.2 \
|
|
mknod.2 \
|
|
mlock.2 \
|
|
mlockall.2 \
|
|
mmap.2 \
|
|
modfind.2 \
|
|
modnext.2 \
|
|
modstat.2 \
|
|
mount.2 \
|
|
mprotect.2 \
|
|
mq_close.2 \
|
|
mq_getattr.2 \
|
|
mq_notify.2 \
|
|
mq_open.2 \
|
|
mq_receive.2 \
|
|
mq_send.2 \
|
|
mq_setattr.2 \
|
|
mq_unlink.2 \
|
|
msgctl.2 \
|
|
msgget.2 \
|
|
msgrcv.2 \
|
|
msgsnd.2 \
|
|
msync.2 \
|
|
munmap.2 \
|
|
nanosleep.2 \
|
|
nfssvc.2 \
|
|
ntp_adjtime.2 \
|
|
open.2 \
|
|
pathconf.2 \
|
|
pdfork.2 \
|
|
pipe.2 \
|
|
poll.2 \
|
|
posix_fadvise.2 \
|
|
posix_fallocate.2 \
|
|
posix_openpt.2 \
|
|
procctl.2 \
|
|
profil.2 \
|
|
pselect.2 \
|
|
ptrace.2 \
|
|
quotactl.2 \
|
|
rctl_add_rule.2 \
|
|
read.2 \
|
|
readlink.2 \
|
|
reboot.2 \
|
|
recv.2 \
|
|
rename.2 \
|
|
revoke.2 \
|
|
rfork.2 \
|
|
rmdir.2 \
|
|
rtprio.2 \
|
|
sched_get_priority_max.2 \
|
|
sched_setparam.2 \
|
|
sched_setscheduler.2 \
|
|
sched_yield.2 \
|
|
sctp_generic_recvmsg.2 \
|
|
sctp_generic_sendmsg.2 \
|
|
sctp_peeloff.2 \
|
|
select.2 \
|
|
semctl.2 \
|
|
semget.2 \
|
|
semop.2 \
|
|
send.2 \
|
|
setfib.2 \
|
|
sendfile.2 \
|
|
setgroups.2 \
|
|
setpgid.2 \
|
|
setregid.2 \
|
|
setresuid.2 \
|
|
setreuid.2 \
|
|
setsid.2 \
|
|
setuid.2 \
|
|
shmat.2 \
|
|
shmctl.2 \
|
|
shmget.2 \
|
|
shm_open.2 \
|
|
shutdown.2 \
|
|
sigaction.2 \
|
|
sigaltstack.2 \
|
|
sigfastblock.2 \
|
|
sigpending.2 \
|
|
sigprocmask.2 \
|
|
sigqueue.2 \
|
|
sigreturn.2 \
|
|
sigstack.2 \
|
|
sigsuspend.2 \
|
|
sigwait.2 \
|
|
sigwaitinfo.2 \
|
|
socket.2 \
|
|
socketpair.2 \
|
|
stat.2 \
|
|
statfs.2 \
|
|
swapon.2 \
|
|
symlink.2 \
|
|
sync.2 \
|
|
sysarch.2 \
|
|
syscall.2 \
|
|
thr_exit.2 \
|
|
thr_kill.2 \
|
|
thr_new.2 \
|
|
thr_self.2 \
|
|
thr_set_name.2 \
|
|
thr_suspend.2 \
|
|
thr_wake.2 \
|
|
timer_create.2 \
|
|
timer_delete.2 \
|
|
timer_settime.2 \
|
|
timerfd.2 \
|
|
truncate.2 \
|
|
umask.2 \
|
|
undelete.2 \
|
|
unlink.2 \
|
|
utimensat.2 \
|
|
utimes.2 \
|
|
utrace.2 \
|
|
uuidgen.2 \
|
|
vfork.2 \
|
|
wait.2 \
|
|
write.2 \
|
|
_umtx_op.2
|
|
|
|
MAN+= \
|
|
getpagesize.3 \
|
|
getpagesizes.3 \
|
|
lockf.3 \
|
|
rfork_thread.3 \
|
|
sleep.3 \
|
|
usleep.3
|
|
|
|
MLINKS+=aio_read.2 aio_readv.2 \
|
|
aio_read.2 aio_read2.2
|
|
MLINKS+=aio_write.2 aio_writev.2 \
|
|
aio_write.2 aio_write2.2
|
|
MLINKS+=accept.2 accept4.2
|
|
MLINKS+=access.2 eaccess.2 \
|
|
access.2 faccessat.2
|
|
MLINKS+=auxv.3 elf_aux_info.3
|
|
MLINKS+=brk.2 sbrk.2
|
|
MLINKS+=cap_enter.2 cap_getmode.2
|
|
MLINKS+=cap_fcntls_limit.2 cap_fcntls_get.2
|
|
MLINKS+=cap_ioctls_limit.2 cap_ioctls_get.2
|
|
MLINKS+=chdir.2 fchdir.2
|
|
MLINKS+=chflags.2 chflagsat.2 \
|
|
chflags.2 fchflags.2 \
|
|
chflags.2 lchflags.2
|
|
MLINKS+=chmod.2 fchmod.2 \
|
|
chmod.2 fchmodat.2 \
|
|
chmod.2 lchmod.2
|
|
MLINKS+=chown.2 fchown.2 \
|
|
chown.2 fchownat.2 \
|
|
chown.2 lchown.2
|
|
MLINKS+=clock_gettime.2 clock_getres.2 \
|
|
clock_gettime.2 clock_settime.2
|
|
MLINKS+=closefrom.2 close_range.2
|
|
MLINKS+=nanosleep.2 clock_nanosleep.2
|
|
MLINKS+=cpuset.2 cpuset_getid.2 \
|
|
cpuset.2 cpuset_setid.2
|
|
MLINKS+=cpuset_getaffinity.2 cpuset_setaffinity.2
|
|
MLINKS+=cpuset_getdomain.2 cpuset_setdomain.2
|
|
MLINKS+=dup.2 dup2.2
|
|
MLINKS+=eventfd.2 eventfd_read.3 \
|
|
eventfd.2 eventfd_write.3
|
|
MLINKS+=execve.2 fexecve.2
|
|
MLINKS+=extattr_get_file.2 extattr.2 \
|
|
extattr_get_file.2 extattr_delete_fd.2 \
|
|
extattr_get_file.2 extattr_delete_file.2 \
|
|
extattr_get_file.2 extattr_delete_link.2 \
|
|
extattr_get_file.2 extattr_get_fd.2 \
|
|
extattr_get_file.2 extattr_get_link.2 \
|
|
extattr_get_file.2 extattr_list_fd.2 \
|
|
extattr_get_file.2 extattr_list_file.2 \
|
|
extattr_get_file.2 extattr_list_link.2 \
|
|
extattr_get_file.2 extattr_set_fd.2 \
|
|
extattr_get_file.2 extattr_set_file.2 \
|
|
extattr_get_file.2 extattr_set_link.2
|
|
MLINKS+=ffclock.2 ffclock_getcounter.2 \
|
|
ffclock.2 ffclock_getestimate.2 \
|
|
ffclock.2 ffclock_setestimate.2
|
|
MLINKS+=fhlink.2 fhlinkat.2
|
|
MLINKS+=fhopen.2 fhstat.2 fhopen.2 fhstatfs.2
|
|
MLINKS+=fork.2 _Fork.2
|
|
MLINKS+=fsync.2 fdatasync.2
|
|
MLINKS+=getdirentries.2 getdents.2
|
|
MLINKS+=getfh.2 lgetfh.2 \
|
|
getfh.2 getfhat.2
|
|
MLINKS+=getgid.2 getegid.2
|
|
MLINKS+=getitimer.2 setitimer.2
|
|
MLINKS+=getlogin.2 getlogin_r.3
|
|
MLINKS+=getlogin.2 setlogin.2
|
|
MLINKS+=getloginclass.2 setloginclass.2
|
|
MLINKS+=getpgrp.2 getpgid.2
|
|
MLINKS+=getpid.2 getppid.2
|
|
MLINKS+=getpriority.2 setpriority.2
|
|
MLINKS+=getrlimit.2 setrlimit.2
|
|
MLINKS+=getsockopt.2 setsockopt.2
|
|
MLINKS+=gettimeofday.2 settimeofday.2
|
|
MLINKS+=getuid.2 geteuid.2
|
|
MLINKS+=intro.2 errno.2
|
|
MLINKS+=jail.2 jail_attach.2 \
|
|
jail.2 jail_get.2 \
|
|
jail.2 jail_remove.2 \
|
|
jail.2 jail_set.2
|
|
MLINKS+=kldunload.2 kldunloadf.2
|
|
MLINKS+=kqueue.2 kevent.2 \
|
|
kqueue.2 kqueuex.2 \
|
|
kqueue.2 EV_SET.3
|
|
MLINKS+=link.2 linkat.2
|
|
MLINKS+=madvise.2 posix_madvise.2
|
|
MLINKS+=mkdir.2 mkdirat.2
|
|
MLINKS+=mkfifo.2 mkfifoat.2
|
|
MLINKS+=mknod.2 mknodat.2
|
|
MLINKS+=mlock.2 munlock.2
|
|
MLINKS+=mlockall.2 munlockall.2
|
|
MLINKS+=modnext.2 modfnext.2
|
|
MLINKS+=mount.2 nmount.2 \
|
|
mount.2 unmount.2
|
|
MLINKS+=mq_receive.2 mq_timedreceive.2
|
|
MLINKS+=mq_send.2 mq_timedsend.2
|
|
MLINKS+=ntp_adjtime.2 ntp_gettime.2
|
|
MLINKS+=open.2 openat.2
|
|
MLINKS+=pathconf.2 fpathconf.2
|
|
MLINKS+=pathconf.2 lpathconf.2
|
|
MLINKS+=pdfork.2 pdgetpid.2\
|
|
pdfork.2 pdkill.2
|
|
MLINKS+=pipe.2 pipe2.2
|
|
MLINKS+=poll.2 ppoll.2
|
|
MLINKS+=rctl_add_rule.2 rctl_get_limits.2 \
|
|
rctl_add_rule.2 rctl_get_racct.2 \
|
|
rctl_add_rule.2 rctl_get_rules.2 \
|
|
rctl_add_rule.2 rctl_remove_rule.2
|
|
MLINKS+=read.2 pread.2 \
|
|
read.2 preadv.2 \
|
|
read.2 readv.2
|
|
MLINKS+=readlink.2 readlinkat.2
|
|
MLINKS+=recv.2 recvfrom.2 \
|
|
recv.2 recvmsg.2
|
|
MLINKS+=rename.2 renameat.2
|
|
MLINKS+=rtprio.2 rtprio_thread.2
|
|
MLINKS+=sched_get_priority_max.2 sched_get_priority_min.2 \
|
|
sched_get_priority_max.2 sched_rr_get_interval.2
|
|
MLINKS+=sched_setparam.2 sched_getparam.2
|
|
MLINKS+=sched_setscheduler.2 sched_getscheduler.2
|
|
MLINKS+=sctp_generic_sendmsg.2 sctp_generic_sendmsg_iov.2
|
|
MLINKS+=select.2 FD_CLR.3 \
|
|
select.2 FD_ISSET.3 \
|
|
select.2 FD_SET.3 \
|
|
select.2 FD_ZERO.3
|
|
MLINKS+=send.2 sendmsg.2 \
|
|
send.2 sendto.2
|
|
MLINKS+=setpgid.2 setpgrp.2
|
|
MLINKS+=setresuid.2 getresgid.2 \
|
|
setresuid.2 getresuid.2 \
|
|
setresuid.2 setresgid.2
|
|
MLINKS+=setuid.2 setegid.2 \
|
|
setuid.2 seteuid.2 \
|
|
setuid.2 setgid.2
|
|
MLINKS+=shmat.2 shmdt.2
|
|
MLINKS+=shm_open.2 memfd_create.3 \
|
|
shm_open.2 shm_create_largepage.3 \
|
|
shm_open.2 shm_unlink.2 \
|
|
shm_open.2 shm_rename.2
|
|
MLINKS+=sigwaitinfo.2 sigtimedwait.2
|
|
MLINKS+=stat.2 fstat.2 \
|
|
stat.2 fstatat.2 \
|
|
stat.2 lstat.2
|
|
MLINKS+=statfs.2 fstatfs.2
|
|
MLINKS+=swapon.2 swapoff.2
|
|
MLINKS+=symlink.2 symlinkat.2
|
|
MLINKS+=syscall.2 __syscall.2
|
|
MLINKS+=timer_settime.2 timer_getoverrun.2 \
|
|
timer_settime.2 timer_gettime.2
|
|
MLINKS+=timerfd.2 timerfd_create.2 \
|
|
timerfd.2 timerfd_gettime.2 \
|
|
timerfd.2 timerfd_settime.2
|
|
MLINKS+=thr_kill.2 thr_kill2.2
|
|
MLINKS+=truncate.2 ftruncate.2
|
|
MLINKS+=unlink.2 unlinkat.2
|
|
MLINKS+=unlink.2 funlinkat.2
|
|
MLINKS+=utimensat.2 futimens.2
|
|
MLINKS+=utimes.2 futimes.2 \
|
|
utimes.2 futimesat.2 \
|
|
utimes.2 lutimes.2
|
|
MLINKS+=wait.2 wait3.2 \
|
|
wait.2 wait4.2 \
|
|
wait.2 waitpid.2 \
|
|
wait.2 waitid.2 \
|
|
wait.2 wait6.2
|
|
MLINKS+=write.2 pwrite.2 \
|
|
write.2 pwritev.2 \
|
|
write.2 writev.2
|
|
.endif # ${LIB} == "sys"
|