Use an architecture-independent system call list (#1484729)
This commit is contained in:
parent
a4f378196e
commit
5bc208c4f5
603
glibc-rh1484729-syscall-names.patch
Normal file
603
glibc-rh1484729-syscall-names.patch
Normal file
@ -0,0 +1,603 @@
|
||||
The explicit system call list for system call management was not
|
||||
accepted upstream.
|
||||
diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
|
||||
new file mode 100644
|
||||
index 00000000..459b2226
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/unix/sysv/linux/syscall-names.list
|
||||
@@ -0,0 +1,595 @@
|
||||
+# List of all known Linux system calls.
|
||||
+# Copyright (C) 2017 Free Software Foundation, Inc.
|
||||
+# This file is part of the GNU C Library.
|
||||
+#
|
||||
+# The GNU C Library is free software; you can redistribute it and/or
|
||||
+# modify it under the terms of the GNU Lesser General Public
|
||||
+# License as published by the Free Software Foundation; either
|
||||
+# version 2.1 of the License, or (at your option) any later version.
|
||||
+#
|
||||
+# The GNU C Library is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+# Lesser General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU Lesser General Public
|
||||
+# License along with the GNU C Library; if not, see
|
||||
+# <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+# This file contains the list of system call names names. It has to
|
||||
+# remain in alphabetica order. Lines which start with # are treated
|
||||
+# as comments. This file can list all potential system calls. The
|
||||
+# names are only used if the installed kernel headers also provide
|
||||
+# them.
|
||||
+
|
||||
+# The list of system calls is current as of Linux 4.11.
|
||||
+kernel 4.11
|
||||
+
|
||||
+FAST_atomic_update
|
||||
+FAST_cmpxchg
|
||||
+FAST_cmpxchg64
|
||||
+_llseek
|
||||
+_newselect
|
||||
+_sysctl
|
||||
+accept
|
||||
+accept4
|
||||
+access
|
||||
+acct
|
||||
+add_key
|
||||
+adjtimex
|
||||
+afs_syscall
|
||||
+alarm
|
||||
+arch_prctl
|
||||
+arm_fadvise64_64
|
||||
+arm_sync_file_range
|
||||
+atomic_barrier
|
||||
+atomic_cmpxchg_32
|
||||
+bdflush
|
||||
+bind
|
||||
+bpf
|
||||
+break
|
||||
+brk
|
||||
+cachectl
|
||||
+cacheflush
|
||||
+capget
|
||||
+capset
|
||||
+chdir
|
||||
+chmod
|
||||
+chown
|
||||
+chown32
|
||||
+chroot
|
||||
+clock_adjtime
|
||||
+clock_getres
|
||||
+clock_gettime
|
||||
+clock_nanosleep
|
||||
+clock_settime
|
||||
+clone
|
||||
+clone2
|
||||
+close
|
||||
+cmpxchg_badaddr
|
||||
+connect
|
||||
+copy_file_range
|
||||
+creat
|
||||
+create_module
|
||||
+delete_module
|
||||
+dipc
|
||||
+dup
|
||||
+dup2
|
||||
+dup3
|
||||
+epoll_create
|
||||
+epoll_create1
|
||||
+epoll_ctl
|
||||
+epoll_ctl_old
|
||||
+epoll_pwait
|
||||
+epoll_wait
|
||||
+epoll_wait_old
|
||||
+eventfd
|
||||
+eventfd2
|
||||
+exec_with_loader
|
||||
+execv
|
||||
+execve
|
||||
+execveat
|
||||
+exit
|
||||
+exit_group
|
||||
+faccessat
|
||||
+fadvise64
|
||||
+fadvise64_64
|
||||
+fallocate
|
||||
+fanotify_init
|
||||
+fanotify_mark
|
||||
+fchdir
|
||||
+fchmod
|
||||
+fchmodat
|
||||
+fchown
|
||||
+fchown32
|
||||
+fchownat
|
||||
+fcntl
|
||||
+fcntl64
|
||||
+fdatasync
|
||||
+fgetxattr
|
||||
+finit_module
|
||||
+flistxattr
|
||||
+flock
|
||||
+fork
|
||||
+fremovexattr
|
||||
+fsetxattr
|
||||
+fstat
|
||||
+fstat64
|
||||
+fstatat64
|
||||
+fstatfs
|
||||
+fstatfs64
|
||||
+fsync
|
||||
+ftime
|
||||
+ftruncate
|
||||
+ftruncate64
|
||||
+futex
|
||||
+futimesat
|
||||
+get_kernel_syms
|
||||
+get_mempolicy
|
||||
+get_robust_list
|
||||
+get_thread_area
|
||||
+getcpu
|
||||
+getcwd
|
||||
+getdents
|
||||
+getdents64
|
||||
+getdomainname
|
||||
+getdtablesize
|
||||
+getegid
|
||||
+getegid32
|
||||
+geteuid
|
||||
+geteuid32
|
||||
+getgid
|
||||
+getgid32
|
||||
+getgroups
|
||||
+getgroups32
|
||||
+gethostname
|
||||
+getitimer
|
||||
+getpagesize
|
||||
+getpeername
|
||||
+getpgid
|
||||
+getpgrp
|
||||
+getpid
|
||||
+getpmsg
|
||||
+getppid
|
||||
+getpriority
|
||||
+getrandom
|
||||
+getresgid
|
||||
+getresgid32
|
||||
+getresuid
|
||||
+getresuid32
|
||||
+getrlimit
|
||||
+getrusage
|
||||
+getsid
|
||||
+getsockname
|
||||
+getsockopt
|
||||
+gettid
|
||||
+gettimeofday
|
||||
+getuid
|
||||
+getuid32
|
||||
+getunwind
|
||||
+getxattr
|
||||
+getxgid
|
||||
+getxpid
|
||||
+getxuid
|
||||
+gtty
|
||||
+idle
|
||||
+init_module
|
||||
+inotify_add_watch
|
||||
+inotify_init
|
||||
+inotify_init1
|
||||
+inotify_rm_watch
|
||||
+io_cancel
|
||||
+io_destroy
|
||||
+io_getevents
|
||||
+io_setup
|
||||
+io_submit
|
||||
+ioctl
|
||||
+ioperm
|
||||
+iopl
|
||||
+ioprio_get
|
||||
+ioprio_set
|
||||
+ipc
|
||||
+kcmp
|
||||
+kern_features
|
||||
+kexec_file_load
|
||||
+kexec_load
|
||||
+keyctl
|
||||
+kill
|
||||
+lchown
|
||||
+lchown32
|
||||
+lgetxattr
|
||||
+link
|
||||
+linkat
|
||||
+listen
|
||||
+listxattr
|
||||
+llistxattr
|
||||
+llseek
|
||||
+lock
|
||||
+lookup_dcookie
|
||||
+lremovexattr
|
||||
+lseek
|
||||
+lsetxattr
|
||||
+lstat
|
||||
+lstat64
|
||||
+madvise
|
||||
+mbind
|
||||
+membarrier
|
||||
+memfd_create
|
||||
+memory_ordering
|
||||
+migrate_pages
|
||||
+mincore
|
||||
+mkdir
|
||||
+mkdirat
|
||||
+mknod
|
||||
+mknodat
|
||||
+mlock
|
||||
+mlock2
|
||||
+mlockall
|
||||
+mmap
|
||||
+mmap2
|
||||
+modify_ldt
|
||||
+mount
|
||||
+move_pages
|
||||
+mprotect
|
||||
+mpx
|
||||
+mq_getsetattr
|
||||
+mq_notify
|
||||
+mq_open
|
||||
+mq_timedreceive
|
||||
+mq_timedsend
|
||||
+mq_unlink
|
||||
+mremap
|
||||
+msgctl
|
||||
+msgget
|
||||
+msgrcv
|
||||
+msgsnd
|
||||
+msync
|
||||
+multiplexer
|
||||
+munlock
|
||||
+munlockall
|
||||
+munmap
|
||||
+name_to_handle_at
|
||||
+nanosleep
|
||||
+newfstatat
|
||||
+nfsservctl
|
||||
+ni_syscall
|
||||
+nice
|
||||
+old_adjtimex
|
||||
+oldfstat
|
||||
+oldlstat
|
||||
+oldolduname
|
||||
+oldstat
|
||||
+oldumount
|
||||
+olduname
|
||||
+open
|
||||
+open_by_handle_at
|
||||
+openat
|
||||
+osf_adjtime
|
||||
+osf_afs_syscall
|
||||
+osf_alt_plock
|
||||
+osf_alt_setsid
|
||||
+osf_alt_sigpending
|
||||
+osf_asynch_daemon
|
||||
+osf_audcntl
|
||||
+osf_audgen
|
||||
+osf_chflags
|
||||
+osf_execve
|
||||
+osf_exportfs
|
||||
+osf_fchflags
|
||||
+osf_fdatasync
|
||||
+osf_fpathconf
|
||||
+osf_fstat
|
||||
+osf_fstatfs
|
||||
+osf_fstatfs64
|
||||
+osf_fuser
|
||||
+osf_getaddressconf
|
||||
+osf_getdirentries
|
||||
+osf_getdomainname
|
||||
+osf_getfh
|
||||
+osf_getfsstat
|
||||
+osf_gethostid
|
||||
+osf_getitimer
|
||||
+osf_getlogin
|
||||
+osf_getmnt
|
||||
+osf_getrusage
|
||||
+osf_getsysinfo
|
||||
+osf_gettimeofday
|
||||
+osf_kloadcall
|
||||
+osf_kmodcall
|
||||
+osf_lstat
|
||||
+osf_memcntl
|
||||
+osf_mincore
|
||||
+osf_mount
|
||||
+osf_mremap
|
||||
+osf_msfs_syscall
|
||||
+osf_msleep
|
||||
+osf_mvalid
|
||||
+osf_mwakeup
|
||||
+osf_naccept
|
||||
+osf_nfssvc
|
||||
+osf_ngetpeername
|
||||
+osf_ngetsockname
|
||||
+osf_nrecvfrom
|
||||
+osf_nrecvmsg
|
||||
+osf_nsendmsg
|
||||
+osf_ntp_adjtime
|
||||
+osf_ntp_gettime
|
||||
+osf_old_creat
|
||||
+osf_old_fstat
|
||||
+osf_old_getpgrp
|
||||
+osf_old_killpg
|
||||
+osf_old_lstat
|
||||
+osf_old_open
|
||||
+osf_old_sigaction
|
||||
+osf_old_sigblock
|
||||
+osf_old_sigreturn
|
||||
+osf_old_sigsetmask
|
||||
+osf_old_sigvec
|
||||
+osf_old_stat
|
||||
+osf_old_vadvise
|
||||
+osf_old_vtrace
|
||||
+osf_old_wait
|
||||
+osf_oldquota
|
||||
+osf_pathconf
|
||||
+osf_pid_block
|
||||
+osf_pid_unblock
|
||||
+osf_plock
|
||||
+osf_priocntlset
|
||||
+osf_profil
|
||||
+osf_proplist_syscall
|
||||
+osf_reboot
|
||||
+osf_revoke
|
||||
+osf_sbrk
|
||||
+osf_security
|
||||
+osf_select
|
||||
+osf_set_program_attributes
|
||||
+osf_set_speculative
|
||||
+osf_sethostid
|
||||
+osf_setitimer
|
||||
+osf_setlogin
|
||||
+osf_setsysinfo
|
||||
+osf_settimeofday
|
||||
+osf_shmat
|
||||
+osf_signal
|
||||
+osf_sigprocmask
|
||||
+osf_sigsendset
|
||||
+osf_sigstack
|
||||
+osf_sigwaitprim
|
||||
+osf_sstk
|
||||
+osf_stat
|
||||
+osf_statfs
|
||||
+osf_statfs64
|
||||
+osf_subsys_info
|
||||
+osf_swapctl
|
||||
+osf_swapon
|
||||
+osf_syscall
|
||||
+osf_sysinfo
|
||||
+osf_table
|
||||
+osf_uadmin
|
||||
+osf_usleep_thread
|
||||
+osf_uswitch
|
||||
+osf_utc_adjtime
|
||||
+osf_utc_gettime
|
||||
+osf_utimes
|
||||
+osf_utsname
|
||||
+osf_wait4
|
||||
+osf_waitid
|
||||
+pause
|
||||
+pciconfig_iobase
|
||||
+pciconfig_read
|
||||
+pciconfig_write
|
||||
+perf_event_open
|
||||
+perfctr
|
||||
+perfmonctl
|
||||
+personality
|
||||
+pipe
|
||||
+pipe2
|
||||
+pivot_root
|
||||
+pkey_alloc
|
||||
+pkey_free
|
||||
+pkey_mprotect
|
||||
+poll
|
||||
+ppoll
|
||||
+prctl
|
||||
+pread64
|
||||
+preadv
|
||||
+preadv2
|
||||
+prlimit64
|
||||
+process_vm_readv
|
||||
+process_vm_writev
|
||||
+prof
|
||||
+profil
|
||||
+pselect6
|
||||
+ptrace
|
||||
+putpmsg
|
||||
+pwrite64
|
||||
+pwritev
|
||||
+pwritev2
|
||||
+query_module
|
||||
+quotactl
|
||||
+read
|
||||
+readahead
|
||||
+readdir
|
||||
+readlink
|
||||
+readlinkat
|
||||
+readv
|
||||
+reboot
|
||||
+recv
|
||||
+recvfrom
|
||||
+recvmmsg
|
||||
+recvmsg
|
||||
+remap_file_pages
|
||||
+removexattr
|
||||
+rename
|
||||
+renameat
|
||||
+renameat2
|
||||
+request_key
|
||||
+restart_syscall
|
||||
+rmdir
|
||||
+rt_sigaction
|
||||
+rt_sigpending
|
||||
+rt_sigprocmask
|
||||
+rt_sigqueueinfo
|
||||
+rt_sigreturn
|
||||
+rt_sigsuspend
|
||||
+rt_sigtimedwait
|
||||
+rt_tgsigqueueinfo
|
||||
+rtas
|
||||
+s390_pci_mmio_read
|
||||
+s390_pci_mmio_write
|
||||
+s390_runtime_instr
|
||||
+sched_get_affinity
|
||||
+sched_get_priority_max
|
||||
+sched_get_priority_min
|
||||
+sched_getaffinity
|
||||
+sched_getattr
|
||||
+sched_getparam
|
||||
+sched_getscheduler
|
||||
+sched_rr_get_interval
|
||||
+sched_set_affinity
|
||||
+sched_setaffinity
|
||||
+sched_setattr
|
||||
+sched_setparam
|
||||
+sched_setscheduler
|
||||
+sched_yield
|
||||
+seccomp
|
||||
+security
|
||||
+select
|
||||
+semctl
|
||||
+semget
|
||||
+semop
|
||||
+semtimedop
|
||||
+send
|
||||
+sendfile
|
||||
+sendfile64
|
||||
+sendmmsg
|
||||
+sendmsg
|
||||
+sendto
|
||||
+set_mempolicy
|
||||
+set_robust_list
|
||||
+set_thread_area
|
||||
+set_tid_address
|
||||
+setdomainname
|
||||
+setfsgid
|
||||
+setfsgid32
|
||||
+setfsuid
|
||||
+setfsuid32
|
||||
+setgid
|
||||
+setgid32
|
||||
+setgroups
|
||||
+setgroups32
|
||||
+sethae
|
||||
+sethostname
|
||||
+setitimer
|
||||
+setns
|
||||
+setpgid
|
||||
+setpgrp
|
||||
+setpriority
|
||||
+setregid
|
||||
+setregid32
|
||||
+setresgid
|
||||
+setresgid32
|
||||
+setresuid
|
||||
+setresuid32
|
||||
+setreuid
|
||||
+setreuid32
|
||||
+setrlimit
|
||||
+setsid
|
||||
+setsockopt
|
||||
+settimeofday
|
||||
+setuid
|
||||
+setuid32
|
||||
+setxattr
|
||||
+sgetmask
|
||||
+shmat
|
||||
+shmctl
|
||||
+shmdt
|
||||
+shmget
|
||||
+shutdown
|
||||
+sigaction
|
||||
+sigaltstack
|
||||
+signal
|
||||
+signalfd
|
||||
+signalfd4
|
||||
+sigpending
|
||||
+sigprocmask
|
||||
+sigreturn
|
||||
+sigsuspend
|
||||
+socket
|
||||
+socketcall
|
||||
+socketpair
|
||||
+splice
|
||||
+spu_create
|
||||
+spu_run
|
||||
+ssetmask
|
||||
+stat
|
||||
+stat64
|
||||
+statfs
|
||||
+statfs64
|
||||
+statx
|
||||
+stime
|
||||
+stty
|
||||
+subpage_prot
|
||||
+swapcontext
|
||||
+swapoff
|
||||
+swapon
|
||||
+switch_endian
|
||||
+symlink
|
||||
+symlinkat
|
||||
+sync
|
||||
+sync_file_range
|
||||
+sync_file_range2
|
||||
+syncfs
|
||||
+sys_debug_setcontext
|
||||
+sys_epoll_create
|
||||
+sys_epoll_ctl
|
||||
+sys_epoll_wait
|
||||
+syscall
|
||||
+sysfs
|
||||
+sysinfo
|
||||
+syslog
|
||||
+sysmips
|
||||
+tee
|
||||
+tgkill
|
||||
+time
|
||||
+timer_create
|
||||
+timer_delete
|
||||
+timer_getoverrun
|
||||
+timer_gettime
|
||||
+timer_settime
|
||||
+timerfd
|
||||
+timerfd_create
|
||||
+timerfd_gettime
|
||||
+timerfd_settime
|
||||
+times
|
||||
+tkill
|
||||
+truncate
|
||||
+truncate64
|
||||
+tuxcall
|
||||
+ugetrlimit
|
||||
+ulimit
|
||||
+umask
|
||||
+umount
|
||||
+umount2
|
||||
+uname
|
||||
+unlink
|
||||
+unlinkat
|
||||
+unshare
|
||||
+uselib
|
||||
+userfaultfd
|
||||
+ustat
|
||||
+utime
|
||||
+utimensat
|
||||
+utimes
|
||||
+utrap_install
|
||||
+vfork
|
||||
+vhangup
|
||||
+vm86
|
||||
+vm86old
|
||||
+vmsplice
|
||||
+vserver
|
||||
+wait4
|
||||
+waitid
|
||||
+waitpid
|
||||
+write
|
||||
+writev
|
346
glibc-rh1484729.patch
Normal file
346
glibc-rh1484729.patch
Normal file
@ -0,0 +1,346 @@
|
||||
Posted upstream at:
|
||||
|
||||
https://sourceware.org/ml/libc-alpha/2017-04/msg00082.html
|
||||
|
||||
sysdeps/unix/sysv/linux/syscall-names.list is stored as a separate patch
|
||||
(glibc-rh1439165-syscall-names.patch) in the source RPM for easier
|
||||
updates.
|
||||
|
||||
Author: Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
<bits/syscall.h>: Use an arch-independent system call list on Linux
|
||||
|
||||
This commit changes the way the list of SYS_* system call macros
|
||||
is created on Linux. glibc now contains a list of all known system
|
||||
calls, and the generated <bits/syscall.h> file defines the SYS_
|
||||
macro only if the correspnding __NR_ macro is defined by the kernel
|
||||
headers.
|
||||
|
||||
As a result, there glibc does not have to be rebuilt to pick up
|
||||
system calls if the glibc sources already know about them. This
|
||||
means that glibc can be built with older kernel headers, and if
|
||||
the installed kernel headers are upgraded afterwards, additional
|
||||
SYS_ macros become available as long as glibc has a record for
|
||||
those system calls.
|
||||
|
||||
The explicit system call list for system call management was not
|
||||
accepted upstream.
|
||||
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
|
||||
index 9d6a2de8..bb7a3c78 100644
|
||||
--- a/sysdeps/unix/sysv/linux/Makefile
|
||||
+++ b/sysdeps/unix/sysv/linux/Makefile
|
||||
@@ -52,75 +52,46 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
|
||||
tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \
|
||||
tst-quota tst-sync_file_range test-errno-linux
|
||||
|
||||
-# 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
|
||||
+# 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
|
||||
+ $(AWK) -f $^ > $@-tmp
|
||||
+ $(move-if-change) $@-tmp $@
|
||||
+
|
||||
+# 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 <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
|
||||
+ $(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
|
||||
+ $(AWK) '/^#define SYS_/ { print substr($$2, 5) }' $< > $@-tmp
|
||||
+ $(move-if-change) $@-tmp $@
|
||||
+
|
||||
+tests: $(objpfx)tst-syscall-list.out
|
||||
+$(objpfx)tst-syscall-list.out: \
|
||||
+ ../sysdeps/unix/sysv/linux/tst-syscall-list.sh \
|
||||
+ $(objpfx)tst-syscall-list-nr.list $(objpfx)tst-syscall-list-sys.list
|
||||
+ $(BASH) $^ > $@
|
||||
+
|
||||
+endif # $(subdir) == misc
|
||||
|
||||
ifeq ($(subdir),time)
|
||||
sysdep_headers += sys/timex.h bits/timex.h
|
||||
diff --git a/sysdeps/unix/sysv/linux/filter-nr-syscalls.awk b/sysdeps/unix/sysv/linux/filter-nr-syscalls.awk
|
||||
new file mode 100644
|
||||
index 00000000..15b052a9
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/unix/sysv/linux/filter-nr-syscalls.awk
|
||||
@@ -0,0 +1,35 @@
|
||||
+# Filter preprocessor __NR_* macros and extract system call names.
|
||||
+# Copyright (C) 2017 Free Software Foundation, Inc.
|
||||
+# This file is part of the GNU C Library.
|
||||
+#
|
||||
+# The GNU C Library is free software; you can redistribute it and/or
|
||||
+# modify it under the terms of the GNU Lesser General Public
|
||||
+# License as published by the Free Software Foundation; either
|
||||
+# version 2.1 of the License, or (at your option) any later version.
|
||||
+#
|
||||
+# The GNU C Library is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+# Lesser General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU Lesser General Public
|
||||
+# License along with the GNU C Library; if not, see
|
||||
+# <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+# Skip reserved system calls.
|
||||
+/^#define __NR_(unused|reserved)[0-9]+ / {
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+# Skip pseudo-system calls which describe ranges.
|
||||
+/^#define __NR_(syscalls|arch_specific_syscall|(OABI_)?SYSCALL_BASE) / {
|
||||
+ next;
|
||||
+}
|
||||
+/^#define __NR_(|64_|[NO]32_)Linux(_syscalls)? / {
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+# Print the remaining _NR_* macros as system call names.
|
||||
+/^#define __NR_/ {
|
||||
+ print substr($2, 6);
|
||||
+}
|
||||
diff --git a/sysdeps/unix/sysv/linux/gen-syscall-h.awk b/sysdeps/unix/sysv/linux/gen-syscall-h.awk
|
||||
new file mode 100644
|
||||
index 00000000..0a27b3cc
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/unix/sysv/linux/gen-syscall-h.awk
|
||||
@@ -0,0 +1,75 @@
|
||||
+# Generate SYS_* macros from a list in a text file.
|
||||
+# Copyright (C) 2017 Free Software Foundation, Inc.
|
||||
+# This file is part of the GNU C Library.
|
||||
+#
|
||||
+# The GNU C Library is free software; you can redistribute it and/or
|
||||
+# modify it under the terms of the GNU Lesser General Public
|
||||
+# License as published by the Free Software Foundation; either
|
||||
+# version 2.1 of the License, or (at your option) any later version.
|
||||
+#
|
||||
+# The GNU C Library is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+# Lesser General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU Lesser General Public
|
||||
+# License along with the GNU C Library; if not, see
|
||||
+# <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+# Emit a conditional definition for SYS_NAME.
|
||||
+function emit(name) {
|
||||
+ print "#ifdef __NR_" name;
|
||||
+ print "# define SYS_" name " __NR_" name;
|
||||
+ print "#endif";
|
||||
+ print "";
|
||||
+}
|
||||
+
|
||||
+# Bail out with an error.
|
||||
+function fatal(message) {
|
||||
+ print FILENAME ":" FNR ": " message > "/dev/stderr";
|
||||
+ exit 1;
|
||||
+}
|
||||
+
|
||||
+BEGIN {
|
||||
+ name = "";
|
||||
+ kernel = "";
|
||||
+}
|
||||
+
|
||||
+# Skip empty lines and comments.
|
||||
+/^\s*(|#.*)$/ {
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+# Kernel version. Used for documentation purposes only.
|
||||
+/^kernel [0-9.]+$/ {
|
||||
+ if (kernel != "") {
|
||||
+ fatal("duplicate kernel directive");
|
||||
+ }
|
||||
+ kernel = $2;
|
||||
+ print "/* Generated at libc build time from syscall list. */";
|
||||
+ print "/* The system call list corresponds to kernel " kernel ". */";
|
||||
+ print "";
|
||||
+ print "#ifndef _SYSCALL_H"
|
||||
+ print "# error \"Never use <bits/syscall.h> directly; include <sys/syscall.h> instead.\"";
|
||||
+ print "#endif";
|
||||
+ print "";
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+# If there is just one word, it is a system call.
|
||||
+/^[a-zA-Z_][a-zA-Z0-9_]+$/ {
|
||||
+ if (kernel == "") {
|
||||
+ fatal("expected kernel directive before this line");
|
||||
+ }
|
||||
+ if ($1 <= name) {
|
||||
+ fatal("name " name " violates ordering");
|
||||
+ }
|
||||
+ emit($1);
|
||||
+ name = $1;
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+# The rest has to be syntax errors.
|
||||
+// {
|
||||
+ fatal("unrecognized syntax");
|
||||
+}
|
||||
diff --git a/sysdeps/unix/sysv/linux/tst-syscall-list.sh b/sysdeps/unix/sysv/linux/tst-syscall-list.sh
|
||||
new file mode 100644
|
||||
index 00000000..f48b7cd6
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/unix/sysv/linux/tst-syscall-list.sh
|
||||
@@ -0,0 +1,72 @@
|
||||
+#!/bin/bash
|
||||
+# Consistency checks for the system call list
|
||||
+# Copyright (C) 2017 Free Software Foundation, Inc.
|
||||
+# This file is part of the GNU C Library.
|
||||
+#
|
||||
+# The GNU C Library is free software; you can redistribute it and/or
|
||||
+# modify it under the terms of the GNU Lesser General Public
|
||||
+# License as published by the Free Software Foundation; either
|
||||
+# version 2.1 of the License, or (at your option) any later version.
|
||||
+#
|
||||
+# The GNU C Library is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+# Lesser General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU Lesser General Public
|
||||
+# License along with the GNU C Library; if not, see
|
||||
+# <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+export LC_ALL=C
|
||||
+set -e
|
||||
+set -o pipefail
|
||||
+
|
||||
+if test $# != 2 ; then
|
||||
+ echo "error: wrong number of arguments: $#"
|
||||
+ exit 1
|
||||
+fi
|
||||
+
|
||||
+list_nr="$1"
|
||||
+list_sys="$2"
|
||||
+
|
||||
+errors=0
|
||||
+
|
||||
+# Use getpid as a system call which is expected to be always defined.
|
||||
+# alpha uses getxpid instead, so it is permitted as an alternative.
|
||||
+if ! grep -E -q '^getx?pid$' -- "$list_nr" ; then
|
||||
+ echo "error: __NR_getpid not defined"
|
||||
+ errors=1
|
||||
+fi
|
||||
+if ! grep -E -q '^getx?pid$' -- "$list_sys" ; then
|
||||
+ echo "error: SYS_getpid not defined"
|
||||
+ errors=1
|
||||
+fi
|
||||
+
|
||||
+comm_1="$(mktemp)"
|
||||
+comm_2="$(mktemp)"
|
||||
+comm_result="$(mktemp)"
|
||||
+cleanup () {
|
||||
+ rm -f -- "$comm_1" "$comm_2" "$comm_result"
|
||||
+}
|
||||
+trap cleanup 0
|
||||
+
|
||||
+sort -o "$comm_1" -- "$list_nr"
|
||||
+sort -o "$comm_2" -- "$list_sys"
|
||||
+
|
||||
+# Check for missing SYS_* macros.
|
||||
+comm --check-order -2 -3 -- "$comm_1" "$comm_2" > "$comm_result"
|
||||
+if test -s "$comm_result"; then
|
||||
+ echo "error: These system calls need to be added to syscall-names.list:"
|
||||
+ cat -- "$comm_result"
|
||||
+ errors=1
|
||||
+fi
|
||||
+
|
||||
+# Check for additional SYS_* macros.
|
||||
+comm --check-order -1 -3 -- "$comm_1" "$comm_2" > "$comm_result"
|
||||
+if test -s "$comm_result"; then
|
||||
+ echo "error: The following system calls have unexpected SYS_* macros:"
|
||||
+ cat -- "$comm_result"
|
||||
+ errors=1
|
||||
+fi
|
||||
+
|
||||
+exit "$errors"
|
@ -1,6 +1,6 @@
|
||||
%define glibcsrcdir glibc-2.26-159-g80f91666fe
|
||||
%define glibcversion 2.26.90
|
||||
%define glibcrelease 9%{?dist}
|
||||
%define glibcrelease 10%{?dist}
|
||||
# Pre-release tarballs are pulled in from git using a command that is
|
||||
# effectively:
|
||||
#
|
||||
@ -261,6 +261,8 @@ Patch2037: glibc-rh1315108.patch
|
||||
Patch2112: glibc-rh1315476-2.patch
|
||||
|
||||
Patch2114: glibc-rh1470060.patch
|
||||
Patch2115: glibc-rh1484729.patch
|
||||
Patch2116: glibc-rh1484729-syscall-names.patch
|
||||
|
||||
##############################################################################
|
||||
# End of glibc patches.
|
||||
@ -749,6 +751,8 @@ microbenchmark tests on the system.
|
||||
%patch2037 -p1
|
||||
%patch2112 -p1
|
||||
%patch2114 -p1
|
||||
%patch2115 -p1
|
||||
%patch2116 -p1
|
||||
%patch0061 -p1
|
||||
|
||||
##############################################################################
|
||||
@ -2081,6 +2085,9 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu Aug 24 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-10
|
||||
- Use an architecture-independent system call list (#1484729)
|
||||
|
||||
* Tue Aug 22 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-9
|
||||
- Auto-sync with upstream master,
|
||||
commit 80f91666fed71fa3dd5eb5618739147cc731bc89.
|
||||
|
Loading…
Reference in New Issue
Block a user