2003-08-30  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/generic/sysdep.h (cfi_window_save, CFI_WINDOW_SAVE): Define.
	* sysdeps/unix/sysv/linux/sparc/bits/setjmp.h: Allow file to be
	included multiple times.
	* sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Pass
	ptid, tls, ctid arguments to the kernel.
	* sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c (__getpagesize):
	Use INTERNAL_SYSCALL instead of __syscall_getpagesize.
	* sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
	(__libc_sigaction): Use INLINE_SYSCALL instead of
	__syscall_rt_sigaction.
	* sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
	(__syscall_getgroups, __syscall_getpagesize, __syscall__llseek,
	__syscall_setfsgid, __syscall_setfsuid, __syscall_setgid,
	__syscall_setgroups, __syscall_setregid, __syscall_setreuid,
	__syscall_ipc, __syscall_setuid, __syscall_rt_sigaction,
	__syscall_rt_sigpending, __syscall_rt_sigprocmask,
	__syscall_rt_sigqueueinfo, __syscall_rt_sigsuspend,
	__syscall_rt_sigtimedwait): Remove unneeded syscall stubs.
	* sysdeps/unix/sysv/linux/sparc/sparc32/Makefile (sysdep_routines):
	Remove rt_sigsuspend, rt_sigprocmask, rt_sigtimedwait,
	rt_sigqueueinfo, rt_sigaction and rt_sigpending.
	* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
	(__CLONE_SYSCALL_STRING): Define.
	* sysdeps/unix/sysv/linux/sparc/sparc32/socket.S (__socket): Add
	CFI directives.
	* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
	(__CLONE_SYSCALL_STRING): Define.
 	* sysdeps/unix/sysv/linux/sparc/sysdep.h (INLINE_CLONE_SYSCALL):
	Define.
	* sysdeps/unix/sysv/linux/sparc/system.c: New file.

	* sunrpc/rpc/clnt.h: Remove a few __THROW.
	* sunrpc/Makefile (CFLAGS-auth_unix.c): Add -fexceptions.
	(CFLAGS-key_call.c): Likewise.
	(CFLAGS-pmap_rmt.c): Likewise.
	* sunrpc/rpc/auth.h: Remove serveral __THROW.

	(CFLAGS-rcmd.c): Likewise.
This commit is contained in:
Ulrich Drepper 2003-08-31 17:24:25 +00:00
parent 443f79339b
commit b5bc52efe7
16 changed files with 153 additions and 52 deletions

View File

@ -1,8 +1,48 @@
2003-08-30 Jakub Jelinek <jakub@redhat.com>
* sysdeps/generic/sysdep.h (cfi_window_save, CFI_WINDOW_SAVE): Define.
* sysdeps/unix/sysv/linux/sparc/bits/setjmp.h: Allow file to be
included multiple times.
* sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Pass
ptid, tls, ctid arguments to the kernel.
* sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c (__getpagesize):
Use INTERNAL_SYSCALL instead of __syscall_getpagesize.
* sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
(__libc_sigaction): Use INLINE_SYSCALL instead of
__syscall_rt_sigaction.
* sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
(__syscall_getgroups, __syscall_getpagesize, __syscall__llseek,
__syscall_setfsgid, __syscall_setfsuid, __syscall_setgid,
__syscall_setgroups, __syscall_setregid, __syscall_setreuid,
__syscall_ipc, __syscall_setuid, __syscall_rt_sigaction,
__syscall_rt_sigpending, __syscall_rt_sigprocmask,
__syscall_rt_sigqueueinfo, __syscall_rt_sigsuspend,
__syscall_rt_sigtimedwait): Remove unneeded syscall stubs.
* sysdeps/unix/sysv/linux/sparc/sparc32/Makefile (sysdep_routines):
Remove rt_sigsuspend, rt_sigprocmask, rt_sigtimedwait,
rt_sigqueueinfo, rt_sigaction and rt_sigpending.
* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
(__CLONE_SYSCALL_STRING): Define.
* sysdeps/unix/sysv/linux/sparc/sparc32/socket.S (__socket): Add
CFI directives.
* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
(__CLONE_SYSCALL_STRING): Define.
* sysdeps/unix/sysv/linux/sparc/sysdep.h (INLINE_CLONE_SYSCALL):
Define.
* sysdeps/unix/sysv/linux/sparc/system.c: New file.
2003-08-30 Ulrich Drepper <drepper@redhat.com>
* sunrpc/rpc/clnt.h: Remove a few __THROW.
* sunrpc/Makefile (CFLAGS-auth_unix.c): Add -fexceptions.
(CFLAGS-key_call.c): Likewise.
(CFLAGS-pmap_rmt.c): Likewise.
* sunrpc/rpc/auth.h: Remove serveral __THROW.
* inet/Makefile (CFLAGS-gethstbyad_r.c): Add -fexceptions.
(CFLAGS-gethstbynm_r.c): Likewise.
(CFLAGS-gethstbynm2_r.c): Likewise.
(CFLAGS-rcmd.c): Likewise.
* resolv/Makefile (CFLAGS-res_hconf.c): Add -fexceptions.
* argp/Makefile (CFLAGS-argp-help.c): Add -fexceptions.

