1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-01 10:06:57 +03:00
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.
This commit is contained in:
Ulrich Drepper
2003-03-23 19:44:31 +00:00
parent f9ad605a05
commit 9eb88290df
19 changed files with 223 additions and 15 deletions

View File

@ -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> 2003-03-23 Roland McGrath <roland@redhat.com>
* Makeconfig (+includes): Don't use $(last-includes). * Makeconfig (+includes): Don't use $(last-includes).

View File

@ -131,6 +131,19 @@
#define PSEUDO_END(name) \ #define PSEUDO_END(name) \
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. */ /* Local labels stripped out by the linker. */
#undef L #undef L
#define L(x) .L##x #define L(x) .L##x

View File

@ -225,6 +225,20 @@ LT_LABELSUFFIX(name,_name_end): ; \
#define PSEUDO_END(name) \ #define PSEUDO_END(name) \
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. */ /* Label in text section. */
/* ppc64 function descriptors which requires . notation */ /* ppc64 function descriptors which requires . notation */
#define C_TEXT(name) .##name #define C_TEXT(name) .##name

View File

@ -119,6 +119,21 @@ $syscall_error: \
END(sym) END(sym)
#endif #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 r0 v0
#define r1 a4 #define r1 a4

View File

@ -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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -52,7 +52,14 @@
jmp %g1 + %lo(syscall_error); nop; \ jmp %g1 + %lo(syscall_error); nop; \
1: 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 retl; nop
#define ret_NOERRNO retl; nop
#define r0 %o0 #define r0 %o0
#define r1 %o1 #define r1 %o1
#define MOVE(x,y) mov x, y #define MOVE(x,y) mov x, y

View File

@ -14,13 +14,13 @@ fcntl - fcntl Ci:iiF __libc_fcntl __fcntl __fcntl_internal fcntl
fstatfs - fstatfs i:ip __fstatfs fstatfs fstatfs - fstatfs i:ip __fstatfs fstatfs
fsync - fsync Ci:i __libc_fsync fsync fsync - fsync Ci:i __libc_fsync fsync
getdomain - getdomainname i:si getdomainname getdomain - getdomainname i:si getdomainname
getgid - getgid i: __getgid getgid getgid - getgid Ei: __getgid getgid
getgroups - getgroups i:ip __getgroups getgroups getgroups - getgroups i:ip __getgroups getgroups
getitimer - getitimer i:ip __getitimer getitimer getitimer - getitimer i:ip __getitimer getitimer
getpid - getpid i: __getpid getpid getpid - getpid Ei: __getpid getpid
getpriority - getpriority i:ii getpriority getpriority - getpriority i:ii getpriority
getrlimit - getrlimit i:ip __getrlimit getrlimit getrlimit - getrlimit i:ip __getrlimit getrlimit
getuid - getuid i: __getuid getuid getuid - getuid Ei: __getuid getuid
ioctl - ioctl i:iiI __ioctl ioctl ioctl - ioctl i:iiI __ioctl ioctl
kill - kill i:ii __kill kill kill - kill i:ii __kill kill
link - link i:ss __link link link - link i:ss __link link

View File

@ -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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -47,6 +47,9 @@
#ifndef PSEUDO_END #ifndef PSEUDO_END
#define PSEUDO_END(sym) #define PSEUDO_END(sym)
#endif #endif
#ifndef PSEUDO_END_NOENTRY
#define PSEUDO_END_NOENTRY(sym)
#endif
/* Wrappers around system calls should normally inline the system call code. /* Wrappers around system calls should normally inline the system call code.
But sometimes it is not possible or implemented and we use this code. */ But sometimes it is not possible or implemented and we use this code. */

View File

@ -64,6 +64,22 @@
SYSCALL_ERROR_HANDLER \ SYSCALL_ERROR_HANDLER \
END (name) 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 #if NOT_IN_libc
# define SYSCALL_ERROR __local_syscall_error # define SYSCALL_ERROR __local_syscall_error
# define SYSCALL_ERROR_HANDLER \ # define SYSCALL_ERROR_HANDLER \

View File

@ -1,5 +1,5 @@
/* Assembler macros for CRIS. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -106,6 +106,18 @@
PLTJUMP (syscall_error) @ \ PLTJUMP (syscall_error) @ \
END (name) 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_0
#define DOARGS_1 #define DOARGS_1
#define DOARGS_2 #define DOARGS_2

View File

@ -1,5 +1,5 @@
/* Assembler macros for PA-RISC. /* 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999. Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999.
Linux/PA-RISC changes by Philipp Rumpf, <prumpf@tux.org>, March 2000. Linux/PA-RISC changes by Philipp Rumpf, <prumpf@tux.org>, March 2000.
@ -84,6 +84,10 @@
bv 0(2) ASM_LINE_SEP \ bv 0(2) ASM_LINE_SEP \
nop nop
#define ret_NOERRNO \
bv 0(2) ASM_LINE_SEP \
nop
#undef END #undef END
#define END(name) \ #define END(name) \
1: .size C_SYMBOL_NAME(name),1b-C_SYMBOL_NAME(name) 1: .size C_SYMBOL_NAME(name),1b-C_SYMBOL_NAME(name)
@ -115,6 +119,15 @@
#define PSEUDO_END(name) \ #define PSEUDO_END(name) \
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 JUMPTARGET(name) name
#define SYSCALL_PIC_SETUP /* Nothing. */ #define SYSCALL_PIC_SETUP /* Nothing. */

View File

