From 9eb88290df0c6522a7a52fa44ed821a6fba60a5a Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 23 Mar 2003 19:44:31 +0000 Subject: Update. 2003-03-23 Ulrich Drepper * 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. --- sysdeps/unix/sysv/linux/arm/sysdep.h | 16 ++++++++++++++++ sysdeps/unix/sysv/linux/cris/sysdep.h | 14 +++++++++++++- sysdeps/unix/sysv/linux/hppa/sysdep.h | 15 ++++++++++++++- sysdeps/unix/sysv/linux/i386/sysdep.h | 12 ++++++++++++ sysdeps/unix/sysv/linux/ia64/sysdep.h | 9 +++++++++ sysdeps/unix/sysv/linux/m68k/sysdep.h | 10 ++++++++++ sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h | 13 +++++++++++++ sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h | 16 +++++++++++++++- sysdeps/unix/sysv/linux/sh/sysdep.h | 12 ++++++++++++ sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h | 7 +++++++ sysdeps/unix/sysv/linux/syscalls.list | 8 ++++---- sysdeps/unix/sysv/linux/x86_64/sysdep.h | 14 +++++++++++++- 12 files changed, 138 insertions(+), 8 deletions(-) (limited to 'sysdeps/unix/sysv') 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, , August 1999. Linux/PA-RISC changes by Philipp Rumpf, , 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 -- cgit 1.4.1