diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/Makefile')
-rw-r--r-- | sysdeps/unix/sysv/linux/Makefile | 187 |
1 files changed, 98 insertions, 89 deletions
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 9999600633..f71cc39c7e 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -14,105 +14,90 @@ endif ifeq ($(subdir),misc) include $(firstword $(wildcard $(sysdirs:=/sysctl.mk))) -sysdep_routines += clone llseek umount umount2 readahead \ - setfsuid setfsgid makedev epoll_pwait signalfd \ +sysdep_routines += clone umount umount2 readahead \ + setfsuid setfsgid epoll_pwait signalfd \ eventfd eventfd_read eventfd_write prlimit \ - personality + personality epoll_wait tee vmsplice splice \ + open_by_handle_at mlock2 pkey_mprotect pkey_set pkey_get CFLAGS-gethostid.c = -fexceptions -CFLAGS-tst-writev.c += "-DARTIFICIAL_LIMIT=0x80000000-__getpagesize()" - -# Note that bits/mman-linux.h is listed here though the file lives in the -# top-level bits/ subdirectory instead of here in sysdeps/.../linux/bits/. -# That is just so that other (non-Linux) configurations for whom the -# bits/mman-linux.h definitions work well do not have to duplicate the -# contents of the file. The file must still be listed in sysdep_headers -# here and in any non-Linux configuration that uses it; other -# configurations will not install the file. +CFLAGS-tee.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-vmsplice.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-splice.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-open_by_handle_at.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-sync_file_range.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-tst-writev.c += "-DARTIFICIAL_LIMIT=(0x80000000-sysconf(_SC_PAGESIZE))" + sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \ sys/klog.h \ sys/user.h sys/prctl.h \ sys/kd.h sys/soundcard.h sys/vt.h \ sys/quota.h sys/fsuid.h \ scsi/sg.h scsi/scsi.h scsi/scsi_ioctl.h sys/pci.h \ - sys/ultrasound.h sys/raw.h sys/personality.h sys/epoll.h \ + sys/raw.h sys/personality.h sys/epoll.h \ bits/a.out.h sys/inotify.h sys/signalfd.h sys/eventfd.h \ sys/timerfd.h sys/fanotify.h bits/eventfd.h bits/inotify.h \ bits/signalfd.h bits/timerfd.h bits/epoll.h \ bits/socket_type.h bits/syscall.h bits/sysctl.h \ - bits/mman-linux.h - -tests += tst-clone tst-fanotify tst-personality - -# Generate the list of SYS_* macros for the system calls (__NR_* macros). - -# If there is more than one syscall list for different architecture -# variants, the CPU/Makefile defines abi-variants to be a list of names -# for those variants (e.g. 32 64), and, for each variant, defines -# abi-$(variant)-options to be compiler options to cause <asm/unistd.h> -# to define the desired list of syscalls and abi-$(variant)-condition to -# be the condition for those options to use in a C #if condition. -# abi-includes may be defined to a list of headers to include -# in the generated header, if the default does not suffice. -# -# The generated header is compiled with `-ffreestanding' to avoid any -# circular dependencies against the installed implementation headers. -# Such a dependency would require the implementation header to be -# installed before the generated header could be built (See bug 15711). -# In current practice the generated header dependencies do not include -# any of the implementation headers removed by the use of `-ffreestanding'. - -$(objpfx)bits/syscall%h $(objpfx)bits/syscall%d: ../sysdeps/unix/sysv/linux/sys/syscall.h + bits/mman-linux.h bits/mman-shared.h bits/ptrace-shared.h \ + bits/siginfo-arch.h bits/siginfo-consts-arch.h + +tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \ + tst-quota tst-sync_file_range tst-sysconf-iov_max tst-ttyname \ + test-errno-linux tst-memfd_create tst-mlock2 tst-pkey \ + tst-rlimit-infinity tst-ofdlocks +tests-internal += tst-ofdlocks-compat + + +# Generate the list of SYS_* macros for the system calls (__NR_* +# macros). The file syscall-names.list contains all possible system +# call names, and the generated header file produces SYS_* macros for +# the __NR_* macros which are actually defined. + +generated += bits/syscall.h +$(objpfx)bits/syscall.h: \ + ../sysdeps/unix/sysv/linux/gen-syscall-h.awk \ + ../sysdeps/unix/sysv/linux/syscall-names.list $(make-target-directory) - { \ - echo '/* Generated at libc build time from kernel syscall list. */';\ - echo ''; \ - echo '#ifndef _SYSCALL_H'; \ - echo '# error "Never use <bits/syscall.h> directly; include <sys/syscall.h> instead."'; \ - echo '#endif'; \ - echo ''; \ - $(foreach h,$(abi-includes), echo '#include <$(h)>';) \ - echo ''; \ - $(if $(abi-variants), \ - $(foreach v,$(abi-variants),\ - $(CC) -ffreestanding -E -MD -MP -MF $(@:.h=.d)-t$(v) -MT '$(@:.d=.h) $(@:.h=.d)' \ - -x c $(sysincludes) $< $(abi-$(v)-options) \ - -D_LIBC -dM | \ - sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' | \ - LC_ALL=C sort > $(@:.d=.h).new$(v); \ - $(if $(abi-$(v)-condition),\ - echo '#if $(abi-$(v)-condition)';) \ - cat $(@:.d=.h).new$(v); \ - $(if $(abi-$(v)-condition),echo '#endif';) \ - rm -f $(@:.d=.h).new$(v); \ - ), \ - $(CC) -ffreestanding -E -MD -MP -MF $(@:.h=.d)-t$(v) -MT '$(@:.d=.h) $(@:.h=.d)' \ - -x c $(sysincludes) $< \ - -D_LIBC -dM | \ - sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' | \ - LC_ALL=C sort;) \ - } > $(@:.d=.h).new - mv -f $(@:.d=.h).new $(@:.d=.h) -ifdef abi-variants -ifneq (,$(objpfx)) - sed $(sed-remove-objpfx) \ - $(foreach v,$(abi-variants),$(@:.h=.d)-t$(v)) > $(@:.h=.d)-t3 -else - cat $(foreach v,$(abi-variants),$(@:.h=.d)-t$(v)) \ - > $(@:.h=.d)-t3 -endif - rm -f $(foreach v,$(abi-variants),$(@:.h=.d)-t$(v)) - mv -f $(@:.h=.d)-t3 $(@:.h=.d) -else - mv -f $(@:.h=.d)-t $(@:.h=.d) -endif - -ifndef no_deps -# Get the generated list of dependencies (probably /usr/include/asm/unistd.h). --include $(objpfx)bits/syscall.d -endif -generated += bits/syscall.h bits/syscall.d -endif + LC_ALL=C $(AWK) -f $^ > $@-tmp + $(move-if-change) $@-tmp $@ +before-compile += $(objpfx)bits/syscall.h + +# All macros defined by <sys/syscall.h>. Include <bits/syscall.h> +# explicitly because <sys/sycall.h> skips it if _LIBC is defined. +$(objpfx)tst-syscall-list-macros.list: \ + $(objpfx)bits/syscall.h ../sysdeps/unix/sysv/linux/sys/syscall.h + printf '#include <linux/version.h>\n\ +#include <sys/syscall.h>\n#include <bits/syscall.h>\n' | \ + $(CC) -E -o $@-tmp $(CFLAGS) $(CPPFLAGS) -x c - -dM + $(move-if-change) $@-tmp $@ + +# __NR_* system call names. Used by the test below. +$(objpfx)tst-syscall-list-nr.list: \ + ../sysdeps/unix/sysv/linux/filter-nr-syscalls.awk \ + $(objpfx)tst-syscall-list-macros.list + LC_ALL=C $(AWK) -f $^ > $@-tmp + $(move-if-change) $@-tmp $@ + +# SYS_* system call names. Used by the test below. +$(objpfx)tst-syscall-list-sys.list: $(objpfx)tst-syscall-list-macros.list + LC_ALL=C $(AWK) '/^#define SYS_/ { print substr($$2, 5) }' $< > $@-tmp + $(move-if-change) $@-tmp $@ + +tests-special += $(objpfx)tst-syscall-list.out +$(objpfx)tst-syscall-list.out: \ + ../sysdeps/unix/sysv/linux/tst-syscall-list.sh \ + $(objpfx)tst-syscall-list-macros.list \ + $(objpfx)tst-syscall-list-nr.list \ + $(objpfx)tst-syscall-list-sys.list + $(BASH) $^ $(AWK) > $@; $(evaluate-test) + +# Separate object file for access to the constant from the UAPI header. +$(objpfx)tst-sysconf-iov_max: $(objpfx)tst-sysconf-iov_max-uapi.o + +$(objpfx)tst-pkey: $(shared-thread-library) + +endif # $(subdir) == misc ifeq ($(subdir),time) sysdep_headers += sys/timex.h bits/timex.h @@ -120,11 +105,27 @@ sysdep_headers += sys/timex.h bits/timex.h sysdep_routines += ntp_gettime ntp_gettimex endif +ifeq ($(subdir),signal) +tests-special += $(objpfx)tst-signal-numbers.out +# Depending on signal.o* is a hack. What we actually want is a dependency +# on signal.h and everything it includes. That's impractical to write +# in this context, but signal.c includes signal.h and not much else so it'll +# be conservatively correct. +$(objpfx)tst-signal-numbers.out: \ + ../sysdeps/unix/sysv/linux/tst-signal-numbers.sh \ + $(objpfx)signal.o* + AWK=$(AWK) $(SHELL) ../sysdeps/unix/sysv/linux/tst-signal-numbers.sh \ + $(CC) $(patsubst -DMODULE_NAME=%,-DMODULE_NAME=testsuite,$(CPPFLAGS)) \ + < /dev/null > $@; $(evaluate-test) +endif + ifeq ($(subdir),socket) sysdep_headers += net/if_ppp.h net/ppp-comp.h \ net/ppp_defs.h net/if_arp.h net/route.h net/ethernet.h \ net/if_slip.h net/if_packet.h net/if_shaper.h sysdep_routines += cmsg_nxthdr +CFLAGS-recvmmsg.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-sendmmsg.c = -fexceptions -fasynchronous-unwind-tables endif ifeq ($(subdir),sunrpc) @@ -138,7 +139,7 @@ endif ifeq ($(subdir),posix) sysdep_headers += bits/initspin.h -sysdep_routines += sched_getcpu +sysdep_routines += sched_getcpu oldglob tests += tst-affinity tst-affinity-pid @@ -168,8 +169,15 @@ endif ifeq ($(subdir),io) sysdep_routines += xstatconv internal_statvfs internal_statvfs64 \ - sync_file_range fallocate fallocate64 + sync_file_range fallocate fallocate64 \ + close_nocancel fcntl_nocancel nanosleep_nocancel \ + open_nocancel open64_nocancel \ + openat_nocancel openat64_nocancel \ + pause_nocancel read_nocancel waitpid_nocancel write_nocancel + sysdep_headers += bits/fcntl-linux.h + +tests += tst-fallocate tst-fallocate64 endif ifeq ($(subdir),elf) @@ -189,12 +197,13 @@ CFLAGS-mq_receive.c += -fexceptions endif ifeq ($(subdir),nscd) -sysdep-CFLAGS += -DHAVE_EPOLL -DHAVE_SENDFILE -DHAVE_INOTIFY -DHAVE_NETLINK +sysdep-CFLAGS += -DHAVE_EPOLL -DHAVE_INOTIFY -DHAVE_NETLINK CFLAGS-gai.c += -DNEED_NETLINK endif ifeq ($(subdir),nptl) -tests += tst-setgetname tst-align-clone tst-getpid1 tst-getpid2 \ +tests += tst-align-clone tst-getpid1 \ tst-thread-affinity-pthread tst-thread-affinity-pthread2 \ tst-thread-affinity-sched +tests-internal += tst-setgetname endif |