View File

@ -59,6 +59,7 @@ ifeq ($(have-thread-library),yes)
CFLAGS-gethstbyad_r.c = -DUSE_NSCD=1 -fexceptions
CFLAGS-gethstbynm_r.c = -DUSE_NSCD=1 -fexceptions
CFLAGS-gethstbynm2_r.c = -DUSE_NSCD=1 -fexceptions
CFLAGS-rcmd.c = -fexceptions
endif

View File

@ -118,6 +118,9 @@ CFLAGS-xspray.c = -Wno-unused
CFLAGS-xnfs_prot.c = -Wno-unused
CFLAGS-xrquota.c = -Wno-unused
CFLAGS-xkey_prot.c = -Wno-unused
CFLAGS-auth_unix.c = -fexceptions
CFLAGS-key_call.c = -fexceptions
CFLAGS-pmap_rmt.c = -fexceptions
ifeq (yes,$(have_doors))
CPPFLAGS-key_call.c += -DHAVE_DOORS=1

View File

@ -159,8 +159,8 @@ extern struct opaque_auth _null_auth;
* int *aup_gids;
*/
extern AUTH *authunix_create (char *__machname, __uid_t __uid, __gid_t __gid,
int __len, __gid_t *__aup_gids) __THROW;
extern AUTH *authunix_create_default (void) __THROW;
int __len, __gid_t *__aup_gids);
extern AUTH *authunix_create_default (void);
extern AUTH *authnone_create (void) __THROW;
extern AUTH *authdes_create (const char *__servername, u_int __window,
struct sockaddr *__syncaddr, des_block *__ckey)
@ -194,14 +194,14 @@ extern int netname2host (__const char *, char *, __const int) __THROW;
* These routines interface to the keyserv daemon
*
*/
extern int key_decryptsession (char *, des_block *) __THROW;
extern int key_decryptsession_pk (char *, netobj *, des_block *) __THROW;
extern int key_encryptsession (char *, des_block *) __THROW;
extern int key_encryptsession_pk (char *, netobj *, des_block *) __THROW;
extern int key_gendes (des_block *) __THROW;
extern int key_setsecret (char *) __THROW;
extern int key_secretkey_is_set (void) __THROW;
extern int key_get_conv (char *, des_block *) __THROW;
extern int key_decryptsession (char *, des_block *);
extern int key_decryptsession_pk (char *, netobj *, des_block *);
extern int key_encryptsession (char *, des_block *);
extern int key_encryptsession_pk (char *, netobj *, des_block *);
extern int key_gendes (des_block *);
extern int key_setsecret (char *);
extern int key_secretkey_is_set (void);
extern int key_get_conv (char *, des_block *);
/*
* XDR an opaque authentication struct.

View File

@ -368,18 +368,18 @@ extern int _rpc_dtablesize (void) __THROW;
/*
* Print why creation failed
*/
extern void clnt_pcreateerror (__const char *__msg) __THROW; /* stderr */
extern void clnt_pcreateerror (__const char *__msg); /* stderr */
extern char *clnt_spcreateerror(__const char *__msg) __THROW; /* string */
/*
* Like clnt_perror(), but is more verbose in its output
*/
extern void clnt_perrno (enum clnt_stat __num) __THROW; /* stderr */
extern void clnt_perrno (enum clnt_stat __num); /* stderr */
/*
* Print an English error message, given the client error code
*/
extern void clnt_perror (CLIENT *__clnt, __const char *__msg) __THROW;
extern void clnt_perror (CLIENT *__clnt, __const char *__msg);
/* stderr */
extern char *clnt_sperror (CLIENT *__clnt, __const char *__msg) __THROW;
/* string */

