public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc/fw/builtin-syscalls-4] Linux: Use system call tables during build
@ 2019-12-31 10:50 Florian Weimer
  0 siblings, 0 replies; 2+ messages in thread
From: Florian Weimer @ 2019-12-31 10:50 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=f98c450aeca9eab2c87f8912f51fabefb21e1e32

commit f98c450aeca9eab2c87f8912f51fabefb21e1e32
Author: Florian Weimer <fweimer@redhat.com>
Date:   Fri May 31 13:47:27 2019 +0200

    Linux: Use system call tables during build
    
    Use <arch-syscall.h> instead of <asm/unistd.h> to obtain the system
    call numbers.  A few direct includes of <asm/unistd.h> need to be
    removed (if the system call numbers are already provided indirectly
    by <sysdep.h>) or replaced with <sys/syscall.h>.
    
    Current Linux headers for alpha define the required system call names,
    so most of the _NR_* hacks are no longer needed.  For the 32-bit arm
    architecture, eliminate the INTERNAL_SYSCALL_ARM macro, now that we
    have regular system call names for cacheflush and set_tls.  There are
    more such cleanup opportunities for other architectures, but these
    cleanups are required to avoid macro redefinition errors during the
    build.
    
    For ia64, it is desirable to use <asm/break.h> directly to obtain
    the break number for system calls (which is not a system call number
    itself).  This requires replacing __BREAK_SYSCALL with
    __IA64_BREAK_SYSCALL because the former is defined as an alias in
    <asm/unistd.h>, but not in <asm/break.h>.

Diff:
---
 NEWS                                            |  3 ++-
 sysdeps/ia64/start.S                            |  1 -
 sysdeps/microblaze/backtrace_linux.c            |  2 +-
 sysdeps/unix/sysv/linux/alpha/kernel-features.h |  5 -----
 sysdeps/unix/sysv/linux/alpha/sysdep.h          | 25 ---------------------
 sysdeps/unix/sysv/linux/arm/dl-machine.h        |  2 +-
 sysdeps/unix/sysv/linux/arm/sysdep.h            |  4 ----
 sysdeps/unix/sysv/linux/arm/tls.h               |  2 +-
 sysdeps/unix/sysv/linux/hppa/clone.S            |  1 -
 sysdeps/unix/sysv/linux/ia64/brk.S              |  1 -
 sysdeps/unix/sysv/linux/ia64/clone2.S           |  4 ++--
 sysdeps/unix/sysv/linux/ia64/syscall.S          |  2 +-
 sysdeps/unix/sysv/linux/ia64/sysdep.S           |  2 +-
 sysdeps/unix/sysv/linux/ia64/sysdep.h           |  5 +++--
 sysdeps/unix/sysv/linux/include/sys/syscall.h   | 29 +++++++++++++++++++++++++
 sysdeps/unix/sysv/linux/mips/vfork.S            |  1 -
 sysdeps/unix/sysv/linux/nios2/sysdep.h          |  1 -
 sysdeps/unix/sysv/linux/riscv/flush-icache.c    |  1 +
 sysdeps/unix/sysv/linux/sparc/sparc32/clone.S   |  1 -
 sysdeps/unix/sysv/linux/sparc/sparc64/clone.S   |  1 -
 sysdeps/unix/sysv/linux/sys/syscall.h           | 11 ++++------
 21 files changed, 46 insertions(+), 58 deletions(-)

diff --git a/NEWS b/NEWS
index 5a2d0a5..65140cb 100644
--- a/NEWS
+++ b/NEWS
@@ -101,7 +101,8 @@ Deprecated and removed features, and other changes affecting compatibility:
 
 Changes to build and runtime requirements:
 
-  [Add changes to build and runtime requirements here]
+* It is no longer necessary to have recent Linux kernel headers to build
+  working (non-stub) system call wrappers.
 
 Security related changes:
 
diff --git a/sysdeps/ia64/start.S b/sysdeps/ia64/start.S
index 7c52d39..239a728 100644
--- a/sysdeps/ia64/start.S
+++ b/sysdeps/ia64/start.S
@@ -35,7 +35,6 @@
 
 #include <sysdep.h>
 