@ -78,6 +78,18 @@
SYSCALL_ERROR_HANDLER \ SYSCALL_ERROR_HANDLER \
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 #ifndef PIC
# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ # define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
#else #else

View File

@ -96,12 +96,21 @@
#undef PSEUDO_END #undef PSEUDO_END
#define PSEUDO_END(name) .endp C_SYMBOL_NAME(name); #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 #undef END
#define END(name) \ #define END(name) \
.size C_SYMBOL_NAME(name), . - C_SYMBOL_NAME(name) ; \ .size C_SYMBOL_NAME(name), . - C_SYMBOL_NAME(name) ; \
.endp C_SYMBOL_NAME(name) .endp C_SYMBOL_NAME(name)
#define ret br.ret.sptk.few b0 #define ret br.ret.sptk.few b0
#define ret_NOERRNO br.ret.sptk.few b0
#else /* not __ASSEMBLER__ */ #else /* not __ASSEMBLER__ */

View File

@ -68,6 +68,16 @@
SYSCALL_ERROR_HANDLER; \ SYSCALL_ERROR_HANDLER; \
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)
#ifdef PIC #ifdef PIC
# if RTLD_PRIVATE_ERRNO # if RTLD_PRIVATE_ERRNO
# define SYSCALL_ERROR_HANDLER \ # define SYSCALL_ERROR_HANDLER \

View File

@ -59,6 +59,16 @@
SYSCALL_ERROR_HANDLER; \ SYSCALL_ERROR_HANDLER; \
END (name) 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 #ifndef PIC
# define SYSCALL_ERROR_LABEL 0f # define SYSCALL_ERROR_LABEL 0f
# define SYSCALL_ERROR_HANDLER \ # define SYSCALL_ERROR_HANDLER \
@ -143,6 +153,9 @@
#define ret \ #define ret \
br 14 br 14
#define ret_NOERRNO \
br 14
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */
#undef INLINE_SYSCALL #undef INLINE_SYSCALL

View File

@ -1,5 +1,5 @@
/* Assembler macros for 64 bit S/390. /* 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). Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of the GNU C Library. This file is part of the GNU C Library.
@ -72,6 +72,17 @@
SYSCALL_ERROR_HANDLER; \ SYSCALL_ERROR_HANDLER; \
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) \
SYSCALL_ERROR_HANDLER; \
END (name)
#ifndef PIC #ifndef PIC
# define SYSCALL_ERROR_LABEL syscall_error # define SYSCALL_ERROR_LABEL syscall_error
# define SYSCALL_ERROR_HANDLER # define SYSCALL_ERROR_HANDLER
@ -144,6 +155,9 @@
#define ret \ #define ret \
br 14 br 14
#define ret_NOERRNO \
br 14
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */
#undef INLINE_SYSCALL #undef INLINE_SYSCALL

View File

@ -65,6 +65,18 @@
#define PSEUDO_END(name) \ #define PSEUDO_END(name) \
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 #ifndef PIC
# define SYSCALL_ERROR_HANDLER \ # define SYSCALL_ERROR_HANDLER \
mov.l 0f,r1; \ mov.l 0f,r1; \

View File

@ -35,6 +35,7 @@
/* Linux/SPARC uses a different trap number */ /* Linux/SPARC uses a different trap number */
#undef PSEUDO #undef PSEUDO
#undef PSEUDO_NOERRNO
#undef ENTRY #undef ENTRY
#undef END #undef END
#undef LOC #undef LOC
@ -108,6 +109,12 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler) \
nop; \ nop; \
SYSCALL_ERROR_HANDLER SYSCALL_ERROR_HANDLER
#define PSEUDO_NOERRNO(name, syscall_name, args) \
.text; \
ENTRY(name); \
LOADSYSCALL(syscall_name); \
ta 0x10
#else /* __ASSEMBLER__ */ #else /* __ASSEMBLER__ */
#define __SYSCALL_STRING \ #define __SYSCALL_STRING \

View File

@ -14,12 +14,12 @@ fdatasync - fdatasync i:i fdatasync
flock - flock i:ii __flock flock flock - flock i:ii __flock flock
fork - fork i: __libc_fork __fork fork fork - fork i: __libc_fork __fork fork
get_kernel_syms EXTRA get_kernel_syms i:p get_kernel_syms get_kernel_syms EXTRA get_kernel_syms i:p get_kernel_syms
getegid - getegid i: __getegid getegid getegid - getegid Ei: __getegid getegid
geteuid - geteuid i: __geteuid geteuid geteuid - geteuid Ei: __geteuid geteuid
getpgid - getpgid i:i __getpgid getpgid getpgid - getpgid i:i __getpgid getpgid
getpgrp - getpgrp i: getpgrp getpgrp - getpgrp Ei: getpgrp
getpmsg - getpmsg i:ipppp getpmsg getpmsg - getpmsg i:ipppp getpmsg
getppid - getppid i: __getppid getppid getppid - getppid Ei: __getppid getppid
getresuid - getresuid i:ppp getresuid getresuid - getresuid i:ppp getresuid
getresgid - getresgid i:ppp getresgid getresgid - getresgid i:ppp getresgid
getsid - getsid i:i getsid getsid - getsid i:i getsid

View File

@ -81,6 +81,18 @@
SYSCALL_ERROR_HANDLER \ SYSCALL_ERROR_HANDLER \
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 #ifndef PIC
#define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ #define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
#elif RTLD_PRIVATE_ERRNO #elif RTLD_PRIVATE_ERRNO