about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-03-23 19:44:31 +0000
committerUlrich Drepper <drepper@redhat.com>2003-03-23 19:44:31 +0000
commit9eb88290df0c6522a7a52fa44ed821a6fba60a5a (patch)
tree4c663f4b2c765faefbece43109e24415b0b014fc
parentf9ad605a05633387c0bb4048158f047a3c2df014 (diff)
downloadglibc-9eb88290df0c6522a7a52fa44ed821a6fba60a5a.tar.gz
glibc-9eb88290df0c6522a7a52fa44ed821a6fba60a5a.tar.xz
glibc-9eb88290df0c6522a7a52fa44ed821a6fba60a5a.zip
Update.
2003-03-23  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/make-syscalls.sh: Recognize 'E' in first position of
	the parameter description to denote no error checking.  Generate
	appropriate pseudo asm code.
	* sysdeps/unix/syscalls.list: Mark getgid, getpid, getuid with 'E'.
	* sysdeps/unix/sysv/linux/syscalls.list: Mark getegid, geteuid,
	getpgrp, and getppid with 'E'.
	* sysdeps/powerpc/powerpc32/sysdep.h: Define PSEUDO_NOERRNO,
	PSEUDO_END_NOERRNO, and ret_NOERRNO.
	* sysdeps/powerpc/powerpc64/sysdep.h: Likewise.
	* sysdeps/unix/sysdep.h: Likewise.
	* sysdeps/unix/alpha/sysdep.h: Likewise.
	* sysdeps/unix/sparc/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/arm/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/cris/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/hppa/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/i386/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/ia64/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
-rw-r--r--ChangeLog26
-rw-r--r--sysdeps/powerpc/powerpc32/sysdep.h13
-rw-r--r--sysdeps/powerpc/powerpc64/sysdep.h14
-rw-r--r--sysdeps/unix/alpha/sysdep.h19
-rw-r--r--sysdeps/unix/sparc/sysdep.h9
-rw-r--r--sysdeps/unix/syscalls.list6
-rw-r--r--sysdeps/unix/sysdep.h5
-rw-r--r--sysdeps/unix/sysv/linux/arm/sysdep.h16
-rw-r--r--sysdeps/unix/sysv/linux/cris/sysdep.h14
-rw-r--r--sysdeps/unix/sysv/linux/hppa/sysdep.h15
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep.h12
-rw-r--r--sysdeps/unix/sysv/linux/ia64/sysdep.h9
-rw-r--r--sysdeps/unix/sysv/linux/m68k/sysdep.h10
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h13
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h16
-rw-r--r--sysdeps/unix/sysv/linux/sh/sysdep.h12
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h7
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list8
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/sysdep.h14
19 files changed, 223 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index c01d067669..0bfd4c63d7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,29 @@
+2003-03-23  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/unix/make-syscalls.sh: Recognize 'E' in first position of
+	the parameter description to denote no error checking.  Generate
+	appropriate pseudo asm code.
+	* sysdeps/unix/syscalls.list: Mark getgid, getpid, getuid with 'E'.
+	* sysdeps/unix/sysv/linux/syscalls.list: Mark getegid, geteuid,
+	getpgrp, and getppid with 'E'.
+	* sysdeps/powerpc/powerpc32/sysdep.h: Define PSEUDO_NOERRNO,
+	PSEUDO_END_NOERRNO, and ret_NOERRNO.
+	* sysdeps/powerpc/powerpc64/sysdep.h: Likewise.
+	* sysdeps/unix/sysdep.h: Likewise.
+	* sysdeps/unix/alpha/sysdep.h: Likewise.
+	* sysdeps/unix/sparc/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/arm/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/cris/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/hppa/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/i386/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/ia64/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
+
 2003-03-23  Roland McGrath  <roland@redhat.com>
 
 	* Makeconfig (+includes): Don't use $(last-includes).
diff --git a/sysdeps/powerpc/powerpc32/sysdep.h b/sysdeps/powerpc/powerpc32/sysdep.h
index bc201a80bd..338c69ae68 100644
--- a/sysdeps/powerpc/powerpc32/sysdep.h
+++ b/sysdeps/powerpc/powerpc32/sysdep.h
@@ -131,6 +131,19 @@
 #define	PSEUDO_END(name)						      \
   END (name)
 