View File

@ -63,6 +63,7 @@
# define cfi_undefined(reg) .cfi_undefined reg
# define cfi_remember_state .cfi_remember_state
# define cfi_restore_state .cfi_restore_state
# define cfi_window_save .cfi_window_save
# else
# define cfi_startproc
# define cfi_endproc
@ -78,6 +79,7 @@
# define cfi_undefined(reg)
# define cfi_remember_state
# define cfi_restore_state
# define cfi_window_save
# endif
#else /* ! ASSEMBLER */
@ -110,6 +112,8 @@
".cfi_remember_state"
# define CFI_RESTORE_STATE \
".cfi_restore_state"
# define CFI_WINDOW_SAVE \
".cfi_window_save"
# else
# define CFI_STARTPROC
# define CFI_ENDPROC
@ -125,6 +129,7 @@
# define CFI_UNDEFINED(reg)
# define CFI_REMEMBER_STATE
# define CFI_RESTORE_STATE
# define CFI_WINDOW_SAVE
# endif
#endif /* __ASSEMBLER__ */

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997,1999,2000 Free Software Foundation, Inc.
/* Copyright (C) 1997,1999,2000,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
@ -16,8 +16,10 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifndef _BITS_SETJMP_H
#define _BITS_SETJMP_H 1
#ifndef _SETJMP_H
#if !defined _SETJMP_H && !defined _PTHREAD_H
# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
#endif
@ -78,3 +80,5 @@ typedef int __jmp_buf[3];
((int) (address) < (jmpbuf)[JB_SP])
#endif
#endif /* bits/setjmp.h */

View File

@ -9,8 +9,3 @@ CFLAGS-rtld.c += -mv8
sysdep-others += lddlibc4
install-bin += lddlibc4
endif # elf
ifeq ($(subdir),signal)
sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \
rt_sigqueueinfo rt_sigaction rt_sigpending
endif

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
/* Copyright (C) 1996, 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@tamu.edu).
@ -23,7 +23,8 @@
#include <asm/errno.h>
#include <asm/unistd.h>
/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg,
pid_t *ptid, void *tls, pid_t *ctid); */
.text
.align 4
@ -39,6 +40,12 @@ __clone:
orcc %i1,%g0,%o1
be .Lerror
mov %i2,%o0
/* ptid */
mov %i4,%o2
/* tls */
mov %i5,%o3
/* ctid */
ld [%fp+92],%o4
/* Do the system call */
set __NR_clone,%g1

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997, 2002 Free Software Foundation, Inc.
/* Copyright (C) 1997, 2002, 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
@ -19,6 +19,7 @@
#include <unistd.h>
#include <sys/param.h>
#include <ldsodefs.h>
#include <sysdep.h>
/* Return the system page size. This value will either be 4k or 8k depending
on whether or not we are running on Sparc v9 machine. */
@ -27,13 +28,14 @@
via the AT_PAGESZ auxiliary argument. If we are a static program, we
use the getpagesize system call. */
extern size_t __syscall_getpagesize(void);
int
__getpagesize ()
{
if (GL(dl_pagesize) == 0)
GL(dl_pagesize) = __syscall_getpagesize();
{
INTERNAL_SYSCALL_DECL (err);
GL(dl_pagesize) = INTERNAL_SYSCALL (getpagesize, err, 0);
}
return GL(dl_pagesize);
}
libc_hidden_def (__getpagesize)

View File