-#include <asm/unistd.h>
 #include <asm/fpu.h>
 
 /*
diff --git a/sysdeps/microblaze/backtrace_linux.c b/sysdeps/microblaze/backtrace_linux.c
index d4035bd..89a318f 100644
--- a/sysdeps/microblaze/backtrace_linux.c
+++ b/sysdeps/microblaze/backtrace_linux.c
@@ -20,7 +20,7 @@
 #include <asm/sigcontext.h>
 #include <linux/signal.h>
 #include <asm-generic/ucontext.h>
-#include <asm/unistd.h>
+#include <sys/syscall.h>
 
 int
 _identify_sighandler (unsigned long fp, unsigned long pc,
diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
index d12916c..8b10cc7 100644
--- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
@@ -28,11 +28,6 @@
 # define __ASSUME_STATFS64 0
 #endif
 
-/* Alpha used to define SysV ipc shmat syscall with a different name.  */
-#ifndef __NR_shmat
-# define __NR_shmat __NR_osf_shmat
-#endif
-
 #define __ASSUME_RECV_SYSCALL	1
 #define __ASSUME_SEND_SYSCALL	1
 
diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep.h b/sysdeps/unix/sysv/linux/alpha/sysdep.h
index acb9de4..4779d62 100644
--- a/sysdeps/unix/sysv/linux/alpha/sysdep.h
+++ b/sysdeps/unix/sysv/linux/alpha/sysdep.h
@@ -37,31 +37,6 @@
 #undef SYS_ify
 #define SYS_ify(syscall_name)	__NR_##syscall_name
 
-/* Define some aliases to make automatic syscall generation work
-   properly.  The SYS_* variants are for the benefit of the files in
-   sysdeps/unix.  */
-#define __NR_getpid	__NR_getxpid
-#define __NR_getuid	__NR_getxuid
-#define __NR_getgid	__NR_getxgid
-#define SYS_getpid	__NR_getxpid
-#define SYS_getuid	__NR_getxuid
-#define SYS_getgid	__NR_getxgid
-
-/*
- * Some syscalls no Linux program should know about:
- */
-#define __NR_osf_sigprocmask	 48
-#ifndef __NR_osf_shmat
-# define __NR_osf_shmat		209
-#endif
-#define __NR_osf_getsysinfo	256
-#define __NR_osf_setsysinfo	257
-
-/* Help old kernel headers where particular syscalls are not available.  */
-#ifndef __NR_semtimedop
-# define __NR_semtimedop	423
-#endif
-
 /* This is a kludge to make syscalls.list find these under the names
    pread and pwrite, since some kernel headers define those names
    and some define the *64 names for the same system calls.  */
diff --git a/sysdeps/unix/sysv/linux/arm/dl-machine.h b/sysdeps/unix/sysv/linux/arm/dl-machine.h
index 5860258..ab5b4a9 100644
--- a/sysdeps/unix/sysv/linux/arm/dl-machine.h
+++ b/sysdeps/unix/sysv/linux/arm/dl-machine.h
@@ -20,7 +20,7 @@
 
 /* This definition is Linux-specific.  */
 #define CLEAR_CACHE(BEG,END)                                            \
-  INTERNAL_SYSCALL_ARM (cacheflush, , 3, (BEG), (END), 0)
+  INTERNAL_SYSCALL (cacheflush, , 3, (BEG), (END), 0)
 
 #endif
 
diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h
index e9e022e..5b2a9df 100644
--- a/sysdeps/unix/sysv/linux/arm/sysdep.h
+++ b/sysdeps/unix/sysv/linux/arm/sysdep.h
@@ -377,10 +377,6 @@ __local_syscall_error:						\
 #define INTERNAL_SYSCALL(name, err, nr, args...)		\
 	INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args)
 
