From 5bc208c4f5f60b4d1f3bc3610f9ab61175c62402 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Thu, 24 Aug 2017 16:49:18 +0200 Subject: [PATCH] Use an architecture-independent system call list (#1484729) --- glibc-rh1484729-syscall-names.patch | 603 ++++++++++++++++++++++++++++ glibc-rh1484729.patch | 346 ++++++++++++++++ glibc.spec | 9 +- 3 files changed, 957 insertions(+), 1 deletion(-) create mode 100644 glibc-rh1484729-syscall-names.patch create mode 100644 glibc-rh1484729.patch diff --git a/glibc-rh1484729-syscall-names.patch b/glibc-rh1484729-syscall-names.patch new file mode 100644 index 0000000..ffd6313 --- /dev/null +++ b/glibc-rh1484729-syscall-names.patch @@ -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 ++# . ++ ++# 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 diff --git a/glibc-rh1484729.patch b/glibc-rh1484729.patch new file mode 100644 index 0000000..42b7483 --- /dev/null +++ b/glibc-rh1484729.patch @@ -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 + + : 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 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 +-# 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 directly; include 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 . Include ++# explicitly because 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 \n#include \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 ++# . ++ ++# 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 ++# . ++ ++# 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 directly; include 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 ++# . ++ ++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" diff --git a/glibc.spec b/glibc.spec index 8180b75..890e451 100644 --- a/glibc.spec +++ b/glibc.spec @@ -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 - 2.26.90-10 +- Use an architecture-independent system call list (#1484729) + * Tue Aug 22 2017 Florian Weimer - 2.26.90-9 - Auto-sync with upstream master, commit 80f91666fed71fa3dd5eb5618739147cc731bc89.