@ -23,10 +23,7 @@
#include <sys/signal.h>
#include <errno.h>
#include <kernel_sigaction.h>
extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *,
struct kernel_sigaction *, unsigned long,
size_t);
#include <sysdep.h>
static void __rt_sigreturn_stub (void);
static void __sigreturn_stub (void);
@ -64,9 +61,8 @@ __libc_sigaction (int sig, __const struct sigaction *act,
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
ret = __syscall_rt_sigaction (sig, act ? &kact : 0,
oact ? &koact : 0,
stub, _NSIG / 8);
ret = INLINE_SYSCALL (rt_sigaction, 5, sig, act ? &kact : 0,
oact ? &koact : 0, stub, _NSIG / 8);
if (ret >= 0 || errno != ENOSYS)
{

View File

@ -79,7 +79,11 @@ ENTRY (__socket)
#if defined NEED_CANCELLATION && defined CENABLE
.Lsocket_cancel:
cfi_startproc
save %sp, -96, %sp
cfi_def_cfa_register (%fp)
cfi_window_save
cfi_register (%o7, %i7)
CENABLE
nop
mov %o0, %l0
@ -93,6 +97,7 @@ ENTRY (__socket)
mov %l0, %o0
jmpl %i7 + 8, %g0
restore %g0, %l1, %o0
cfi_endproc
SYSCALL_ERROR_HANDLER2
#endif

View File

@ -1,27 +1,8 @@
# File name Caller Syscall name # args Strong name Weak names
s_getgroups getgroups getgroups 2 __syscall_getgroups
s_getpagesize getpagesize getpagesize 0 __syscall_getpagesize
s_llseek llseek _llseek 5 __syscall__llseek
s_setfsgid setfsgid setfsgid 1 __syscall_setfsgid
s_setfsuid setfsuid setfsuid 1 __syscall_setfsuid
s_setgid setgid setgid 1 __syscall_setgid
s_setgroups setgroups setgroups 2 __syscall_setgroups
s_setregid setregid setregid 2 __syscall_setregid
s_setreuid setreuid setreuid 2 __syscall_setreuid
setrlimit - setrlimit 2 __setrlimit setrlimit
getrlimit - getrlimit 2 __getrlimit getrlimit
s_ipc msgget ipc 5 __syscall_ipc
s_setuid setuid setuid 1 __syscall_setuid
setresuid - setresuid32 3 __setresuid setresuid
setresgid - setresgid32 3 __setresgid setresgid
getresuid - getresuid32 3 getresuid
getresgid - getresgid32 3 getresgid
# System calls with wrappers.
rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
rt_sigpending - rt_sigpending 2 __syscall_rt_sigpending
rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait

View File

@ -181,6 +181,22 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler) \
" restore %%g0, -1, %%o0;" \
".previous;"
#define __CLONE_SYSCALL_STRING \
"ta 0x10;" \
"bcs 2f;" \
" sub %%o1, 1, %%o1;" \
"and %%o0, %%o1, %%o0;" \
"1:" \
".subsection 2;" \
"2:" \
"save %%sp, -192, %%sp;" \
"call __errno_location;" \
" nop;" \
"st %%i0, [%%o0];" \
"ba 1b;" \
" restore %%g0, -1, %%o0;" \
".previous;"
#define __INTERNAL_SYSCALL_STRING \
"ta 0x10;" \
"bcs,a 1f;" \

View File

@ -152,6 +152,18 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler) \
"restore %%g0, -1, %%o0;" \
"1:"
#define __CLONE_SYSCALL_STRING \
"ta 0x6d;" \
"bcc,pt %%xcc, 1f;" \
" sub %%o1, 1, %%o1;" \
"save %%sp, -192, %%sp;" \
"call __errno_location;" \
" mov -1, %%i1;" \
"st %%i0,[%%o0];" \
"restore %%g0, -1, %%o0;" \
"1:" \
"and %%o0, %%o1, %%o0"
#define __INTERNAL_SYSCALL_STRING \
"ta 0x6d;" \
"bcs,a,pt %%xcc, 1f;" \

View File

@ -0,0 +1,34 @@
/* Copyright (C) 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
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, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <kernel-features.h>
/* We have to and actually can handle cancelable system(). The big
problem: we have to kill the child process if necessary. To do
this a cleanup handler has to be registered and is has to be able
to find the PID of the child. The main problem is to reliable have
the PID when needed. It is not necessary for the parent thread to
return. It might still be in the kernel when the cancellation
request comes. Therefore we have to use the clone() calls ability
to have the kernel write the PID into the user-level variable. */
#ifdef __ASSUME_CLONE_THREAD_FLAGS
# define FORK() \
INLINE_CLONE_SYSCALL (CLONE_PARENT_SETTID | SIGCHLD, 0, &pid, NULL, NULL)
#endif
#include "../system.c"