-#undef INTERNAL_SYSCALL_ARM
-#define INTERNAL_SYSCALL_ARM(name, err, nr, args...)		\
-	INTERNAL_SYSCALL_RAW(__ARM_NR_##name, err, nr, args)
-
 #undef INTERNAL_SYSCALL_ERROR_P
 #define INTERNAL_SYSCALL_ERROR_P(val, err) \
   ((unsigned int) (val) >= 0xfffff001u)
diff --git a/sysdeps/unix/sysv/linux/arm/tls.h b/sysdeps/unix/sysv/linux/arm/tls.h
index 7dd9b64..54d6012 100644
--- a/sysdeps/unix/sysv/linux/arm/tls.h
+++ b/sysdeps/unix/sysv/linux/arm/tls.h
@@ -33,7 +33,7 @@
 # define TLS_INIT_TP(tcbp) \
   ({ INTERNAL_SYSCALL_DECL (err);					\
      long int result_var;						\
-     result_var = INTERNAL_SYSCALL_ARM (set_tls, err, 1, (tcbp));	\
+     result_var = INTERNAL_SYSCALL (set_tls, err, 1, (tcbp));		\
      INTERNAL_SYSCALL_ERROR_P (result_var, err)				\
        ? "unknown error" : NULL; })
 
diff --git a/sysdeps/unix/sysv/linux/hppa/clone.S b/sysdeps/unix/sysv/linux/hppa/clone.S
index 372d29a..536071b 100644
--- a/sysdeps/unix/sysv/linux/hppa/clone.S
+++ b/sysdeps/unix/sysv/linux/hppa/clone.S
@@ -20,7 +20,6 @@
 /* clone() is even more special than fork() as it mucks with stacks
    and invokes a function in the right context after its all over.  */
 
-#include <asm/unistd.h>
 #include <sysdep.h>
 #define _ERRNO_H	1
 #include <bits/errno.h>
diff --git a/sysdeps/unix/sysv/linux/ia64/brk.S b/sysdeps/unix/sysv/linux/ia64/brk.S
index 884ca2b..8e5f22e 100644
--- a/sysdeps/unix/sysv/linux/ia64/brk.S
+++ b/sysdeps/unix/sysv/linux/ia64/brk.S
@@ -20,7 +20,6 @@
 
 #include <sysdep.h>
 
-#include <asm/unistd.h>
 #include <asm/errno.h>
 
 	.global __curbrk
diff --git a/sysdeps/unix/sysv/linux/ia64/clone2.S b/sysdeps/unix/sysv/linux/ia64/clone2.S
index 01e9eb9..b43770d 100644
--- a/sysdeps/unix/sysv/linux/ia64/clone2.S
+++ b/sysdeps/unix/sysv/linux/ia64/clone2.S
@@ -58,7 +58,7 @@ ENTRY(__clone2)
 	 */
 	mov r15=SYS_ify (clone2)
 	.save rp, r0
-	break __BREAK_SYSCALL
+	break __IA64_BREAK_SYSCALL
 	.body
 	cmp.eq p6,p0=-1,r10
 	cmp.eq CHILD,PARENT=0,r8 /* Are we the child?   */
@@ -78,7 +78,7 @@ ENTRY(__clone2)
 	mov gp=loc0
 	mov r15=SYS_ify (exit)
 	.save rp, r0
-	break __BREAK_SYSCALL
+	break __IA64_BREAK_SYSCALL
 	ret			/* Not reached.		*/
 PSEUDO_END(__clone2)
 
diff --git a/sysdeps/unix/sysv/linux/ia64/syscall.S b/sysdeps/unix/sysv/linux/ia64/syscall.S
index b8209d2..51430aa 100644
--- a/sysdeps/unix/sysv/linux/ia64/syscall.S
+++ b/sysdeps/unix/sysv/linux/ia64/syscall.S
@@ -25,7 +25,7 @@ ENTRY(syscall)
 	   in {out0...out5} like the kernel syscall handler expects.  */
 	alloc r2=ar.pfs,1,0,8,0
 	mov r15=r32		/* syscall number */
-	break __BREAK_SYSCALL
+	break __IA64_BREAK_SYSCALL
 	;;
 	cmp.ne p6,p0=-1,r10	/* r10 = -1 on error */
 (p6)	ret
diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.S b/sysdeps/unix/sysv/linux/ia64/sysdep.S
index 0371c41..d3836e6 100644
--- a/sysdeps/unix/sysv/linux/ia64/sysdep.S
+++ b/sysdeps/unix/sysv/linux/ia64/sysdep.S
@@ -51,7 +51,7 @@ END(__syscall_error)
 
 ENTRY(__ia64_syscall)
 	mov r15=r37		/* syscall number */
-	break __BREAK_SYSCALL
+	break __IA64_BREAK_SYSCALL
 	cmp.eq p6,p0=-1,r10	/* r10 = -1 on error */
 (p6)	br.cond.spnt.few __syscall_error
 	ret
diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.h b/sysdeps/unix/sysv/linux/ia64/sysdep.h
index 4abe152..e55b2eb 100644
--- a/sysdeps/unix/sysv/linux/ia64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/ia64/sysdep.h
@@ -25,6 +25,7 @@
 #include <sysdeps/ia64/sysdep.h>
 #include <dl-sysdep.h>
 #include <tls.h>
+#include <asm/break.h>
 
 /* In order to get __set_errno() definition in INLINE_SYSCALL.  */
 #ifndef __ASSEMBLER__
@@ -115,7 +116,7 @@
 
 #define DO_CALL_VIA_BREAK(num)			\
 	mov r15=num;				\
-	break __BREAK_SYSCALL
+	break __IA64_BREAK_SYSCALL
 
 #ifdef IA64_USE_NEW_STUB
 # ifdef SHARED
@@ -229,7 +230,7 @@
     register long _r15 asm ("r15") = name;			\
     long _retval;						\
     LOAD_REGS_##nr						\
-    __asm __volatile (BREAK_INSN (__BREAK_SYSCALL)		\
+    __asm __volatile (BREAK_INSN (__IA64_BREAK_SYSCALL)		\
 		      : "=r" (_r8), "=r" (_r10), "=r" (_r15)	\
 			ASM_OUTARGS_##nr			\
 		      : "2" (_r15) ASM_ARGS_##nr		\
diff --git a/sysdeps/unix/sysv/linux/include/sys/syscall.h b/sysdeps/unix/sysv/linux/include/sys/syscall.h
new file mode 100644
index 0000000..fe87e8e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/include/sys/syscall.h
@@ -0,0 +1,29 @@
+/* Wrapper header for <sys/syscall.h>.  Linux version.
+   Copyright (C) 2019 Free Software Foundation, Inc.
+
+   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/>.  */
+
+#ifndef _SYSCALL_H
+
+#ifdef _ISOMAC
+# include <sysdeps/unix/sysv/linux/sys/syscall.h>
+#else /* !_ISOMAC */
+/* Use the built-in system call list, not <asm/unistd.h>, which may
+   not list all the system call numbers we need.  */
+# define _SYSCALL_H
+# include <arch-syscall.h>
+#endif /* !_ISOMAC */
+
+#endif /* _SYSCALL_H */
diff --git a/sysdeps/unix/sysv/linux/mips/vfork.S b/sysdeps/unix/sysv/linux/mips/vfork.S
index ec0f6bd..03b6cc2 100644
--- a/sysdeps/unix/sysv/linux/mips/vfork.S
+++ b/sysdeps/unix/sysv/linux/mips/vfork.S
@@ -19,7 +19,6 @@
 
 #include <sys/asm.h>
 #include <sysdep.h>
-#include <asm/unistd.h>
 #include <sgidefs.h>
 #include <tls.h>
 
diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep.h b/sysdeps/unix/sysv/linux/nios2/sysdep.h
index 58c119d..dda6405 100644
--- a/sysdeps/unix/sysv/linux/nios2/sysdep.h
+++ b/sysdeps/unix/sysv/linux/nios2/sysdep.h
@@ -19,7 +19,6 @@
 #ifndef _LINUX_NIOS2_SYSDEP_H
 #define _LINUX_NIOS2_SYSDEP_H 1
 
-#include <asm/unistd.h>
 #include <sysdeps/unix/sysdep.h>
 #include <sysdeps/nios2/sysdep.h>
 #include <sysdeps/unix/sysv/linux/generic/sysdep.h>
diff --git a/sysdeps/unix/sysv/linux/riscv/flush-icache.c b/sysdeps/unix/sysv/linux/riscv/flush-icache.c
index c5bd60d..39dd293 100644
--- a/sysdeps/unix/sysv/linux/riscv/flush-icache.c
+++ b/sysdeps/unix/sysv/linux/riscv/flush-icache.c
@@ -26,6 +26,7 @@
 #else
 # include <asm/unistd.h>
 #endif
+#include <sys/syscall.h>
 
 typedef int (*func_type) (void *, void *, unsigned long int);
 
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
index 6f6518e..ee82d82 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
@@ -20,7 +20,6 @@
    and invokes a function in the right context after its all over.  */
 
 #include <asm/errno.h>
-#include <asm/unistd.h>
 #include <tcb-offsets.h>
 #include <sysdep.h>
 
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
index f6122e5..603c0a0 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
@@ -20,7 +20,6 @@
    and invokes a function in the right context after its all over.  */
 
 #include <asm/errno.h>
-#include <asm/unistd.h>
 #include <tcb-offsets.h>
 #include <sysdep.h>
 
diff --git a/sysdeps/unix/sysv/linux/sys/syscall.h b/sysdeps/unix/sysv/linux/sys/syscall.h
index 223fba5..71e4250 100644
--- a/sysdeps/unix/sysv/linux/sys/syscall.h
+++ b/sysdeps/unix/sysv/linux/sys/syscall.h
@@ -23,12 +23,9 @@
    from the kernel sources.  */
 #include <asm/unistd.h>
 
-#ifndef _LIBC
-/* The Linux kernel header file defines macros `__NR_<name>', but some
-   programs expect the traditional form `SYS_<name>'.  So in building libc
-   we scan the kernel's list and produce <bits/syscall.h> with macros for
-   all the `SYS_' names.  */
-# include <bits/syscall.h>
-#endif
+/* The Linux kernel header file defines macros __NR_*, but some
+   programs expect the traditional form SYS_*.  <bits/syscall.h>
+   defines SYS_* macros for __NR_* macros of known names.  */
+#include <bits/syscall.h>
 
 #endif


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [glibc/fw/builtin-syscalls-4] Linux: Use system call tables during build
@ 2019-12-17  7:31 Florian Weimer
  0 siblings, 0 replies; 2+ messages in thread
From: Florian Weimer @ 2019-12-17  7:31 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0e0ad752c7bede0ef15eba47090e2f16bc3439ce

commit 0e0ad752c7bede0ef15eba47090e2f16bc3439ce
Author: Florian Weimer <fweimer@redhat.com>
Date:   Fri May 31 13:47:27 2019 +0200

    Linux: Use system call tables during build
    
    Use <arch-syscall.h> instead of <asm/unistd.h> to obtain the system
    call numbers.  A few direct includes of <asm/unistd.h> need to be
    removed (if the system call numbers are already provided indirectly
    by <sysdep.h>) or replaced with <sys/syscall.h>.
    
    Current Linux headers for alpha define the required system call names,
    so the _NR_* hacks are no longer needed.  (pread vs pread64, pwrite vs
    pwrite64 is already handled by the system call wrapper.)  There are more
    such cleanup opportunities for other architectures, but part of this
    alpha cleanup is needed to fix a macro redefinition error which breaks
    the build.
    
    For the 32-bit arm architecture, eliminate the INTERNAL_SYSCALL_ARM
    macro, now that we have regular system call names for cacheflush and
    set_tls.
    
    For ia64, it is desirable to use <asm/break.h> directly to obtain
    the break number for system calls (which is not a system call number
    itself).  This requires replacing __BREAK_SYSCALL with
    __IA64_BREAK_SYSCALL because the former is defined as an alias in
    <asm/unistd.h>, but not in <asm/break.h>.

Diff:
---
 NEWS                                            |  3 ++-
 sysdeps/ia64/start.S                            |  1 -
 sysdeps/microblaze/backtrace_linux.c            |  2 +-
 sysdeps/unix/sysv/linux/alpha/kernel-features.h |  5 -----
 sysdeps/unix/sysv/linux/alpha/sysdep.h          | 25 ---------------------
 sysdeps/unix/sysv/linux/arm/dl-machine.h        |  2 +-
 sysdeps/unix/sysv/linux/arm/sysdep.h            |  4 ----
 sysdeps/unix/sysv/linux/arm/tls.h               |  2 +-
 sysdeps/unix/sysv/linux/hppa/clone.S            |  1 -
 sysdeps/unix/sysv/linux/ia64/brk.S              |  1 -
 sysdeps/unix/sysv/linux/ia64/clone2.S           |  4 ++--
 sysdeps/unix/sysv/linux/ia64/syscall.S          |  2 +-
 sysdeps/unix/sysv/linux/ia64/sysdep.S           |  2 +-
 sysdeps/unix/sysv/linux/ia64/sysdep.h           |  5 +++--
 sysdeps/unix/sysv/linux/include/sys/syscall.h   | 29 +++++++++++++++++++++++++
 sysdeps/unix/sysv/linux/mips/vfork.S            |  1 -
 sysdeps/unix/sysv/linux/nios2/sysdep.h          |  1 -
 sysdeps/unix/sysv/linux/riscv/flush-icache.c    |  1 +
 sysdeps/unix/sysv/linux/sparc/sparc32/clone.S   |  1 -
 sysdeps/unix/sysv/linux/sparc/sparc64/clone.S   |  1 -
 sysdeps/unix/sysv/linux/sys/syscall.h           | 11 ++++------
 21 files changed, 46 insertions(+), 58 deletions(-)

diff --git a/NEWS b/NEWS
index 5a2d0a5..65140cb 100644
--- a/NEWS
+++ b/NEWS
@@ -101,7 +101,8 @@ Deprecated and removed features, and other changes affecting compatibility:
 
 Changes to build and runtime requirements:
 
-  [Add changes to build and runtime requirements here]
+* It is no longer necessary to have recent Linux kernel headers to build
+  working (non-stub) system call wrappers.
 
 Security related changes:
 
diff --git a/sysdeps/ia64/start.S b/sysdeps/ia64/start.S
index 7c52d39..239a728 100644
--- a/sysdeps/ia64/start.S
+++ b/sysdeps/ia64/start.S
@@ -35,7 +35,6 @@
 
 #include <sysdep.h>
 
-#include <asm/unistd.h>
 #include <asm/fpu.h>
 
 /*
diff --git a/sysdeps/microblaze/backtrace_linux.c b/sysdeps/microblaze/backtrace_linux.c
index d4035bd..89a318f 100644
--- a/sysdeps/microblaze/backtrace_linux.c
+++ b/sysdeps/microblaze/backtrace_linux.c
@@ -20,7 +20,7 @@
 #include <asm/sigcontext.h>
 #include <linux/signal.h>
 #include <asm-generic/ucontext.h>
-#include <asm/unistd.h>
+#include <sys/syscall.h>
 
 int
 _identify_sighandler (unsigned long fp, unsigned long pc,
diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
index d12916c..8b10cc7 100644
--- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
@@ -28,11 +28,6 @@
 # define __ASSUME_STATFS64 0
 #endif
 
-/* Alpha used to define SysV ipc shmat syscall with a different name.  */
-#ifndef __NR_shmat
-# define __NR_shmat __NR_osf_shmat
-#endif
-
 #define __ASSUME_RECV_SYSCALL	1
 #define __ASSUME_SEND_SYSCALL	1
 
diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep.h b/sysdeps/unix/sysv/linux/alpha/sysdep.h
index acb9de4..4779d62 100644
--- a/sysdeps/unix/sysv/linux/alpha/sysdep.h
+++ b/sysdeps/unix/sysv/linux/alpha/sysdep.h
@@ -37,31 +37,6 @@
 #undef SYS_ify
 #define SYS_ify(syscall_name)	__NR_##syscall_name
 
-/* Define some aliases to make automatic syscall generation work
-   properly.  The SYS_* variants are for the benefit of the files in
-   sysdeps/unix.  */
-#define __NR_getpid	__NR_getxpid
-#define __NR_getuid	__NR_getxuid
-#define __NR_getgid	__NR_getxgid
-#define SYS_getpid	__NR_getxpid
-#define SYS_getuid	__NR_getxuid
-#define SYS_getgid	__NR_getxgid
-
-/*
- * Some syscalls no Linux program should know about:
- */
-#define __NR_osf_sigprocmask	 48
-#ifndef __NR_osf_shmat
-# define __NR_osf_shmat		209
-#endif
-#define __NR_osf_getsysinfo	256
-#define __NR_osf_setsysinfo	257
-
-/* Help old kernel headers where particular syscalls are not available.  */
-#ifndef __NR_semtimedop
-# define __NR_semtimedop	423
-#endif
-
 /* This is a kludge to make syscalls.list find these under the names
    pread and pwrite, since some kernel headers define those names
    and some define the *64 names for the same system calls.  */
diff --git a/sysdeps/unix/sysv/linux/arm/dl-machine.h b/sysdeps/unix/sysv/linux/arm/dl-machine.h
index 5860258..ab5b4a9 100644
--- a/sysdeps/unix/sysv/linux/arm/dl-machine.h
+++ b/sysdeps/unix/sysv/linux/arm/dl-machine.h
@@ -20,7 +20,7 @@
 
 /* This definition is Linux-specific.  */
 #define CLEAR_CACHE(BEG,END)                                            \
-  INTERNAL_SYSCALL_ARM (cacheflush, , 3, (BEG), (END), 0)
+  INTERNAL_SYSCALL (cacheflush, , 3, (BEG), (END), 0)
 
 #endif
 
diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h
index e9e022e..5b2a9df 100644
--- a/sysdeps/unix/sysv/linux/arm/sysdep.h
+++ b/sysdeps/unix/sysv/linux/arm/sysdep.h
@@ -377,10 +377,6 @@ __local_syscall_error:						\
 #define INTERNAL_SYSCALL(name, err, nr, args...)		\
 	INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args)
 
-#undef INTERNAL_SYSCALL_ARM
-#define INTERNAL_SYSCALL_ARM(name, err, nr, args...)		\
-	INTERNAL_SYSCALL_RAW(__ARM_NR_##name, err, nr, args)
-
 #undef INTERNAL_SYSCALL_ERROR_P
 #define INTERNAL_SYSCALL_ERROR_P(val, err) \
   ((unsigned int) (val) >= 0xfffff001u)
diff --git a/sysdeps/unix/sysv/linux/arm/tls.h b/sysdeps/unix/sysv/linux/arm/tls.h
index 7dd9b64..54d6012 100644
--- a/sysdeps/unix/sysv/linux/arm/tls.h
+++ b/sysdeps/unix/sysv/linux/arm/tls.h
@@ -33,7 +33,7 @@
 # define TLS_INIT_TP(tcbp) \
   ({ INTERNAL_SYSCALL_DECL (err);					\
      long int result_var;						\
-     result_var = INTERNAL_SYSCALL_ARM (set_tls, err, 1, (tcbp));	\
+     result_var = INTERNAL_SYSCALL (set_tls, err, 1, (tcbp));		\
      INTERNAL_SYSCALL_ERROR_P (result_var, err)				\
        ? "unknown error" : NULL; })
 
diff --git a/sysdeps/unix/sysv/linux/hppa/clone.S b/sysdeps/unix/sysv/linux/hppa/clone.S
index 372d29a..536071b 100644
--- a/sysdeps/unix/sysv/linux/hppa/clone.S
+++ b/sysdeps/unix/sysv/linux/hppa/clone.S
@@ -20,7 +20,6 @@
 /* clone() is even more special than fork() as it mucks with stacks
    and invokes a function in the right context after its all over.  */
 
-#include <asm/unistd.h>
 #include <sysdep.h>
 #define _ERRNO_H	1
 #include <bits/errno.h>
diff --git a/sysdeps/unix/sysv/linux/ia64/brk.S b/sysdeps/unix/sysv/linux/ia64/brk.S
index 884ca2b..8e5f22e 100644
--- a/sysdeps/unix/sysv/linux/ia64/brk.S
+++ b/sysdeps/unix/sysv/linux/ia64/brk.S
@@ -20,7 +20,6 @@
 
 #include <sysdep.h>
 
-#include <asm/unistd.h>
 #include <asm/errno.h>
 
 	.global __curbrk
diff --git a/sysdeps/unix/sysv/linux/ia64/clone2.S b/sysdeps/unix/sysv/linux/ia64/clone2.S
index 01e9eb9..b43770d 100644
--- a/sysdeps/unix/sysv/linux/ia64/clone2.S
+++ b/sysdeps/unix/sysv/linux/ia64/clone2.S
@@ -58,7 +58,7 @@ ENTRY(__clone2)
 	 */
 	mov r15=SYS_ify (clone2)
 	.save rp, r0
-	break __BREAK_SYSCALL
+	break __IA64_BREAK_SYSCALL
 	.body
 	cmp.eq p6,p0=-1,r10
 	cmp.eq CHILD,PARENT=0,r8 /* Are we the child?   */
@@ -78,7 +78,7 @@ ENTRY(__clone2)
 	mov gp=loc0
 	mov r15=SYS_ify (exit)
 	.save rp, r0
-	break __BREAK_SYSCALL
+	break __IA64_BREAK_SYSCALL
 	ret			/* Not reached.		*/
 PSEUDO_END(__clone2)
 
diff --git a/sysdeps/unix/sysv/linux/ia64/syscall.S b/sysdeps/unix/sysv/linux/ia64/syscall.S
index b8209d2..51430aa 100644
--- a/sysdeps/unix/sysv/linux/ia64/syscall.S
+++ b/sysdeps/unix/sysv/linux/ia64/syscall.S
@@ -25,7 +25,7 @@ ENTRY(syscall)
 	   in {out0...out5} like the kernel syscall handler expects.  */
 	alloc r2=ar.pfs,1,0,8,0
 	mov r15=r32		/* syscall number */
-	break __BREAK_SYSCALL
+	break __IA64_BREAK_SYSCALL
 	;;
 	cmp.ne p6,p0=-1,r10	/* r10 = -1 on error */
 (p6)	ret
diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.S b/sysdeps/unix/sysv/linux/ia64/sysdep.S
index 0371c41..d3836e6 100644
--- a/sysdeps/unix/sysv/linux/ia64/sysdep.S
+++ b/sysdeps/unix/sysv/linux/ia64/sysdep.S
@@ -51,7 +51,7 @@ END(__syscall_error)
 
 ENTRY(__ia64_syscall)
 	mov r15=r37		/* syscall number */
-	break __BREAK_SYSCALL
+	break __IA64_BREAK_SYSCALL
 	cmp.eq p6,p0=-1,r10	/* r10 = -1 on error */
 (p6)	br.cond.spnt.few __syscall_error
 	ret
diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.h b/sysdeps/unix/sysv/linux/ia64/sysdep.h
index 4abe152..e55b2eb 100644
--- a/sysdeps/unix/sysv/linux/ia64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/ia64/sysdep.h
@@ -25,6 +25,7 @@
 #include <sysdeps/ia64/sysdep.h>
 #include <dl-sysdep.h>
 #include <tls.h>
+#include <asm/break.h>
 
 /* In order to get __set_errno() definition in INLINE_SYSCALL.  */
 #ifndef __ASSEMBLER__
@@ -115,7 +116,7 @@
 
 #define DO_CALL_VIA_BREAK(num)			\
 	mov r15=num;				\
-	break __BREAK_SYSCALL
+	break __IA64_BREAK_SYSCALL
 
 #ifdef IA64_USE_NEW_STUB
 # ifdef SHARED
@@ -229,7 +230,7 @@
     register long _r15 asm ("r15") = name;			\
     long _retval;						\
     LOAD_REGS_##nr						\
-    __asm __volatile (BREAK_INSN (__BREAK_SYSCALL)		\
+    __asm __volatile (BREAK_INSN (__IA64_BREAK_SYSCALL)		\
 		      : "=r" (_r8), "=r" (_r10), "=r" (_r15)	\
 			ASM_OUTARGS_##nr			\
 		      : "2" (_r15) ASM_ARGS_##nr		\
diff --git a/sysdeps/unix/sysv/linux/include/sys/syscall.h b/sysdeps/unix/sysv/linux/include/sys/syscall.h
new file mode 100644
index 0000000..fe87e8e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/include/sys/syscall.h
@@ -0,0 +1,29 @@
+/* Wrapper header for <sys/syscall.h>.  Linux version.
+   Copyright (C) 2019 Free Software Foundation, Inc.
+
+   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/>.  */
+
+#ifndef _SYSCALL_H
+
+#ifdef _ISOMAC
+# include <sysdeps/unix/sysv/linux/sys/syscall.h>
+#else /* !_ISOMAC */
+/* Use the built-in system call list, not <asm/unistd.h>, which may
+   not list all the system call numbers we need.  */
+# define _SYSCALL_H
+# include <arch-syscall.h>
+#endif /* !_ISOMAC */
+
+#endif /* _SYSCALL_H */
diff --git a/sysdeps/unix/sysv/linux/mips/vfork.S b/sysdeps/unix/sysv/linux/mips/vfork.S
index ec0f6bd..03b6cc2 100644
--- a/sysdeps/unix/sysv/linux/mips/vfork.S
+++ b/sysdeps/unix/sysv/linux/mips/vfork.S
@@ -19,7 +19,6 @@
 
 #include <sys/asm.h>
 #include <sysdep.h>
-#include <asm/unistd.h>
 #include <sgidefs.h>
 #include <tls.h>
 
diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep.h b/sysdeps/unix/sysv/linux/nios2/sysdep.h
index 58c119d..dda6405 100644
--- a/sysdeps/unix/sysv/linux/nios2/sysdep.h
+++ b/sysdeps/unix/sysv/linux/nios2/sysdep.h
@@ -19,7 +19,6 @@
 #ifndef _LINUX_NIOS2_SYSDEP_H
 #define _LINUX_NIOS2_SYSDEP_H 1
 
-#include <asm/unistd.h>
 #include <sysdeps/unix/sysdep.h>
 #include <sysdeps/nios2/sysdep.h>
 #include <sysdeps/unix/sysv/linux/generic/sysdep.h>
diff --git a/sysdeps/unix/sysv/linux/riscv/flush-icache.c b/sysdeps/unix/sysv/linux/riscv/flush-icache.c
index c5bd60d..39dd293 100644
--- a/sysdeps/unix/sysv/linux/riscv/flush-icache.c
+++ b/sysdeps/unix/sysv/linux/riscv/flush-icache.c
@@ -26,6 +26,7 @@
 #else
 # include <asm/unistd.h>
 #endif
+#include <sys/syscall.h>
 
 typedef int (*func_type) (void *, void *, unsigned long int);
 
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
index 6f6518e..ee82d82 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
@@ -20,7 +20,6 @@
    and invokes a function in the right context after its all over.  */
 
 #include <asm/errno.h>
-#include <asm/unistd.h>
 #include <tcb-offsets.h>
 #include <sysdep.h>
 
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
index f6122e5..603c0a0 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
@@ -20,7 +20,6 @@
    and invokes a function in the right context after its all over.  */
 
 #include <asm/errno.h>
-#include <asm/unistd.h>
 #include <tcb-offsets.h>
 #include <sysdep.h>
 
diff --git a/sysdeps/unix/sysv/linux/sys/syscall.h b/sysdeps/unix/sysv/linux/sys/syscall.h
index 223fba5..71e4250 100644
--- a/sysdeps/unix/sysv/linux/sys/syscall.h
+++ b/sysdeps/unix/sysv/linux/sys/syscall.h
@@ -23,12 +23,9 @@
    from the kernel sources.  */
 #include <asm/unistd.h>
 
-#ifndef _LIBC
-/* The Linux kernel header file defines macros `__NR_<name>', but some
-   programs expect the traditional form `SYS_<name>'.  So in building libc
-   we scan the kernel's list and produce <bits/syscall.h> with macros for
-   all the `SYS_' names.  */
-# include <bits/syscall.h>
-#endif
+/* The Linux kernel header file defines macros __NR_*, but some
+   programs expect the traditional form SYS_*.  <bits/syscall.h>
+   defines SYS_* macros for __NR_* macros of known names.  */
+#include <bits/syscall.h>
 
 #endif


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-12-31 10:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-31 10:50 [glibc/fw/builtin-syscalls-4] Linux: Use system call tables during build Florian Weimer
  -- strict thread matches above, loose matches on Subject: below --
2019-12-17  7:31 Florian Weimer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).