1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +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
@ -167,8 +182,8 @@ $syscall_error: \
/* If TLS is in use, we have a conflict between the PAL_rduniq primitive, /* 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 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 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 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 we'll get a reload abort, since R0 is live at the same time it is
needed for the PAL_rduniq. needed for the PAL_rduniq.
Solve this by using the "v" constraint instead of an asm for the syscall Solve this by using the "v" constraint instead of an asm for the syscall

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
@ -168,7 +180,7 @@
called the stack is not aligned since the return address has just called the stack is not aligned since the return address has just
been pushed. been pushed.
Syscalls of more than 6 arguments are not supported. */ Syscalls of more than 6 arguments are not supported. */
#undef DO_CALL #undef DO_CALL