mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
Update.
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:
parent
443f79339b
commit
b5bc52efe7
40
ChangeLog
40
ChangeLog
@ -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.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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 */
|
||||
|
@ -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__ */
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;" \
|
||||
|
@ -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;" \
|
||||
|
34
sysdeps/unix/sysv/linux/sparc/system.c
Normal file
34
sysdeps/unix/sysv/linux/sparc/system.c
Normal 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"
|
Loading…
Reference in New Issue
Block a user