aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv')
-rw-r--r--sysdeps/unix/sysv/linux/Dist8
-rw-r--r--sysdeps/unix/sysv/linux/Makefile8
-rw-r--r--sysdeps/unix/sysv/linux/aio_sigqueue.c54
-rw-r--r--sysdeps/unix/sysv/linux/arm/bits/mman.h75
-rw-r--r--sysdeps/unix/sysv/linux/bits/local_lim.h6
-rw-r--r--sysdeps/unix/sysv/linux/bits/posix_opt.h8
-rw-r--r--sysdeps/unix/sysv/linux/bits/sigaction.h22
-rw-r--r--sysdeps/unix/sysv/linux/bits/siginfo.h257
-rw-r--r--sysdeps/unix/sysv/linux/bits/signum.h21
-rw-r--r--sysdeps/unix/sysv/linux/bits/sigset.h38
-rw-r--r--sysdeps/unix/sysv/linux/i386/clone.S7
-rw-r--r--sysdeps/unix/sysv/linux/i386/sigaction.c37
-rw-r--r--sysdeps/unix/sysv/linux/i386/sys/ucontext.h106
-rw-r--r--sysdeps/unix/sysv/linux/init-first.c2
-rw-r--r--sysdeps/unix/sysv/linux/kernel_sigaction.h4
-rw-r--r--sysdeps/unix/sysv/linux/netinet/ip.h52
-rw-r--r--sysdeps/unix/sysv/linux/rt_sigaction.c28
-rw-r--r--sysdeps/unix/sysv/linux/rt_sigprocmask.c28
-rw-r--r--sysdeps/unix/sysv/linux/rt_sigqueueinfo.c27
-rw-r--r--sysdeps/unix/sysv/linux/rt_sigreturn.c27
-rw-r--r--sysdeps/unix/sysv/linux/rt_sigsuspend.c33
-rw-r--r--sysdeps/unix/sysv/linux/rt_sigtimedwait.c34
-rw-r--r--sysdeps/unix/sysv/linux/sigaction.c27
-rw-r--r--sysdeps/unix/sysv/linux/sigpending.c53
-rw-r--r--sysdeps/unix/sysv/linux/sigprocmask.c55
-rw-r--r--sysdeps/unix/sysv/linux/sigqueue.c53
-rw-r--r--sysdeps/unix/sysv/linux/sigreturn.c53
-rw-r--r--sysdeps/unix/sysv/linux/sigsuspend.c27
-rw-r--r--sysdeps/unix/sysv/linux/sigtimedwait.c37
-rw-r--r--sysdeps/unix/sysv/linux/sigwaitinfo.c36
-rw-r--r--sysdeps/unix/sysv/linux/sys/pci.h25
-rw-r--r--sysdeps/unix/sysv/linux/sys/timex.h6
-rw-r--r--sysdeps/unix/sysv/linux/sys/ultrasound.h1
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list13
-rw-r--r--sysdeps/unix/sysv/linux/testrtsig.h30
35 files changed, 1220 insertions, 78 deletions
diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist
index 340f8c641b..fa95317ec9 100644
--- a/sysdeps/unix/sysv/linux/Dist
+++ b/sysdeps/unix/sysv/linux/Dist
@@ -31,6 +31,12 @@ netinet/tcp.h
netinet/udp.h
netipx/ipx.h
nfs/nfs.h
+rt_sigaction.c
+rt_sigprocmask.c
+rt_sigqueueinfo.c
+rt_sigreturn.c
+rt_sigsuspend.c
+rt_sigtimedwait.c
scsi/sg.h
sys/acct.h
sys/debugreg.h
@@ -41,6 +47,7 @@ sys/kdaemon.h
sys/klog.h
sys/mount.h
sys/mtio.h
+sys/pci.h
sys/prctl.h
sys/procfs.h
sys/quota.h
@@ -50,6 +57,7 @@ sys/sysctl.h
sys/sysinfo.h
sys/sysmacros.h
sys/timex.h
+sys/ultrasound.h
sys/user.h
sys/vt.h
xstatconv.c
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 253bc26e94..ffea9ef4bb 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -16,7 +16,7 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h sys/mtio.h \
sys/user.h sys/sysmacros.h sys/procfs.h sys/prctl.h \
sys/debugreg.h sys/kd.h sys/soundcard.h sys/vt.h \
sys/quota.h sys/fsuid.h bits/mman.h \
- scsi/sg.h
+ scsi/sg.h sys/pci.h sys/ultrasound.h
install-others += $(inst_includedir)/bits/syscall.h
@@ -108,4 +108,10 @@ ifndef no_deps
# Get the list of dependencies (probably /usr/include/linux/limits.h).
-include $(common-objpfx)bits/stdio_lim.d
endif
+
+ifeq ($(subdir),signal)
+sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \
+ rt_sigqueueinfo rt_sigaction
+endif
+
common-generated += bits/stdio_lim.h bits/stdio_lim.d
diff --git a/sysdeps/unix/sysv/linux/aio_sigqueue.c b/sysdeps/unix/sysv/linux/aio_sigqueue.c
new file mode 100644
index 0000000000..b962396291
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aio_sigqueue.c
@@ -0,0 +1,54 @@
+/* Copyright (C) 1997 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 <aio.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include "aio_misc.h"
+
+extern int __syscall_rt_sigqueueinfo (int, int, siginfo_t *);
+
+/* These variables are used quite often in the libc code. */
+extern pid_t __libc_pid;
+extern uid_t __libc_uid;
+
+
+/* Return any pending signal or wait for one for the given time. */
+int
+__aio_sigqueue (sig, val)
+ int sig;
+ const union sigval val;
+{
+ siginfo_t info;
+
+ /* We must pass the information about the data in a siginfo_t value. */
+ info.si_signo = sig;
+ info.si_errno = 0;
+ info.si_code = SI_ASYNCIO;
+
+ if (__libc_pid ==0xf00baa)
+ __libc_pid = __getpid ();
+ info.si_pid = __libc_pid;
+
+ info.si_uid = __libc_uid;
+
+ info.si_value = val;
+
+ return __syscall_rt_sigqueueinfo (__libc_pid, sig, &info);
+}
diff --git a/sysdeps/unix/sysv/linux/arm/bits/mman.h b/sysdeps/unix/sysv/linux/arm/bits/mman.h
new file mode 100644
index 0000000000..fcc0643290
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arm/bits/mman.h
@@ -0,0 +1,75 @@
+/* Definitions for POSIX memory map interface. Linux/ARM version.
+ Copyright (C) 1997 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 _SYS_MMAN_H
+# error "Never include this file directly. Use <sys/mman.h> instead"
+#endif
+
+/* The following definitions basically come from the kernel headers.
+ But the kernel header is not namespace clean. */
+
+
+/* Protections are chosen from these bits, OR'd together. The
+ implementation does not necessarily support PROT_EXEC or PROT_WRITE
+ without PROT_READ. The only guarantees are that no writing will be
+ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ 0x1 /* Page can be read. */
+#define PROT_WRITE 0x2 /* Page can be written. */
+#define PROT_EXEC 0x4 /* Page can be executed. */
+#define PROT_NONE 0x0 /* Page can not be accessed. */
+
+/* Sharing types (must choose one and only one of these). */
+#define MAP_SHARED 0x01 /* Share changes. */
+#define MAP_PRIVATE 0x02 /* Changes are private. */
+#ifdef __USE_MISC
+# define MAP_TYPE 0x0f /* Mask for type of mapping. */
+#endif
+
+/* Other flags. */
+#define MAP_FIXED 0x10 /* Interpret addr exactly. */
+#ifdef __USE_MISC
+# define MAP_FILE 0
+# define MAP_ANONYMOUS 0x20 /* Don't use a file. */
+# define MAP_ANON MAP_ANONYMOUS
+#endif
+
+/* These are Linux-specific. */
+#ifdef __USE_MISC
+# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
+# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
+# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
+# define MAP_LOCKED 0x2000 /* Lock the mapping. */
+# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
+#endif
+
+/* Flags to `msync'. */
+#define MS_ASYNC 1 /* Sync memory asynchronously. */
+#define MS_SYNC 4 /* Synchronous memory sync. */
+#define MS_INVALIDATE 2 /* Invalidate the caches. */
+
+/* Flags for `mlockall'. */
+#define MCL_CURRENT 1 /* Lock all currently mapped pages. */
+#define MCL_FUTURE 2 /* Lock all additions to address
+ space. */
+
+/* Flags for `mremap'. */
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE 1
+#endif
diff --git a/sysdeps/unix/sysv/linux/bits/local_lim.h b/sysdeps/unix/sysv/linux/bits/local_lim.h
index 7ce423061a..2674aa709e 100644
--- a/sysdeps/unix/sysv/linux/bits/local_lim.h
+++ b/sysdeps/unix/sysv/linux/bits/local_lim.h
@@ -1,5 +1,5 @@
/* Minimum guaranteed maximum values for system limits. Linux version.
- Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1994, 1995, 1996, 1997 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,3 +19,7 @@
/* The kernel sources contain a file with all the needed information. */
#include <linux/limits.h>
+
+/* Maximum amount by which a process can descrease its asynchronous I/O
+ priority level. */
+#define AIO_PRIO_DELTA_MAX 20
diff --git a/sysdeps/unix/sysv/linux/bits/posix_opt.h b/sysdeps/unix/sysv/linux/bits/posix_opt.h
index e9f8b7f8f3..5ef6d0563d 100644
--- a/sysdeps/unix/sysv/linux/bits/posix_opt.h
+++ b/sysdeps/unix/sysv/linux/bits/posix_opt.h
@@ -1,5 +1,5 @@
/* Define POSIX options for Linux.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 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
@@ -67,7 +67,13 @@
/* Filenames are not silently truncated. */
#define _POSIX_NO_TRUNC 1
+/* X/Open realtime support is available. */
+#define _XOPEN_REALTIME 1
+
/* XPG4.2 shared memory is supported. */
#define _XOPEN_SHM 1
+/* Real-time signals are supported. */
+#define _POSIX_REALTIME_SIGNALS 1
+
#endif /* bits/posix_opt.h */
diff --git a/sysdeps/unix/sysv/linux/bits/sigaction.h b/sysdeps/unix/sysv/linux/bits/sigaction.h
index 1806bb2e92..b6637e5205 100644
--- a/sysdeps/unix/sysv/linux/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/bits/sigaction.h
@@ -25,7 +25,16 @@
struct sigaction
{
/* Signal handler. */
- __sighandler_t sa_handler;
+ union
+ {
+ /* Used if SA_SIGINFO is not set. */
+ __sighandler_t sa_handler;
+ /* Used if SA_SIGINFO is set. */
+ void (*sa_sigaction) __P ((int, siginfo_t *, void *));
+ }
+ __sigaction_handler;
+#define sa_handler __sigaction_handler.sa_handler
+#define sa_sigaction __sigaction_handler.sa_sigaction
/* Additional set of signals to be blocked. */
__sigset_t sa_mask;
@@ -39,17 +48,22 @@ struct sigaction
/* Bits in `sa_flags'. */
#define SA_NOCLDSTOP 1 /* Don't send SIGCHLD when children stop. */
-#ifdef __USE_MISC
-# define SA_STACK 0x08000000 /* Use signal stack by using `sa_restorer'. */
+#define SA_SIGINFO 4 /* Invoke signal-catching function with
+ three arguments instead of one. */
+#if defined __USE_UNIX98 || defined __USE_MISC
+# define SA_ONSTACK 0x08000000 /* Use signal stack by using `sa_restorer'. */
# define SA_RESTART 0x10000000 /* Restart syscall on signal return. */
-# define SA_INTERRUPT 0x20000000 /* Historical no-op. */
# 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 /* Historical 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'. */
diff --git a/sysdeps/unix/sysv/linux/bits/siginfo.h b/sysdeps/unix/sysv/linux/bits/siginfo.h
new file mode 100644
index 0000000000..42030abc4f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/bits/siginfo.h
@@ -0,0 +1,257 @@
+/* siginfo_t, sigevent and constants. Linux version.
+ Copyright (C) 1997 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 <signal.h> instead"
+#endif
+
+#define SI_MAX_SIZE 128
+#define SI_PAD_SIZE ((SI_MAX_SIZE / sizeof (int)) - 3)
+
+typedef struct siginfo
+ {
+ int si_signo; /* Signal number. */
+ int si_errno; /* If non-zero, an errno value associated with
+ this signal, as defined in <errno.h>. */
+ int si_code; /* Signal code. */
+
+ union
+ {
+ int _pad[SI_PAD_SIZE];
+
+ /* kill(). */
+ struct
+ {
+ __pid_t si_pid; /* Sending process ID. */
+ __uid_t si_uid; /* Real user ID of sending process. */
+ } _kill;
+
+ /* POSIX.1b timers. */
+ struct
+ {
+ unsigned int _timer1;
+ unsigned int _timer2;
+ } _timer;
+
+ /* POSIX.1b signals. */
+ struct
+ {
+ __pid_t si_pid; /* Sending process ID. */
+ __uid_t si_uid; /* Real user ID of sending process. */
+ sigval_t si_sigval; /* Signal value. */
+ } _rt;
+
+ /* SIGCHLD. */
+ struct
+ {
+ __pid_t si_pid; /* Which child. */
+ int si_status; /* Exit value or signal. */
+ __clock_t si_utime;
+ __clock_t si_stime;
+ } _sigchld;
+
+ /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */
+ struct
+ {
+ void *si_addr; /* Faulting insn/memory ref. */
+ } _sigfault;
+
+ /* SIGPOLL. */
+ struct
+ {
+ int si_band; /* Band event for SIGPOLL. */
+ int si_fd;
+ } _sigpoll;
+ } _sifields;
+ } siginfo_t;
+
+
+/* X/Open requires some more fields with fixed names. */
+#define si_pid _sifields._kill.si_pid
+#define si_uid _sifields._kill.si_uid
+#define si_status _sifields._sigchld.si_status
+#define si_utime _sifields._sigchld.si_utime
+#define si_stime _sifields._sigchld.si_stime
+#define si_value _sifields._rt.si_sigval
+#define si_int _sifields._rt.si_sigval.sival_int
+#define si_ptr _sifields._rt.si_sigval.sival_ptr
+#define si_addr _sifields._sigfault.si_addr
+#define si_band _sifields._sigpoll.si_band
+#define si_fd _sifields._sigpoll.si_fd
+
+
+/* Values for `si_code'. Positive values are reserved for kernel-generated
+ signals. */
+enum
+{
+ SI_ASYNCIO = -4, /* Sent by AIO completion. */
+#define SI_ASYNCIO SI_ASYNCIO
+ SI_MESGQ, /* Sent by real time mesq state change. */
+#define SI_MESGQ SI_MESGQ
+ SI_TIMER, /* Sent by timer expiration. */
+#define SI_TIMER SI_TIMER
+ SI_QUEUE, /* Sent by sigqueue. */
+#define SI_QUEUE SI_QUEUE
+ SI_USER /* Sent by kill, sigsend, raise. */
+#define SI_USER SI_USER
+};
+
+
+/* `si_code' values for SIGILL signal. */
+enum
+{
+ ILL_ILLOPC = 1, /* Illegal opcode. */
+#define ILL_ILLOPC ILL_ILLOPC
+ ILL_ILL_OPN, /* Illegal operand. */
+#define ILL_ILLOPN ILL_ILLOPN
+ ILL_ILLADR, /* Illegal addressing mode. */
+#define ILL_ILLADR ILL_ILLADR
+ ILL_ILLTRP, /* Illegal trap. */
+#define ILL_ILLTRP ILL_ILLTRP
+ ILL_PRVOPC, /* Privileged opcode. */
+#define ILL_PRVOPC ILL_PRVOPC
+ ILL_PRVREG, /* Privileged register. */
+#define ILL_PRVREG ILL_PRVREG
+ ILL_COPROC, /* Coprocessor error. */
+#define ILL_COPROC ILL_COPROC
+ ILL_BADSTK /* Internal stack error. */
+#define ILL_BADSTK ILL_BADSTK
+};
+
+/* `si_code' values for SIGFPE signal. */
+enum
+{
+ FPE_INTDIV = 1, /* Integer divide by zero. */
+#define FPE_INTDIV FPE_INTDIV
+ FPE_INTOVF, /* Integer overflow. */
+#define FPE_INTOVF FPE_INTOVF
+ FPE_FLTDIV, /* Floating point divide by zero. */
+#define FPE_FLTDIV FPE_FLTDIV
+ FPE_FLTOVF, /* Floating point overflow. */