From c79c9039b3fe3904c994afcfbae1e8c620043329 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 10 Jun 2000 00:05:44 +0000 Subject: [PATCH] Update. 2000-06-09 Jes Sorensen Ulrich Drepper * sysdeps/unix/sysv/linux/ia64/sigaction.c: New file. * sysdeps/unix/sysv/linux/ia64/sigpending.c: New file. * sysdeps/unix/sysv/linux/ia64/sigprocmask.c: New file. * sysdeps/unix/sysv/linux/ia64/sigsuspend.c: New file. * sysdeps/unix/sysv/linux/ia64/bits/sigaction.h: New file. * sysdeps/unix/sysv/linux/ia64/bits/sigstack.h: New file. --- ChangeLog | 10 +++ sysdeps/unix/sysv/linux/ia64/bits/sigaction.h | 72 +++++++++++++++++++ sysdeps/unix/sysv/linux/ia64/bits/sigstack.h | 54 ++++++++++++++ sysdeps/unix/sysv/linux/ia64/sigaction.c | 51 +++++++++++++ sysdeps/unix/sysv/linux/ia64/sigpending.c | 41 +++++++++++ sysdeps/unix/sysv/linux/ia64/sigprocmask.c | 46 ++++++++++++ sysdeps/unix/sysv/linux/ia64/sigsuspend.c | 39 ++++++++++ 7 files changed, 313 insertions(+) create mode 100644 sysdeps/unix/sysv/linux/ia64/bits/sigaction.h create mode 100644 sysdeps/unix/sysv/linux/ia64/bits/sigstack.h create mode 100644 sysdeps/unix/sysv/linux/ia64/sigaction.c create mode 100644 sysdeps/unix/sysv/linux/ia64/sigpending.c create mode 100644 sysdeps/unix/sysv/linux/ia64/sigprocmask.c create mode 100644 sysdeps/unix/sysv/linux/ia64/sigsuspend.c diff --git a/ChangeLog b/ChangeLog index 5853d5e8df..827829d9ff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2000-06-09 Jes Sorensen + Ulrich Drepper + + * sysdeps/unix/sysv/linux/ia64/sigaction.c: New file. + * sysdeps/unix/sysv/linux/ia64/sigpending.c: New file. + * sysdeps/unix/sysv/linux/ia64/sigprocmask.c: New file. + * sysdeps/unix/sysv/linux/ia64/sigsuspend.c: New file. + * sysdeps/unix/sysv/linux/ia64/bits/sigaction.h: New file. + * sysdeps/unix/sysv/linux/ia64/bits/sigstack.h: New file. + 2000-06-09 Ulrich Drepper * sysdeps/unix/sysv/linux/shm_open.c (where_is_shmfs): Try harder diff --git a/sysdeps/unix/sysv/linux/ia64/bits/sigaction.h b/sysdeps/unix/sysv/linux/ia64/bits/sigaction.h new file mode 100644 index 0000000000..aa26e6e345 --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/bits/sigaction.h @@ -0,0 +1,72 @@ +/* Definitions for Linux/ia64 sigaction. + Copyright (C) 1996, 1997, 2000 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _SIGNAL_H +# error "Never include directly; use instead." +#endif + +/* Structure describing the action to be taken when a signal arrives. */ +struct sigaction + { + /* Signal handler. */ +#ifdef __USE_POSIX199309 + union + { + /* Used if SA_SIGINFO is not set. */ + __sighandler_t sa_handler; + /* Used if SA_SIGINFO is set. */ + void (*sa_sigaction) (int, siginfo_t *, void *); + } + __sigaction_handler; +# define sa_handler __sigaction_handler.sa_handler +# define sa_sigaction __sigaction_handler.sa_sigaction +#else + __sighandler_t sa_handler; +#endif + + /* Special flags. */ + unsigned long int sa_flags; + + /* Additional set of signals to be blocked. */ + __sigset_t sa_mask; + }; + +/* Bits in `sa_flags'. */ +#define SA_NOCLDSTOP 0x00000001 /* Don't send SIGCHLD when children stop. */ +#define SA_SIGINFO 0x00000004 +#ifdef __USE_MISC +# define SA_ONSTACK 0x08000000 /* Use signal stack by using `sa_restorer'. */ +# define SA_RESTART 0x10000000 /* Restart syscall on signal return. */ +# define SA_NODEFER 0x40000000 /* Don't automatically block the signal + when its handler is being executed. */ +# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler. */ +#endif +#ifdef __USE_MISC +# define SA_INTERRUPT 0x20000000 /* Historic no-op. */ + +/* Some aliases for the SA_ constants. */ +# define SA_NOMASK SA_NODEFER +# define SA_ONESHOT SA_RESETHAND +# define SA_STACK SA_ONSTACK +#endif + +/* Values for the HOW argument to `sigprocmask'. */ +#define SIG_BLOCK 0 /* for blocking signals */ +#define SIG_UNBLOCK 1 /* for unblocking signals */ +#define SIG_SETMASK 2 /* for setting the signal mask */ diff --git a/sysdeps/unix/sysv/linux/ia64/bits/sigstack.h b/sysdeps/unix/sysv/linux/ia64/bits/sigstack.h new file mode 100644 index 0000000000..1894dab86e --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/bits/sigstack.h @@ -0,0 +1,54 @@ +/* sigstack, sigaltstack definitions. + Copyright (C) 1998, 2000 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _SIGNAL_H +# error "Never include this file directly. Use instead" +#endif + +/* Structure describing a signal stack (obsolete). */ +struct sigstack + { + __ptr_t ss_sp; /* Signal stack pointer. */ + int ss_onstack; /* Nonzero if executing on this stack. */ + }; + + +/* Possible values for `ss_flags.'. */ +enum +{ + SS_ONSTACK = 1, +#define SS_ONSTACK SS_ONSTACK + SS_DISABLE +#define SS_DISABLE SS_DISABLE +}; + +/* Minimum stack size for a signal handler. */ +#define MINSIGSTKSZ 2048 + +/* System default stack size. */ +#define SIGSTKSZ 8192 + + +/* Alternate, preferred interface. */ +typedef struct sigaltstack + { + __ptr_t ss_sp; + int ss_flags; + size_t ss_size; + } stack_t; diff --git a/sysdeps/unix/sysv/linux/ia64/sigaction.c b/sysdeps/unix/sysv/linux/ia64/sigaction.c new file mode 100644 index 0000000000..c84964077b --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/sigaction.c @@ -0,0 +1,51 @@ +/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Linux/IA64 specific sigaction + Written by Jes Sorensen, , April 1999. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* Linux/ia64 only has rt signals, thus we do not even want to try falling + back to the old style signals as the default Linux handler does. */ + +#include +#include +#include + +#include +#include + +extern int __syscall_rt_sigaction (int, const struct sigaction *, + struct sigaction *, size_t); + +/* The variable is shared between all wrappers around signal handling + functions which have RT equivalents. This is the definition. */ + + +/* If ACT is not NULL, change the action for SIG to *ACT. + If OACT is not NULL, put the old action for SIG in *OACT. */ +int +__sigaction (sig, act, oact) + int sig; + const struct sigaction *act; + struct sigaction *oact; +{ + /* XXX The size argument hopefully will have to be changed to the + real size of the user-level sigset_t. */ + return INLINE_SYSCALL (rt_sigaction, 4, sig, act, oact, _NSIG / 8); +} + +weak_alias (__sigaction, sigaction) diff --git a/sysdeps/unix/sysv/linux/ia64/sigpending.c b/sysdeps/unix/sysv/linux/ia64/sigpending.c new file mode 100644 index 0000000000..9b56b4d631 --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/sigpending.c @@ -0,0 +1,41 @@ +/* Copyright (C) 1997, 1998, 1999, 2000 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* Linux/ia64 only has rt signals, thus we do not even want to try falling + back to the old style signals as the default Linux handler does. */ + +#include +#include +#include + +#include +#include + +extern int __syscall_rt_sigpending (sigset_t *, size_t); + + +/* Change the set of blocked signals to SET, + wait until a signal arrives, and restore the set of blocked signals. */ +int +sigpending (set) + sigset_t *set; +{ + /* XXX The size argument hopefully will have to be changed to the + real size of the user-level sigset_t. */ + return INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8); +} diff --git a/sysdeps/unix/sysv/linux/ia64/sigprocmask.c b/sysdeps/unix/sysv/linux/ia64/sigprocmask.c new file mode 100644 index 0000000000..bcbbbe81bd --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/sigprocmask.c @@ -0,0 +1,46 @@ +/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Linux/IA64 specific sigprocmask + Written by Jes Sorensen, , April 1999. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* Linux/ia64 only has rt signals, thus we do not even want to try falling + back to the old style signals as the default Linux handler does. */ + +#include +#include +#include + +#include +#include + +extern int __syscall_rt_sigprocmask (int, const sigset_t *, sigset_t *, + size_t); + +/* Get and/or change the set of blocked signals. */ +int +__sigprocmask (how, set, oset) + int how; + const sigset_t *set; + sigset_t *oset; +{ + + /* XXX The size argument hopefully will have to be changed to the + real size of the user-level sigset_t. */ + return INLINE_SYSCALL (rt_sigprocmask, 4, how, set, oset, _NSIG / 8); +} +weak_alias (__sigprocmask, sigprocmask) diff --git a/sysdeps/unix/sysv/linux/ia64/sigsuspend.c b/sysdeps/unix/sysv/linux/ia64/sigsuspend.c new file mode 100644 index 0000000000..5eb4c6261b --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/sigsuspend.c @@ -0,0 +1,39 @@ +/* Copyright (C) 1996, 1997, 1998, 1999, 2000 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include + +#include +#include + +extern int __syscall_rt_sigsuspend (const sigset_t *, size_t); + + +/* Change the set of blocked signals to SET, + wait until a signal arrives, and restore the set of blocked signals. */ +int +__sigsuspend (set) + const sigset_t *set; +{ + /* XXX The size argument hopefully will have to be changed to the + real size of the user-level sigset_t. */ + return INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8); +} +weak_alias (__sigsuspend, sigsuspend)