+#define PSEUDO_NOERRNO(name, syscall_name, args)			      \
+  .section ".text";							      \
+  ENTRY (name)								      \
+    DO_CALL (SYS_ify (syscall_name));
+
+#define PSEUDO_RET_NOERRNO						      \
+    blr
+#define ret_NOERRNO PSEUDO_RET_NOERRNO
+
+#undef	PSEUDO_END_NOERRNO
+#define	PSEUDO_END_NOERRNO(name)					      \
+  END (name)
+
 /* Local labels stripped out by the linker.  */
 #undef L
 #define L(x) .L##x
diff --git a/sysdeps/powerpc/powerpc64/sysdep.h b/sysdeps/powerpc/powerpc64/sysdep.h
index 9b895df3f0..34c9caa5d7 100644
--- a/sysdeps/powerpc/powerpc64/sysdep.h
+++ b/sysdeps/powerpc/powerpc64/sysdep.h
@@ -225,6 +225,20 @@ LT_LABELSUFFIX(name,_name_end): ; \
 #define	PSEUDO_END(name) \
   END (name)
 
+#define PSEUDO_NOERRNO(name, syscall_name, args) \
+  .section ".text";	\
+  ENTRY (name) \
+  DO_CALL (SYS_ify (syscall_name));
+
+#define PSEUDO_RET_NOERRNO \
+    blr
+
+#define ret_NOERRNO PSEUDO_RET_NOERRNO
+
+#undef	PSEUDO_END_NOERRNO
+#define	PSEUDO_END_NOERRO(name) \
+  END (name)
+
 /* Label in text section.  */
 /* ppc64 function descriptors which requires . notation */
 #define C_TEXT(name) .##name
diff --git a/sysdeps/unix/alpha/sysdep.h b/sysdeps/unix/alpha/sysdep.h
index cb04cec2af..6e55061515 100644
--- a/sysdeps/unix/alpha/sysdep.h
+++ b/sysdeps/unix/alpha/sysdep.h
@@ -119,6 +119,21 @@ $syscall_error:					\
 	END(sym)
 #endif
 
+#define PSEUDO_NOERRNO(name, syscall_name, args)	\
+	.globl name;					\
+	.align 4;					\
+	.ent name,0;					\
+__LABEL(name)						\
+	PSEUDO_PROLOGUE;				\
+	PSEUDO_PREPARE_ARGS				\
+	lda	v0, SYS_ify(syscall_name);		\
+	call_pal PAL_callsys;
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(sym)  END(sym)
+
+#define ret_NOERRNO ret
+
 #define r0	v0
 #define r1	a4
 
@@ -167,8 +182,8 @@ $syscall_error:					\
 /* If TLS is in use, we have a conflict between the PAL_rduniq primitive,
    as modeled within GCC, and explicit use of the R0 register.  If we use
    the register via the asm, the scheduler may place the PAL_rduniq insn
-   before we've copied the data from R0 into _sc_ret.  If this happens 
-   we'll get a reload abort, since R0 is live at the same time it is 
+   before we've copied the data from R0 into _sc_ret.  If this happens
+   we'll get a reload abort, since R0 is live at the same time it is
    needed for the PAL_rduniq.
 
    Solve this by using the "v" constraint instead of an asm for the syscall
diff --git a/sysdeps/unix/sparc/sysdep.h b/sysdeps/unix/sparc/sysdep.h
index e103ba3b30..3f6a92a904 100644
--- a/sysdeps/unix/sparc/sysdep.h
+++ b/sysdeps/unix/sparc/sysdep.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1994, 1995, 1997, 2003 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
@@ -52,7 +52,14 @@
   jmp %g1 + %lo(syscall_error);	nop;		\
 1:
 
+#define	PSEUDO_NOERRNO(name, syscall_name, args) \
+  .global syscall_error;			\
+  ENTRY (name)					\
+  mov SYS_ify(syscall_name), %g1;		\
+  ta 0
+
 #define	ret		retl; nop
+#define	ret_NOERRNO	retl; nop
 #define	r0		%o0
 #define	r1		%o1
 #define	MOVE(x,y)	mov x, y
diff --git a/sysdeps/unix/syscalls.list b/sysdeps/unix/syscalls.list
index bbd068a33e..db83cee376 100644
--- a/sysdeps/unix/syscalls.list
+++ b/sysdeps/unix/syscalls.list
@@ -14,13 +14,13 @@ fcntl		-	fcntl		Ci:iiF	__libc_fcntl	__fcntl __fcntl_internal fcntl
 fstatfs		-	fstatfs		i:ip	__fstatfs	fstatfs
 fsync		-	fsync		Ci:i	__libc_fsync	fsync
 getdomain	-	getdomainname	i:si	getdomainname
-getgid		-	getgid		i:	__getgid	getgid
+getgid		-	getgid		Ei:	__getgid	getgid
 getgroups	-	getgroups	i:ip	__getgroups	getgroups
 getitimer	-	getitimer	i:ip	__getitimer	getitimer
-getpid		-	getpid		i:	__getpid	getpid
+getpid		-	getpid		Ei:	__getpid	getpid
 getpriority	-	getpriority	i:ii	getpriority
 getrlimit	-	getrlimit	i:ip	__getrlimit	getrlimit
-getuid		-	getuid		i:	__getuid	getuid
+getuid		-	getuid		Ei:	__getuid	getuid
 ioctl		-	ioctl		i:iiI	__ioctl		ioctl
 kill		-	kill		i:ii	__kill		kill
 link		-	link		i:ss	__link		link
diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h
index 616a9b5bd8..c19e98a4c0 100644
--- a/sysdeps/unix/sysdep.h
+++ b/sysdeps/unix/sysdep.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 93, 96, 98 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 96, 98, 2003 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
@@ -47,6 +47,9 @@
 #ifndef PSEUDO_END
 #define PSEUDO_END(sym)
 #endif
+#ifndef PSEUDO_END_NOENTRY
+#define PSEUDO_END_NOENTRY(sym)
+#endif
 
 /* Wrappers around system calls should normally inline the system call code.
    But sometimes it is not possible or implemented and we use this code.  */
diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h
index 785d3cf0d8..3e3c874e04 100644
--- a/sysdeps/unix/sysv/linux/arm/sysdep.h
+++ b/sysdeps/unix/sysv/linux/arm/sysdep.h
@@ -64,6 +64,22 @@
   SYSCALL_ERROR_HANDLER							      \
   END (name)
 
+#undef	PSEUDO_NOERRNO
+#define	PSEUDO_NOERRNO(name, syscall_name, args)			      \
+  .text;								      \
+  ENTRY (name);								      \
+    DO_CALL (syscall_name, args);
+
+#define PSEUDO_RET_NOERRNO						      \
+    RETINSTR(movcc, pc, lr);						      \
+    nop
+#undef ret_NOERRNO
+#define ret_NOERRNO PSEUDO_RET_NOERRNO
+
+#undef	PSEUDO_END_NOERRNO
+#define	PSEUDO_END_NOERRNO(name)					      \
+  END (name)
+
 #if NOT_IN_libc
 # define SYSCALL_ERROR __local_syscall_error
 # define SYSCALL_ERROR_HANDLER					\
diff --git a/sysdeps/unix/sysv/linux/cris/sysdep.h b/sysdeps/unix/sysv/linux/cris/sysdep.h
index 4446b26f50..f22a3d24e8 100644
--- a/sysdeps/unix/sysv/linux/cris/sysdep.h
+++ b/sysdeps/unix/sysv/linux/cris/sysdep.h
@@ -1,5 +1,5 @@
 /* Assembler macros for CRIS.
-   Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001, 2003 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
@@ -106,6 +106,18 @@
   PLTJUMP (syscall_error)				@ \
   END (name)
 
+#define	PSEUDO_NOERRNO(name, syscall_name, args) \
+  ENTRY	(name)						@ \
+  DOARGS_##args						@ \
+  movu.w SYS_ify (syscall_name),$r9			@ \
+  break	13						@ \
+  UNDOARGS_return_##args
+
+#define ret_NOERRNO
+
+#define	PSEUDO_END_NOERRNO(name) \
+  END (name)
+
 #define DOARGS_0
 #define DOARGS_1
 #define DOARGS_2
diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.h b/sysdeps/unix/sysv/linux/hppa/sysdep.h
index 4f08cc6e39..771c55c400 100644
--- a/sysdeps/unix/sysv/linux/hppa/sysdep.h
+++ b/sysdeps/unix/sysv/linux/hppa/sysdep.h
@@ -1,5 +1,5 @@
 /* Assembler macros for PA-RISC.
-   Copyright (C) 1999,2001,02 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999.
    Linux/PA-RISC changes by Philipp Rumpf, <prumpf@tux.org>, March 2000.
@@ -84,6 +84,10 @@
 	bv 0(2)					ASM_LINE_SEP	\
 	nop
 
+#define ret_NOERRNO \
+	bv 0(2)					ASM_LINE_SEP	\
+	nop
+
 #undef	END
 #define END(name)						\
 1:	.size	C_SYMBOL_NAME(name),1b-C_SYMBOL_NAME(name)
@@ -115,6 +119,15 @@
 #define	PSEUDO_END(name)						      \
   END (name)
 
+#define	PSEUDO_NOERRNO(name, syscall_name, args)			      \
+  ENTRY (name)								      \
+  DO_CALL(syscall_name, args)					ASM_LINE_SEP  \
+  nop
+
+#undef	PSEUDO_END_NOERRNO
+#define	PSEUDO_END_NOERRNO(name)					      \
+  END (name)
+
 #define JUMPTARGET(name)	name
 #define SYSCALL_PIC_SETUP	/* Nothing.  */
 
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h
index 02a78d3514..2e660c39fc 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep.h
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.h
@@ -78,6 +78,18 @@
   SYSCALL_ERROR_HANDLER							      \
   END (name)
 
+#undef	PSEUDO_NOERRNO
+#define	PSEUDO_NOERRNO(name, syscall_name, args)			      \
+  .text;								      \
+  ENTRY (name)								      \
+    DO_CALL (syscall_name, args)
+
+#undef	PSEUDO_END_NOERRNO
+#define	PSEUDO_END_NOERRNO(name)					      \
+  END (name)
+
+#define ret_NOERRNO ret
+
 #ifndef PIC
 # define SYSCALL_ERROR_HANDLER	/* Nothing here; code in sysdep.S is used.  */
 #else
diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.h b/sysdeps/unix/sysv/linux/ia64/sysdep.h
index 556e266de5..3065782c8e 100644
--- a/sysdeps/unix/sysv/linux/ia64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/ia64/sysdep.h
@@ -96,12 +96,21 @@
 #undef PSEUDO_END
 #define PSEUDO_END(name)	.endp C_SYMBOL_NAME(name);
 
+#undef PSEUDO_NOERRNO
+#define	PSEUDO_NOERRNO(name, syscall_name, args)	\
+  ENTRY(name)						\
+    DO_CALL (SYS_ify(syscall_name));
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)	.endp C_SYMBOL_NAME(name);
+
 #undef END
 #define END(name)						\
 	.size	C_SYMBOL_NAME(name), . - C_SYMBOL_NAME(name) ;	\
 	.endp	C_SYMBOL_NAME(name)
 
 #define ret			br.ret.sptk.few b0
+#define ret_NOERRNO		br.ret.sptk.few b0
 
 #else /* not __ASSEMBLER__ */
 
diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.h b/sysdeps/unix/sysv/linux/m68k/sysdep.h
index 125c584eb4..23e4202e8b 100644
--- a/sysdeps/unix/sysv/linux/m68k/sysdep.h
+++ b/sysdeps/unix/sysv/linux/m68k/sysdep.h
@@ -68,6 +68,16 @@
   SYSCALL_ERROR_HANDLER;						      \
   END (name)
 
+#undef PSEUDO_NOERRNO
+#define	PSEUDO_NOERRNO(name, syscall_name, args)			      \
+  .text;								      \
+  ENTRY (name)								      \
+    DO_CALL (syscall_name, args)
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)					      \
+  END (name)
+
 #ifdef PIC
 # if RTLD_PRIVATE_ERRNO
 #  define SYSCALL_ERROR_HANDLER						      \
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
index af8515b195..8a98fbff8f 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
@@ -59,6 +59,16 @@
   SYSCALL_ERROR_HANDLER;						      \
   END (name)
 
+#undef PSEUDO
+#define	PSEUDO_NOERRNO(name, syscall_name, args)			      \
+  .text;                                                                      \
+  ENTRY (name)							              \
+    DO_CALL (syscall_name, args)
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)					      \
+  END (name)
+
 #ifndef PIC
 # define SYSCALL_ERROR_LABEL 0f
 # define SYSCALL_ERROR_HANDLER \
@@ -143,6 +153,9 @@
 #define ret                                                                   \
     br      14
 
+#define ret_NOERRNO							      \
+    br      14
+
 #endif /* __ASSEMBLER__ */
 
 #undef INLINE_SYSCALL
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
index f5a074ff6f..41ec395a32 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
@@ -1,5 +1,5 @@
 /* Assembler macros for 64 bit S/390.
-   Copyright (C) 2001,02 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
@@ -72,6 +72,17 @@
   SYSCALL_ERROR_HANDLER;						      \
   END (name)
 
+#undef PSEUDO_NOERRNO
+#define	PSEUDO_NOERRNO(name, syscall_name, args)			      \
+  .text;								      \
+  ENTRY (name)								      \
+    DO_CALL (syscall_name, args)
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)					      \
+  SYSCALL_ERROR_HANDLER;						      \
+  END (name)
+
 #ifndef PIC
 # define SYSCALL_ERROR_LABEL syscall_error
 # define SYSCALL_ERROR_HANDLER
@@ -144,6 +155,9 @@
 #define ret								      \
     br	    14
 
+#define ret_NOERRNO							      \
+    br	    14
+
 #endif /* __ASSEMBLER__ */
 
 #undef INLINE_SYSCALL
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.h b/sysdeps/unix/sysv/linux/sh/sysdep.h
index ea1cffbd86..a2542fbb09 100644
--- a/sysdeps/unix/sysv/linux/sh/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sh/sysdep.h
@@ -65,6 +65,18 @@
 #define	PSEUDO_END(name) \
   END (name)
 
+#undef	PSEUDO_NOERRNO
+#define	PSEUDO_NOERRNO(name, syscall_name, args) \
+ .text; \
+ ENTRY (name); \
+    DO_CALL (syscall_name, args)
+
+#undef	PSEUDO_END_NOERRNO
+#define	PSEUDO_END_NOERRNO(name) \
+  END (name)
+
+#define ret_NOERRNO ret
+
 #ifndef PIC
 # define SYSCALL_ERROR_HANDLER	\
 	mov.l 0f,r1; \
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
index 7bf63b9c54..bc54b107c4 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
@@ -35,6 +35,7 @@
 
 /* Linux/SPARC uses a different trap number */
 #undef PSEUDO
+#undef PSEUDO_NOERRNO
 #undef ENTRY
 #undef END
 #undef LOC
@@ -108,6 +109,12 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler)			\
 	 nop;							\
 	SYSCALL_ERROR_HANDLER
 
+#define PSEUDO_NOERRNO(name, syscall_name, args)		\
+	.text;							\
+	ENTRY(name);						\
+	LOADSYSCALL(syscall_name);				\
+	ta 0x10
+
 #else  /* __ASSEMBLER__ */
 
 #define __SYSCALL_STRING						\
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index c98297408a..f499db7da6 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -14,12 +14,12 @@ fdatasync	-	fdatasync	i:i	fdatasync
 flock		-	flock		i:ii	__flock		flock
 fork		-	fork		i:	__libc_fork	__fork fork
 get_kernel_syms	EXTRA	get_kernel_syms	i:p	get_kernel_syms
-getegid		-	getegid		i:	__getegid	getegid
-geteuid		-	geteuid		i:	__geteuid	geteuid
+getegid		-	getegid		Ei:	__getegid	getegid
+geteuid		-	geteuid		Ei:	__geteuid	geteuid
 getpgid		-	getpgid		i:i	__getpgid	getpgid
-getpgrp		-	getpgrp		i:	getpgrp
+getpgrp		-	getpgrp		Ei:	getpgrp
 getpmsg		-	getpmsg		i:ipppp	getpmsg
-getppid		-	getppid		i:	__getppid	getppid
+getppid		-	getppid		Ei:	__getppid	getppid
 getresuid	-	getresuid	i:ppp	getresuid
 getresgid	-	getresgid	i:ppp	getresgid
 getsid		-	getsid		i:i	getsid
diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
index c85c063f90..0edbe6624f 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
@@ -81,6 +81,18 @@
   SYSCALL_ERROR_HANDLER							      \
   END (name)
 
+#undef	PSEUDO_NOERRNO
+#define	PSEUDO_NOERRNO(name, syscall_name, args) \
+  .text;								      \
+  ENTRY (name)								      \
+    DO_CALL (syscall_name, args)
+
+#undef	PSEUDO_END_NOERRNO
+#define	PSEUDO_END_NOERRNO(name) \
+  END (name)
+
+#define ret_NOERRNO ret
+
 #ifndef PIC
 #define SYSCALL_ERROR_HANDLER	/* Nothing here; code in sysdep.S is used.  */
 #elif RTLD_PRIVATE_ERRNO
@@ -168,7 +180,7 @@
     called the stack is not aligned since the return address has just
     been pushed.
 
-     
+
     Syscalls of more than 6 arguments are not supported.  */
 
 #undef	DO_CALL