Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
f7e837b2
Commit
f7e837b2
authored
May 28, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge signal arch cleanups
parents
849badb7
2cf5814b
Changes
59
Show whitespace changes
Inline
Side-by-side
Showing
59 changed files
with
731 additions
and
6195 deletions
+731
-6195
arch/cris/kernel/signal.c
arch/cris/kernel/signal.c
+7
-93
arch/i386/kernel/signal.c
arch/i386/kernel/signal.c
+8
-98
arch/mips/kernel/signal.c
arch/mips/kernel/signal.c
+8
-93
arch/mips64/kernel/signal.c
arch/mips64/kernel/signal.c
+8
-94
arch/mips64/kernel/signal32.c
arch/mips64/kernel/signal32.c
+8
-93
arch/parisc/kernel/signal.c
arch/parisc/kernel/signal.c
+8
-99
arch/ppc/kernel/signal.c
arch/ppc/kernel/signal.c
+7
-93
arch/ppc64/kernel/signal.c
arch/ppc64/kernel/signal.c
+7
-101
arch/ppc64/kernel/signal32.c
arch/ppc64/kernel/signal32.c
+8
-101
arch/s390/kernel/signal.c
arch/s390/kernel/signal.c
+8
-96
arch/s390x/kernel/signal.c
arch/s390x/kernel/signal.c
+7
-96
arch/s390x/kernel/signal32.c
arch/s390x/kernel/signal32.c
+8
-93
arch/sh/kernel/signal.c
arch/sh/kernel/signal.c
+8
-93
arch/x86_64/kernel/signal.c
arch/x86_64/kernel/signal.c
+8
-99
include/asm-alpha/errno.h
include/asm-alpha/errno.h
+5
-33
include/asm-alpha/siginfo.h
include/asm-alpha/siginfo.h
+2
-211
include/asm-alpha/signal.h
include/asm-alpha/signal.h
+3
-0
include/asm-arm/errno.h
include/asm-arm/errno.h
+1
-127
include/asm-arm/siginfo.h
include/asm-arm/siginfo.h
+1
-229
include/asm-arm/signal.h
include/asm-arm/signal.h
+2
-0
include/asm-cris/errno.h
include/asm-cris/errno.h
+1
-129
include/asm-cris/siginfo.h
include/asm-cris/siginfo.h
+1
-229
include/asm-generic/errno-base.h
include/asm-generic/errno-base.h
+39
-0
include/asm-generic/errno.h
include/asm-generic/errno.h
+100
-0
include/asm-generic/siginfo.h
include/asm-generic/siginfo.h
+254
-0
include/asm-i386/errno.h
include/asm-i386/errno.h
+1
-127
include/asm-i386/siginfo.h
include/asm-i386/siginfo.h
+1
-229
include/asm-ia64/errno.h
include/asm-ia64/errno.h
+1
-127
include/asm-ia64/siginfo.h
include/asm-ia64/siginfo.h
+12
-134
include/asm-ia64/signal.h
include/asm-ia64/signal.h
+2
-0
include/asm-m68k/errno.h
include/asm-m68k/errno.h
+1
-127
include/asm-m68k/siginfo.h
include/asm-m68k/siginfo.h
+3
-173
include/asm-m68k/signal.h
include/asm-m68k/signal.h
+2
-0
include/asm-mips/errno.h
include/asm-mips/errno.h
+3
-34
include/asm-mips/siginfo.h
include/asm-mips/siginfo.h
+13
-143
include/asm-mips64/errno.h
include/asm-mips64/errno.h
+3
-34
include/asm-mips64/siginfo.h
include/asm-mips64/siginfo.h
+12
-144
include/asm-parisc/errno.h
include/asm-parisc/errno.h
+2
-34
include/asm-parisc/siginfo.h
include/asm-parisc/siginfo.h
+2
-224
include/asm-ppc/errno.h
include/asm-ppc/errno.h
+3
-124
include/asm-ppc/siginfo.h
include/asm-ppc/siginfo.h
+1
-226
include/asm-ppc64/errno.h
include/asm-ppc64/errno.h
+3
-124
include/asm-ppc64/siginfo.h
include/asm-ppc64/siginfo.h
+1
-227
include/asm-s390/errno.h
include/asm-s390/errno.h
+1
-128
include/asm-s390/siginfo.h
include/asm-s390/siginfo.h
+4
-152
include/asm-s390x/errno.h
include/asm-s390x/errno.h
+1
-129
include/asm-s390x/siginfo.h
include/asm-s390x/siginfo.h
+4
-152
include/asm-sh/errno.h
include/asm-sh/errno.h
+1
-127
include/asm-sh/siginfo.h
include/asm-sh/siginfo.h
+1
-228
include/asm-sparc/errno.h
include/asm-sparc/errno.h
+3
-34
include/asm-sparc/siginfo.h
include/asm-sparc/siginfo.h
+3
-162
include/asm-sparc/signal.h
include/asm-sparc/signal.h
+2
-0
include/asm-sparc64/errno.h
include/asm-sparc64/errno.h
+3
-34
include/asm-sparc64/siginfo.h
include/asm-sparc64/siginfo.h
+10
-163
include/asm-sparc64/signal.h
include/asm-sparc64/signal.h
+3
-0
include/asm-x86_64/errno.h
include/asm-x86_64/errno.h
+1
-127
include/asm-x86_64/siginfo.h
include/asm-x86_64/siginfo.h
+1
-228
include/linux/signal.h
include/linux/signal.h
+4
-0
kernel/signal.c
kernel/signal.c
+106
-0
No files found.
arch/cris/kernel/signal.c
View file @
f7e837b2
...
...
@@ -518,9 +518,11 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
*/
static
inline
void
handle_signal
(
int
canrestart
,
unsigned
long
sig
,
struct
k_sigaction
*
ka
,
handle_signal
(
int
canrestart
,
unsigned
long
sig
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
/* Are we from a system call? */
if
(
canrestart
)
{
/* If so, check system call restarting.. */
...
...
@@ -580,7 +582,7 @@ handle_signal(int canrestart, unsigned long sig, struct k_sigaction *ka,
int
do_signal
(
int
canrestart
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
siginfo_t
info
;
struct
k_sigaction
*
ka
;
int
signr
;
/*
* We want the common case to go fast, which
...
...
@@ -594,98 +596,10 @@ int do_signal(int canrestart, sigset_t *oldset, struct pt_regs *regs)
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
current
->
state
=
TASK_STOPPED
;
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
p_pptr
->
pid
;
info
.
si_uid
=
current
->
p_pptr
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
current
->
state
=
TASK_STOPPED
;
current
->
exit_code
=
signr
;
if
(
!
(
current
->
p_pptr
->
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
lock_kernel
();
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
/* Whee! Actually deliver the signal. */
handle_signal
(
canrestart
,
signr
,
ka
,
&
info
,
oldset
,
regs
);
handle_signal
(
canrestart
,
signr
,
&
info
,
oldset
,
regs
);
return
1
;
}
...
...
arch/i386/kernel/signal.c
View file @
f7e837b2
...
...
@@ -18,9 +18,7 @@
#include <linux/ptrace.h>
#include <linux/unistd.h>
#include <linux/stddef.h>
#include <linux/tty.h>
#include <linux/personality.h>
#include <linux/binfmts.h>
#include <linux/suspend.h>
#include <asm/ucontext.h>
#include <asm/uaccess.h>
...
...
@@ -500,9 +498,11 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
*/
static
void
handle_signal
(
unsigned
long
sig
,
s
truct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
handle_signal
(
unsigned
long
sig
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
/* Are we from a system call? */
if
(
regs
->
orig_eax
>=
0
)
{
/* If so, check system call restarting.. */
...
...
@@ -549,7 +549,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
int
do_signal
(
struct
pt_regs
*
regs
,
sigset_t
*
oldset
)
{
siginfo_t
info
;
struct
k_sigaction
*
ka
;
int
signr
;
/*
* We want the common case to go fast, which
...
...
@@ -568,98 +568,8 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
current
->
state
=
TASK_STOPPED
;
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
parent
->
pid
;
info
.
si_uid
=
current
->
parent
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
case
SIGURG
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
{
struct
signal_struct
*
sig
;
current
->
state
=
TASK_STOPPED
;
current
->
exit_code
=
signr
;
sig
=
current
->
parent
->
sig
;
if
(
sig
&&
!
(
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
}
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
/* Reenable any watchpoints before delivering the
* signal to user space. The processor register will
* have been cleared if the watchpoint triggered
...
...
@@ -668,7 +578,7 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
__asm__
(
"movl %0,%%db7"
:
:
"r"
(
current
->
thread
.
debugreg
[
7
]));
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
handle_signal
(
signr
,
&
info
,
oldset
,
regs
);
return
1
;
}
...
...
arch/mips/kernel/signal.c
View file @
f7e837b2
...
...
@@ -487,9 +487,11 @@ setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs,
}
static
inline
void
handle_signal
(
unsigned
long
sig
,
s
truct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
handle_signal
(
unsigned
long
sig
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
if
(
ka
->
sa
.
sa_flags
&
SA_SIGINFO
)
setup_rt_frame
(
ka
,
regs
,
sig
,
oldset
,
info
);
else
...
...
@@ -531,8 +533,8 @@ extern int do_irix_signal(sigset_t *oldset, struct pt_regs *regs);
asmlinkage
int
do_signal
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
;
siginfo_t
info
;
int
sig_nr
;
#ifdef CONFIG_BINFMT_IRIX
if
(
current
->
personality
!=
PER_LINUX
)
...
...
@@ -542,99 +544,12 @@ asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs)
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
current
->
state
=
TASK_STOPPED
;
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
p_pptr
->
pid
;
info
.
si_uid
=
current
->
p_pptr
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
current
->
state
=
TASK_STOPPED
;
current
->
exit_code
=
signr
;
if
(
!
(
current
->
p_pptr
->
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
if
(
regs
->
regs
[
0
])
syscall_restart
(
regs
,
ka
);
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
handle_signal
(
signr
,
&
info
,
oldset
,
regs
);
return
1
;
}
...
...
arch/mips64/kernel/signal.c
View file @
f7e837b2
...
...
@@ -543,10 +543,11 @@ static void inline setup_rt_frame(struct k_sigaction * ka,
force_sig
(
SIGSEGV
,
current
);
}
static
inline
void
handle_signal
(
unsigned
long
sig
,
struct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
static
inline
void
handle_signal
(
unsigned
long
sig
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
if
(
ka
->
sa
.
sa_flags
&
SA_SIGINFO
)
setup_rt_frame
(
ka
,
regs
,
sig
,
oldset
,
info
);
else
...
...
@@ -589,8 +590,8 @@ extern int do_signal32(sigset_t *oldset, struct pt_regs *regs);
asmlinkage
int
do_signal
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
;
siginfo_t
info
;
int
signr
;
#ifdef CONFIG_BINFMT_ELF32
if
(
current
->
thread
.
mflags
&
MF_32BIT
)
{
...
...
@@ -601,99 +602,12 @@ asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs)
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
current
->
state
=
TASK_STOPPED
;
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
p_pptr
->
pid
;
info
.
si_uid
=
current
->
p_pptr
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
current
->
state
=
TASK_STOPPED
;
current
->
exit_code
=
signr
;
if
(
!
(
current
->
p_pptr
->
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
if
(
regs
->
regs
[
0
])
syscall_restart
(
regs
,
ka
);
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
handle_signal
(
signr
,
&
info
,
oldset
,
regs
);
return
1
;
}
...
...
arch/mips64/kernel/signal32.c
View file @
f7e837b2
...
...
@@ -625,9 +625,11 @@ setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs,
}
static
inline
void
handle_signal
(
unsigned
long
sig
,
struct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
handle_signal
(
unsigned
long
sig
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
if
(
ka
->
sa
.
sa_flags
&
SA_SIGINFO
)
setup_rt_frame
(
ka
,
regs
,
sig
,
oldset
,
info
);
else
...
...
@@ -667,105 +669,18 @@ syscall_restart(struct pt_regs *regs, struct k_sigaction *ka)
asmlinkage
int
do_signal32
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
;
siginfo_t
info
;
int
signr
;
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
current
->
state
=
TASK_STOPPED
;
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
p_pptr
->
pid
;
info
.
si_uid
=
current
->
p_pptr
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
current
->
state
=
TASK_STOPPED
;
current
->
exit_code
=
signr
;
if
(
!
(
current
->
p_pptr
->
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
if
(
regs
->
regs
[
0
])
syscall_restart
(
regs
,
ka
);
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
handle_signal
(
signr
,
&
info
,
oldset
,
regs
);
return
1
;
}
...
...
arch/parisc/kernel/signal.c
View file @
f7e837b2
...
...
@@ -432,10 +432,11 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
*/
static
long
handle_signal
(
unsigned
long
sig
,
struct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
handle_signal
(
unsigned
long
sig
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
,
int
in_syscall
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
#if DEBUG_SIG
printk
(
"handle_signal(sig=%ld, ka=%p, info=%p, oldset=%p, regs=%p)
\n
"
,
sig
,
ka
,
info
,
oldset
,
regs
);
...
...
@@ -473,6 +474,7 @@ do_signal(sigset_t *oldset, struct pt_regs *regs, int in_syscall)
{
siginfo_t
info
;
struct
k_sigaction
*
ka
;
int
signr
;
#if DEBUG_SIG
printk
(
"do_signal(oldset=0x%p, regs=0x%p, sr7 %#lx, pending %d, in_syscall=%d
\n
"
,
...
...
@@ -490,102 +492,8 @@ do_signal(sigset_t *oldset, struct pt_regs *regs, int in_syscall)
printk
(
"do_signal: oldset %08lx:%08lx
\n
"
,
oldset
->
sig
[
0
],
oldset
->
sig
[
1
]);
#endif
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
#if DEBUG_SIG
printk
(
"do_signal: signr=%ld, pid=%d
\n
"
,
signr
,
current
->
pid
);
#endif
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
set_current_state
(
TASK_STOPPED
);
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
p_pptr
->
pid
;
info
.
si_uid
=
current
->
p_pptr
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
#if DEBUG_SIG
printk
(
"sa_handler is %lx
\n
"
,
ka
->
sa
.
sa_handler
);
#endif
if
((
unsigned
long
)
ka
->
sa
.
sa_handler
==
(
unsigned
long
)
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
((
unsigned
long
)
ka
->
sa
.
sa_handler
==
(
unsigned
long
)
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
set_current_state
(
TASK_STOPPED
);
current
->
exit_code
=
signr
;
if
(
!
(
current
->
p_pptr
->
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
signr
==
SIGQUIT
)
/* Userspace debugging */
show_regs
(
regs
);
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
/* Restart a system call if necessary. */
if
(
in_syscall
)
{
/* Check the return code */
...
...
@@ -598,6 +506,7 @@ do_signal(sigset_t *oldset, struct pt_regs *regs, int in_syscall)
break
;
case
-
ERESTARTSYS
:
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
!
(
ka
->
sa
.
sa_flags
&
SA_RESTART
))
{
#if DEBUG_SIG
printk
(
"ERESTARTSYS: putting -EINTR
\n
"
);
...
...
@@ -619,7 +528,7 @@ do_signal(sigset_t *oldset, struct pt_regs *regs, int in_syscall)
/* Whee! Actually deliver the signal. If the
delivery failed, we need to continue to iterate in
this loop so we can deliver the SIGSEGV... */
if
(
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
,
in_syscall
))
{
if
(
handle_signal
(
signr
,
&
info
,
oldset
,
regs
,
in_syscall
))
{
#if DEBUG_SIG
printk
(
"Exiting do_signal (success), regs->gr[28] = %ld
\n
"
,
regs
->
gr
[
28
]);
#endif
...
...
arch/ppc/kernel/signal.c
View file @
f7e837b2
...
...
@@ -391,12 +391,12 @@ setup_frame(struct pt_regs *regs, struct sigregs *frame,
* OK, we're invoking a handler
*/
static
void
handle_signal
(
unsigned
long
sig
,
struct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
,
unsigned
long
*
newspp
,
unsigned
long
frame
)
handle_signal
(
unsigned
long
sig
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
,
unsigned
long
*
newspp
,
unsigned
long
frame
)
{
struct
sigcontext_struct
*
sc
;
struct
rt_sigframe
*
rt_sf
;
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
if
(
TRAP
(
regs
)
==
0x0C00
/* System Call! */
&&
((
int
)
regs
->
result
==
-
ERESTARTNOHAND
||
...
...
@@ -480,101 +480,16 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
siginfo_t
info
;
struct
k_sigaction
*
ka
;
unsigned
long
frame
,
newsp
;
int
signr
;
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
newsp
=
frame
=
0
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
current
->
state
=
TASK_STOPPED
;
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
parent
->
pid
;
info
.
si_uid
=
current
->
parent
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
case
SIGURG
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
current
->
state
=
TASK_STOPPED
;
current
->
exit_code
=
signr
;
if
(
!
(
current
->
parent
->
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
if
(
(
ka
->
sa
.
sa_flags
&
SA_ONSTACK
)
&&
(
!
on_sig_stack
(
regs
->
gpr
[
1
])))
newsp
=
(
current
->
sas_ss_sp
+
current
->
sas_ss_size
);
...
...
@@ -583,8 +498,7 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
newsp
=
frame
=
newsp
-
sizeof
(
struct
sigregs
);
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
,
&
newsp
,
frame
);
break
;
handle_signal
(
signr
,
&
info
,
oldset
,
regs
,
&
newsp
,
frame
);
}
if
(
TRAP
(
regs
)
==
0x0C00
/* System Call! */
&&
...
...
arch/ppc64/kernel/signal.c
View file @
f7e837b2
...
...
@@ -509,12 +509,12 @@ setup_frame(struct pt_regs *regs, struct sigregs *frame,
* OK, we're invoking a handler
*/
static
void
handle_signal
(
unsigned
long
sig
,
struct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
,
unsigned
long
*
newspp
,
unsigned
long
frame
)
handle_signal
(
unsigned
long
sig
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
,
unsigned
long
*
newspp
,
unsigned
long
frame
)
{
struct
sigcontext_struct
*
sc
;
struct
rt_sigframe
*
rt_sf
;
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
if
(
regs
->
trap
==
0x0C00
/* System Call! */
&&
((
int
)
regs
->
result
==
-
ERESTARTNOHAND
||
...
...
@@ -598,6 +598,7 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
siginfo_t
info
;
struct
k_sigaction
*
ka
;
unsigned
long
frame
,
newsp
;
int
signr
;
/*
* If the current thread is 32 bit - invoke the
...
...
@@ -611,103 +612,9 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
newsp
=
frame
=
0
;
for
(;;)
{
unsigned
long
signr
;
PPCDBG
(
PPCDBG_SIGNAL
,
"do_signal - (pre) dequeueing signal - pid=%ld current=%lx comm=%s
\n
"
,
current
->
pid
,
current
,
current
->
comm
);
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
PPCDBG
(
PPCDBG_SIGNAL
,
"do_signal - (aft) dequeueing signal - signal=%lx - pid=%ld current=%lx comm=%s
\n
"
,
signr
,
current
->
pid
,
current
,
current
->
comm
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
current
->
state
=
TASK_STOPPED
;
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
parent
->
pid
;
info
.
si_uid
=
current
->
parent
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
PPCDBG
(
PPCDBG_SIGNAL
,
"do_signal - ka=%p, action handler=%lx
\n
"
,
ka
,
ka
->
sa
.
sa_handler
);
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
PPCDBG
(
PPCDBG_SIGNAL
,
"do_signal - into SIG_IGN logic
\n
"
);
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
PPCDBG
(
PPCDBG_SIGNAL
,
"do_signal - into SIG_DFL logic
\n
"
);
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
current
->
state
=
TASK_STOPPED
;
current
->
exit_code
=
signr
;
if
(
!
(
current
->
parent
->
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
if
(
(
ka
->
sa
.
sa_flags
&
SA_ONSTACK
)
&&
(
!
on_sig_stack
(
regs
->
gpr
[
1
])))
newsp
=
(
current
->
sas_ss_sp
+
current
->
sas_ss_size
);
...
...
@@ -718,9 +625,8 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
/* Whee! Actually deliver the signal. */
PPCDBG
(
PPCDBG_SIGNAL
,
"do_signal - GOING TO RUN SIGNAL HANDLER - pid=%ld current=%lx comm=%s
\n
"
,
current
->
pid
,
current
,
current
->
comm
);
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
,
&
newsp
,
frame
);
handle_signal
(
signr
,
&
info
,
oldset
,
regs
,
&
newsp
,
frame
);
PPCDBG
(
PPCDBG_SIGNAL
,
"do_signal - after running signal handler - pid=%ld current=%lx comm=%s
\n
"
,
current
->
pid
,
current
,
current
->
comm
);
break
;
}
if
(
regs
->
trap
==
0x0C00
/* System Call! */
&&
...
...
arch/ppc64/kernel/signal32.c
View file @
f7e837b2
...
...
@@ -1187,13 +1187,13 @@ setup_rt_frame32(struct pt_regs *regs, struct sigregs32 *frame,
* OK, we're invoking a handler
*/
static
void
handle_signal32
(
unsigned
long
sig
,
struct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
,
unsigned
int
*
newspp
,
unsigned
int
frame
)
handle_signal32
(
unsigned
long
sig
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
,
unsigned
int
*
newspp
,
unsigned
int
frame
)
{
struct
sigcontext32_struct
*
sc
;
struct
rt_sigframe_32
*
rt_stack_frame
;
siginfo_t32
siginfo32bit
;
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
if
(
regs
->
trap
==
0x0C00
/* System Call! */
&&
((
int
)
regs
->
result
==
-
ERESTARTNOHAND
||
...
...
@@ -1337,114 +1337,23 @@ int do_signal32(sigset_t *oldset, struct pt_regs *regs)
siginfo_t
info
;
struct
k_sigaction
*
ka
;
unsigned
int
frame
,
newsp
;
int
signr
;
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
newsp
=
frame
=
0
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
ifppcdebug
(
PPCDBG_SYS32
)
{
if
(
signr
)
udbg_printf
(
"do_signal32 - processing signal=%2lx - pid=%ld, comm=%s
\n
"
,
signr
,
current
->
pid
,
current
->
comm
);
}
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
current
->
state
=
TASK_STOPPED
;
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
parent
->
pid
;
info
.
si_uid
=
current
->
parent
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
current
->
state
=
TASK_STOPPED
;
current
->
exit_code
=
signr
;
if
(
!
(
current
->
parent
->
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
PPCDBG
(
PPCDBG_SIGNAL
,
" do signal :sigaction flags = %lx
\n
"
,
ka
->
sa
.
sa_flags
);
PPCDBG
(
PPCDBG_SIGNAL
,
" do signal :on sig stack = %lx
\n
"
,
on_sig_stack
(
regs
->
gpr
[
1
]));
PPCDBG
(
PPCDBG_SIGNAL
,
" do signal :reg1 = %lx
\n
"
,
regs
->
gpr
[
1
]);
PPCDBG
(
PPCDBG_SIGNAL
,
" do signal :alt stack = %lx
\n
"
,
current
->
sas_ss_sp
);
PPCDBG
(
PPCDBG_SIGNAL
,
" do signal :alt stack size = %lx
\n
"
,
current
->
sas_ss_size
);
if
(
(
ka
->
sa
.
sa_flags
&
SA_ONSTACK
)
&&
(
!
on_sig_stack
(
regs
->
gpr
[
1
])))
{
...
...
@@ -1454,8 +1363,7 @@ int do_signal32(sigset_t *oldset, struct pt_regs *regs)
newsp
=
frame
=
newsp
-
sizeof
(
struct
sigregs32
);
/* Whee! Actually deliver the signal. */
handle_signal32
(
signr
,
ka
,
&
info
,
oldset
,
regs
,
&
newsp
,
frame
);
break
;
handle_signal32
(
signr
,
&
info
,
oldset
,
regs
,
&
newsp
,
frame
);
}
if
(
regs
->
trap
==
0x0C00
/* System Call! */
&&
...
...
@@ -1468,9 +1376,8 @@ int do_signal32(sigset_t *oldset, struct pt_regs *regs)
}
if
(
newsp
==
frame
)
{
return
0
;
/* no signals delivered */
}
// Invoke correct stack setup routine
if
(
ka
->
sa
.
sa_flags
&
SA_SIGINFO
)
setup_rt_frame32
(
regs
,
(
struct
sigregs32
*
)(
u64
)
frame
,
newsp
);
...
...
arch/s390/kernel/signal.c
View file @
f7e837b2
...
...
@@ -374,9 +374,11 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
*/
static
void
handle_signal
(
unsigned
long
sig
,
s
truct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
handle_signal
(
unsigned
long
sig
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
/* Are we from a system call? */
if
(
regs
->
trap
==
__LC_SVC_OLD_PSW
)
{
/* If so, check system call restarting.. */
...
...
@@ -427,7 +429,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
int
do_signal
(
struct
pt_regs
*
regs
,
sigset_t
*
oldset
)
{
siginfo_t
info
;
struct
k_sigaction
*
ka
;
int
signr
;
/*
* We want the common case to go fast, which
...
...
@@ -441,100 +443,10 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
set_current_state
(
TASK_STOPPED
);
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
p_pptr
->
pid
;
info
.
si_uid
=
current
->
p_pptr
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
{
struct
signal_struct
*
sig
;
set_current_state
(
TASK_STOPPED
);
current
->
exit_code
=
signr
;
sig
=
current
->
p_pptr
->
sig
;
if
(
sig
&&
!
(
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
}
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
handle_signal
(
signr
,
&
info
,
oldset
,
regs
);
return
1
;
}
...
...
arch/s390x/kernel/signal.c
View file @
f7e837b2
...
...
@@ -374,9 +374,11 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
*/
static
void
handle_signal
(
unsigned
long
sig
,
s
truct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
handle_signal
(
unsigned
long
sig
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
/* Are we from a system call? */
if
(
regs
->
trap
==
__LC_SVC_OLD_PSW
)
{
/* If so, check system call restarting.. */
...
...
@@ -427,7 +429,6 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
int
do_signal
(
struct
pt_regs
*
regs
,
sigset_t
*
oldset
)
{
siginfo_t
info
;
struct
k_sigaction
*
ka
;
/*
* We want the common case to go fast, which
...
...
@@ -447,100 +448,10 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
}
#endif
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
set_current_state
(
TASK_STOPPED
);
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
p_pptr
->
pid
;
info
.
si_uid
=
current
->
p_pptr
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
{
struct
signal_struct
*
sig
;
set_current_state
(
TASK_STOPPED
);
current
->
exit_code
=
signr
;
sig
=
current
->
p_pptr
->
sig
;
if
(
sig
&&
!
(
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
}
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
handle_signal
(
signr
,
&
info
,
oldset
,
regs
);
return
1
;
}
...
...
arch/s390x/kernel/signal32.c
View file @
f7e837b2
...
...
@@ -548,9 +548,11 @@ static void setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info,
*/
static
void
handle_signal32
(
unsigned
long
sig
,
s
truct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
handle_signal32
(
unsigned
long
sig
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
/* Are we from a system call? */
if
(
regs
->
trap
==
__LC_SVC_OLD_PSW
)
{
/* If so, check system call restarting.. */
...
...
@@ -601,7 +603,7 @@ handle_signal32(unsigned long sig, struct k_sigaction *ka,
int
do_signal32
(
struct
pt_regs
*
regs
,
sigset_t
*
oldset
)
{
siginfo_t
info
;
struct
k_sigaction
*
ka
;
int
signr
;
/*
* We want the common case to go fast, which
...
...
@@ -615,97 +617,10 @@ int do_signal32(struct pt_regs *regs, sigset_t *oldset)
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
set_current_state
(
TASK_STOPPED
);
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
p_pptr
->
pid
;
info
.
si_uid
=
current
->
p_pptr
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
set_current_state
(
TASK_STOPPED
);
current
->
exit_code
=
signr
;
if
(
!
(
current
->
p_pptr
->
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
/* Whee! Actually deliver the signal. */
handle_signal32
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
handle_signal32
(
signr
,
&
info
,
oldset
,
regs
);
return
1
;
}
...
...
arch/sh/kernel/signal.c
View file @
f7e837b2
...
...
@@ -487,9 +487,11 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
*/
static
void
handle_signal
(
unsigned
long
sig
,
s
truct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
handle_signal
(
unsigned
long
sig
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
/* Are we from a system call? */
if
(
regs
->
syscall_nr
>=
0
)
{
/* If so, check system call restarting.. */
...
...
@@ -540,7 +542,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
int
do_signal
(
struct
pt_regs
*
regs
,
sigset_t
*
oldset
)
{
siginfo_t
info
;
struct
k_sigaction
*
ka
;
int
signr
;
/*
* We want the common case to go fast, which
...
...
@@ -554,97 +556,10 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
current
->
state
=
TASK_STOPPED
;
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
p_pptr
->
pid
;
info
.
si_uid
=
current
->
p_pptr
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
current
->
state
=
TASK_STOPPED
;
current
->
exit_code
=
signr
;
if
(
!
(
current
->
p_pptr
->
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
handle_signal
(
signr
,
&
info
,
oldset
,
regs
);
return
1
;
}
...
...
arch/x86_64/kernel/signal.c
View file @
f7e837b2
...
...
@@ -345,9 +345,11 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
*/
static
void
handle_signal
(
unsigned
long
sig
,
s
truct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
handle_signal
(
unsigned
long
sig
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
struct
k_sigaction
*
ka
=
&
current
->
sig
->
action
[
sig
-
1
];
#if DEBUG_SIG
printk
(
"handle_signal pid:%d sig:%lu rip:%lx rsp:%lx regs=%p
\n
"
,
current
->
pid
,
sig
,
regs
->
rip
,
regs
->
rsp
,
regs
);
...
...
@@ -403,7 +405,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
int
do_signal
(
struct
pt_regs
*
regs
,
sigset_t
*
oldset
)
{
siginfo_t
info
;
struct
k_sigaction
*
ka
;
int
signr
;
/*
* We want the common case to go fast, which
...
...
@@ -418,101 +420,8 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
for
(;;)
{
unsigned
long
signr
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
{
break
;
}
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
current
->
state
=
TASK_STOPPED
;
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
if
(
!
(
signr
=
current
->
exit_code
))
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
parent
->
pid
;
info
.
si_uid
=
current
->
parent
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
{
struct
signal_struct
*
sig
;
preempt_disable
();
current
->
state
=
TASK_STOPPED
;
current
->
exit_code
=
signr
;
sig
=
current
->
parent
->
sig
;
if
(
sig
&&
!
(
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
preempt_enable
();
continue
;
}
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
signr
=
get_signal_to_deliver
(
&
info
,
regs
);
if
(
signr
>
0
)
{
/* Reenable any watchpoints before delivering the
* signal to user space. The processor register will
* have been cleared if the watchpoint triggered
...
...
@@ -521,7 +430,7 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
__asm__
(
"movq %0,%%db7"
:
:
"r"
(
current
->
thread
.
debugreg
[
7
]));
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
handle_signal
(
signr
,
&
info
,
oldset
,
regs
);
return
1
;
}
...
...
include/asm-alpha/errno.h
View file @
f7e837b2
#ifndef _ALPHA_ERRNO_H
#define _ALPHA_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#include <asm-generic/errno-base.h>
#undef EAGAIN
/* 11 in errno-base.h */
#define EDEADLK 11
/* Resource deadlock would occur */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EAGAIN 35
/* Try again */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define EINPROGRESS 36
/* Operation now in progress */
...
...
include/asm-alpha/siginfo.h
View file @
f7e837b2
#ifndef _ALPHA_SIGINFO_H
#define _ALPHA_SIGINFO_H
#include <linux/types.h>
/* This structure matches OSF/1 for binary compatibility. */
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 4)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_DETHREAD -7
/* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define HAVE_ARCH_COPY_SIGINFO
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#include <asm-generic/siginfo.h>
#ifdef __KERNEL__
#include <linux/string.h>
...
...
@@ -227,9 +21,6 @@ extern inline void copy_siginfo(siginfo_t *to, siginfo_t *from)
memcpy
(
to
,
from
,
4
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
#define HAVE_ARCH_COPY_SIGINFO_TO_USER
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#endif
include/asm-alpha/signal.h
View file @
f7e837b2
...
...
@@ -185,6 +185,9 @@ struct sigstack {
#ifdef __KERNEL__
#include <asm/sigcontext.h>
#define HAVE_ARCH_GET_SIGNAL_TO_DELIVER
#endif
#endif
include/asm-arm/errno.h
View file @
f7e837b2
#ifndef _ARM_ERRNO_H
#define _ARM_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#define ENOMEDIUM 123
/* No medium found */
#define EMEDIUMTYPE 124
/* Wrong medium type */
#include <asm-generic/errno.h>
#endif
include/asm-arm/siginfo.h
View file @
f7e837b2
#ifndef _ASMARM_SIGINFO_H
#define _ASMARM_SIGINFO_H
#include <linux/types.h>
/* XXX: This structure was copied from the Alpha; is there an iBCS version? */
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_DETHREAD -7
/* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
static
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#include <asm-generic/siginfo.h>
#endif
include/asm-arm/signal.h
View file @
f7e837b2
...
...
@@ -187,6 +187,8 @@ typedef struct sigaltstack {
#define sigmask(sig) (1UL << ((sig) - 1))
#define HAVE_ARCH_GET_SIGNAL_TO_DELIVER
#endif
#endif
include/asm-cris/errno.h
View file @
f7e837b2
/* verbatim copy of asm-i386/errno.h */
#ifndef _CRIS_ERRNO_H
#define _CRIS_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#define ENOMEDIUM 123
/* No medium found */
#define EMEDIUMTYPE 124
/* Wrong medium type */
#include <asm-generic/errno.h>
#endif
include/asm-cris/siginfo.h
View file @
f7e837b2
#ifndef _CRIS_SIGINFO_H
#define _CRIS_SIGINFO_H
#include <linux/types.h>
/* This is copied from asm-m68k/siginfo.h. */
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
extern
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
#define HAVE_ARCH_COPY_SIGINFO_TO_USER
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#include <asm-generic/siginfo.h>
#endif
include/asm-generic/errno-base.h
0 → 100644
View file @
f7e837b2
#ifndef _ASM_GENERIC_ERRNO_BASE_H
#define _ASM_GENERIC_ERRNO_BASE_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Argument list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#endif
include/asm-generic/errno.h
0 → 100644
View file @
f7e837b2
#ifndef _ASM_GENERIC_ERRNO_H
#define _ASM_GENERIC_ERRNO_H
#include <asm-generic/errno-base.h>
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#define ENOMEDIUM 123
/* No medium found */
#define EMEDIUMTYPE 124
/* Wrong medium type */
#endif
include/asm-generic/siginfo.h
0 → 100644
View file @
f7e837b2
#ifndef _ASM_GENERIC_SIGINFO_H
#define _ASM_GENERIC_SIGINFO_H
#include <linux/types.h>
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#ifndef SI_PAD_SIZE
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
#endif
#ifndef HAVE_ARCH_SIGINFO_T
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
#endif
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_timer1 _sifields._timer._timer1
#define si_timer2 _sifields._timer._timer2
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_DETHREAD -7
/* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
#ifndef HAVE_ARCH_SI_CODES
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
#endif
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#ifndef SIGEV_PAD_SIZE
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
#endif
#ifndef HAVE_ARCH_SIGEVENT_T
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#endif
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#ifndef HAVE_ARCH_COPY_SIGINFO
#include <linux/string.h>
static
inline
void
copy_siginfo
(
struct
siginfo
*
to
,
struct
siginfo
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
*
to
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
#endif
extern
int
copy_siginfo_to_user
(
struct
siginfo
*
to
,
struct
siginfo
*
from
);
#endif
/* __KERNEL__ */
#endif
include/asm-i386/errno.h
View file @
f7e837b2
#ifndef _I386_ERRNO_H
#define _I386_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Argument list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#define ENOMEDIUM 123
/* No medium found */
#define EMEDIUMTYPE 124
/* Wrong medium type */
#include <asm-generic/errno.h>
#endif
include/asm-i386/siginfo.h
View file @
f7e837b2
#ifndef _I386_SIGINFO_H
#define _I386_SIGINFO_H
#include <linux/types.h>
/* XXX: This structure was copied from the Alpha; is there an iBCS version? */
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_DETHREAD -7
/* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
static
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#include <asm-generic/siginfo.h>
#endif
include/asm-ia64/errno.h
View file @
f7e837b2
...
...
@@ -8,132 +8,6 @@
* David Mosberger-Tang <davidm@hpl.hp.com>
*/
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Argument list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#define ENOMEDIUM 123
/* No medium found */
#define EMEDIUMTYPE 124
/* Wrong medium type */
#include <asm-generic/errno.h>
#endif
/* _ASM_IA64_ERRNO_H */
include/asm-ia64/siginfo.h
View file @
f7e837b2
...
...
@@ -6,15 +6,15 @@
* David Mosberger-Tang <davidm@hpl.hp.com>
*/
#include <linux/types.h>
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 4)
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define HAVE_ARCH_SIGINFO_T
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 4)
#define HAVE_ARCH_COPY_SIGINFO
#include <asm-generic/siginfo.h>
typedef
struct
siginfo
{
int
si_signo
;
...
...
@@ -75,18 +75,6 @@ typedef struct siginfo {
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_imm _sifields._sigfault._imm
/* as per UNIX SysV ABI spec */
#define si_flags _sifields._sigfault._flags
/*
...
...
@@ -94,8 +82,6 @@ typedef struct siginfo {
* si_code is non-zero and __ISR_VALID is set in si_flags.
*/
#define si_isr _sifields._sigfault._isr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#define si_pfm_ovfl _sifields._sigprof._pfm_ovfl_counters
/*
...
...
@@ -109,155 +95,49 @@ typedef struct siginfo {
* Positive values for kernel-generated signals.
*/
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_PROF (6 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE (-1)
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ (-3)
/* sent by real time mesq state change */
#define SI_ASYNCIO (-4)
/* sent by AIO completion */
#define SI_SIGIO (-5)
/* sent by queued SIGIO */
#define SI_TKILL (-6)
/* sent by tkill system call */
#define SI_DETHREAD (-7)
/* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define ILL_BADIADDR (__SI_FAULT|9)
/* unimplemented instruction address */
#define __ILL_BREAK (__SI_FAULT|10)
/* illegal break */
#define __ILL_BNDMOD (__SI_FAULT|11)
/* bundle-update (modification) in progress */
#undef NSIGILL
#define NSIGILL 11
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define __FPE_DECOVF (__SI_FAULT|9)
/* decimal overflow */
#define __FPE_DECDIV (__SI_FAULT|10)
/* decimal division by zero */
#define __FPE_DECERR (__SI_FAULT|11)
/* packed decimal error */
#define __FPE_INVASC (__SI_FAULT|12)
/* invalid ASCII digit */
#define __FPE_INVDEC (__SI_FAULT|13)
/* invalid decimal digit */
#undef NSIGFPE
#define NSIGFPE 13
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define __SEGV_PSTKOVF (__SI_FAULT|3)
/* paragraph stack overflow */
#undef NSIGSEGV
#define NSIGSEGV 3
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define TRAP_BRANCH (__SI_FAULT|3)
/* process taken branch trap */
#define TRAP_HWBKPT (__SI_FAULT|4)
/* hardware breakpoint or watchpoint */
#undef NSIGTRAP
#define NSIGTRAP 4
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* SIGPROF si_codes
*/
#define PROF_OVFL (__SI_PROF|1)
/* some counters overflowed */
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from userspace, libpthread
* transmuting it to SIGEV_SIGNAL, which the thread manager then catches and does the
* appropriate nonsense. However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
...
...
@@ -268,11 +148,9 @@ copy_siginfo (siginfo_t *to, siginfo_t *from)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
memcpy
(
to
,
from
,
4
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
#define HAVE_ARCH_COPY_SIGINFO_TO_USER
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
extern
int
copy_siginfo_from_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
...
...
include/asm-ia64/signal.h
View file @
f7e837b2
...
...
@@ -166,6 +166,8 @@ struct k_sigaction {
# include <asm/sigcontext.h>
#define HAVE_ARCH_GET_SIGNAL_TO_DELIVER
#endif
/* __KERNEL__ */
# endif
/* !__ASSEMBLY__ */
...
...
include/asm-m68k/errno.h
View file @
f7e837b2
#ifndef _M68K_ERRNO_H
#define _M68K_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#define ENOMEDIUM 123
/* No medium found */
#define EMEDIUMTYPE 124
/* Wrong medium type */
#include <asm-generic/errno.h>
#endif
/* _M68K_ERRNO_H */
include/asm-m68k/siginfo.h
View file @
f7e837b2
#ifndef _M68K_SIGINFO_H
#define _M68K_SIGINFO_H
#
include <linux/types.h>
#
define HAVE_ARCH_SIGINFO_T
/* This is copied from asm-alpha/siginfo.h. */
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
#include <asm-generic/siginfo.h>
typedef
struct
siginfo
{
int
si_signo
;
...
...
@@ -70,174 +62,12 @@ typedef struct siginfo {
/*
* How these fields are to be accessed.
*/
#
define si_pid _sifields._kill._p
id
#
undef si_u
id
#ifdef __KERNEL__
#define si_uid _sifields._kill._uid32
#define si_uid16 _sifields._kill._uid
#else
#define si_uid _sifields._kill._uid
#endif
/* __KERNEL__ */
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
extern
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#endif
include/asm-m68k/signal.h
View file @
f7e837b2
...
...
@@ -215,6 +215,8 @@ extern __inline__ int sigfindinword(unsigned long word)
return
word
^
31
;
}
#define HAVE_ARCH_GET_SIGNAL_TO_DELIVER
#endif
/* __KERNEL__ */
#endif
/* _M68K_SIGNAL_H */
include/asm-mips/errno.h
View file @
f7e837b2
...
...
@@ -11,40 +11,9 @@
/*
* These error numbers are intended to be MIPS ABI compatible
*/
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#include <asm-generic/errno-base.h>
#define ENOMSG 35
/* No message of desired type */
#define EIDRM 36
/* Identifier removed */
#define ECHRNG 37
/* Channel number out of range */
...
...
include/asm-mips/siginfo.h
View file @
f7e837b2
...
...
@@ -9,21 +9,19 @@
#ifndef _ASM_SIGINFO_H
#define _ASM_SIGINFO_H
#include <linux/types.h>
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
#define HAVE_ARCH_SIGINFO_T
#define HAVE_ARCH_SIGEVENT_T
/* This structure matches IRIX 32/n32 ABIs for binary compatibility. */
#include <asm-generic/siginfo.h>
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
/* The sigval union matches IRIX 32/n32 ABIs for binary compatibility. */
/* This structure matches IRIX 32/n32 ABIs for binary compatibility but
has Linux extensions. */
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_code
;
...
...
@@ -82,125 +80,16 @@ typedef struct siginfo {
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Again these have been choosen to be IRIX compatible.
*/
#
define SI_USER 0
/* sent by kill, sigsend, raise */
#
define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#
define SI_QUEUE -1
/* sent by sigqueue */
#
undef SI_ASYNCIO
#
undef SI_TIMER
#
undef SI_MESGQ
#define SI_ASYNCIO -2
/* sent by AIO completion */
#define SI_TIMER __SI_CODE(__SI_TIMER,-3)
/* sent by timer expiration */
#define SI_MESGQ -4
/* sent by real time mesq state change */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
...
...
@@ -210,14 +99,14 @@ typedef struct siginfo {
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#undef SIGEV_NONE
#undef SIGEV_SIGNAL
#undef SIGEV_THREAD
#define SIGEV_NONE 128
/* other notification: meaningless */
#define SIGEV_SIGNAL 129
/* notify via signal */
#define SIGEV_CALLBACK 130
/* ??? */
#define SIGEV_THREAD 131
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
/* XXX This one isn't yet IRIX / ABI compatible. */
typedef
struct
sigevent
{
int
sigev_notify
;
...
...
@@ -233,23 +122,4 @@ typedef struct sigevent {
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
extern
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#endif
/* _ASM_SIGINFO_H */
include/asm-mips64/errno.h
View file @
f7e837b2
...
...
@@ -12,40 +12,9 @@
/*
* These error numbers are intended to be MIPS ABI compatible
*/
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#include <asm-generic/errno-base.h>
#define ENOMSG 35
/* No message of desired type */
#define EIDRM 36
/* Identifier removed */
#define ECHRNG 37
/* Channel number out of range */
...
...
include/asm-mips64/siginfo.h
View file @
f7e837b2
...
...
@@ -9,21 +9,18 @@
#ifndef _ASM_SIGINFO_H
#define _ASM_SIGINFO_H
#include <linux/types.h>
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
#define HAVE_ARCH_SIGINFO_T
#define HAVE_ARCH_SIGEVENT_T
/* This structure matches IRIX 32/n32 ABIs for binary compatibility. */
#include <asm-generic/siginfo.h>
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
/* The sigval union matches IRIX 32/n32 ABIs for binary compatibility. */
/* This structure matches IRIX 32/n32 ABIs for binary compatibility but
has Linux extensions. */
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_code
;
...
...
@@ -82,125 +79,16 @@ typedef struct siginfo {
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Again these have been choosen to be IRIX compatible.
*/
#
define SI_USER 0
/* sent by kill, sigsend, raise */
#
define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#
define SI_QUEUE -1
/* sent by sigqueue */
#
undef SI_ASYNCIO
#
undef SI_TIMER
#
undef SI_MESGQ
#define SI_ASYNCIO -2
/* sent by AIO completion */
#define SI_TIMER __SI_CODE(__SI_TIMER,-3)
/* sent by timer expiration */
#define SI_MESGQ -4
/* sent by real time mesq state change */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
...
...
@@ -210,14 +98,14 @@ typedef struct siginfo {
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#undef SIGEV_NONE
#undef SIGEV_SIGNAL
#undef SIGEV_THREAD
#define SIGEV_NONE 128
/* other notification: meaningless */
#define SIGEV_SIGNAL 129
/* notify via signal */
#define SIGEV_CALLBACK 130
/* ??? */
#define SIGEV_THREAD 131
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
/* XXX This one isn't yet IRIX / ABI compatible. */
typedef
struct
sigevent
{
int
sigev_notify
;
...
...
@@ -233,24 +121,4 @@ typedef struct sigevent {
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
extern
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
#define HAVE_ARCH_COPY_SIGINFO_TO_USER
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#endif
/* _ASM_SIGINFO_H */
include/asm-parisc/errno.h
View file @
f7e837b2
#ifndef _PARISC_ERRNO_H
#define _PARISC_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#include <asm-generic/errno-base.h>
#define ENOMSG 35
/* No message of desired type */
#define EIDRM 36
/* Identifier removed */
#define ECHRNG 37
/* Channel number out of range */
...
...
include/asm-parisc/siginfo.h
View file @
f7e837b2
#ifndef _PARISC_SIGINFO_H
#define _PARISC_SIGINFO_H
#include <linux/types.h>
/* XXX: This structure was copied from the Alpha; is there an iBCS version? */
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
#include <asm-generic/siginfo.h>
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define TRAP_BRANCH (__SI_FAULT|3)
/* process taken branch trap */
#define TRAP_HWBKPT (__SI_FAULT|4)
/* hardware breakpoint or watchpoint */
#undef NSIGTRAP
#define NSIGTRAP 4
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
extern
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
#define HAVE_ARCH_COPY_SIGINFO_TO_USER
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#endif
include/asm-ppc/errno.h
View file @
f7e837b2
...
...
@@ -4,131 +4,10 @@
#ifndef _PPC_ERRNO_H
#define _PPC_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK 58
/* File locking deadlock error */
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#include <asm-generic/errno.h>
#
define ENOMEDIUM 123
/* No medium found */
#define E
MEDIUMTYPE 124
/* Wrong medium type
*/
#
undef EDEADLOCK
#define E
DEADLOCK 58
/* File locking deadlock error
*/
/* Should never be seen by user programs */
#define ERESTARTSYS 512
...
...
include/asm-ppc/siginfo.h
View file @
f7e837b2
...
...
@@ -4,231 +4,6 @@
#ifndef _PPC_SIGINFO_H
#define _PPC_SIGINFO_H
/* Copied from i386 from alpha. */
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_DETHREAD -7
/* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
extern
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#include <asm-generic/siginfo.h>
#endif
include/asm-ppc64/errno.h
View file @
f7e837b2
...
...
@@ -8,131 +8,10 @@
* 2 of the License, or (at your option) any later version.
*/
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK 58
/* File locking deadlock error */
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#include <asm-generic/errno.h>
#
define ENOMEDIUM 123
/* No medium found */
#define E
MEDIUMTYPE 124
/* Wrong medium type
*/
#
undef EDEADLOCK
#define E
DEADLOCK 58
/* File locking deadlock error
*/
/* Should never be seen by user programs */
#define ERESTARTSYS 512
...
...
include/asm-ppc64/siginfo.h
View file @
f7e837b2
...
...
@@ -8,232 +8,6 @@
* 2 of the License, or (at your option) any later version.
*/
#include <linux/types.h>
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_DETHREAD -7
/* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
static
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#include <asm-generic/siginfo.h>
#endif
/* _PPC64_SIGINFO_H */
include/asm-s390/errno.h
View file @
f7e837b2
...
...
@@ -3,138 +3,11 @@
*
* S390 version
*
* Derived from "include/asm-i386/errno.h"
*/
#ifndef _S390_ERRNO_H
#define _S390_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#define ENOMEDIUM 123
/* No medium found */
#define EMEDIUMTYPE 124
/* Wrong medium type */
#include <asm-generic/errno.h>
#endif
include/asm-s390/siginfo.h
View file @
f7e837b2
...
...
@@ -9,116 +9,16 @@
#ifndef _S390_SIGINFO_H
#define _S390_SIGINFO_H
#
include <linux/types.h>
#
define HAVE_ARCH_SI_CODES
/* XXX: This structure was copied from the Alpha; is there an iBCS version? */
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
#include <asm-generic/siginfo.h>
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#undef SI_TIMER
#define SI_TIMER -2
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
...
...
@@ -177,7 +77,7 @@ typedef struct siginfo {
#define CLD_TRAPPED 4
/* traced child has trapped */
#define CLD_STOPPED 5
/* child has stopped */
#define CLD_CONTINUED 6
/* stopped child has continued */
#define NSIGCHLD
#define NSIGCHLD
6
/*
* SIGPOLL si_codes
...
...
@@ -190,52 +90,4 @@ typedef struct siginfo {
#define POLL_HUP 6
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
extern
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#endif
include/asm-s390x/errno.h
View file @
f7e837b2
...
...
@@ -2,139 +2,11 @@
* include/asm-s390/errno.h
*
* S390 version
*
* Derived from "include/asm-i386/errno.h"
*/
#ifndef _S390_ERRNO_H
#define _S390_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#define ENOMEDIUM 123
/* No medium found */
#define EMEDIUMTYPE 124
/* Wrong medium type */
#include <asm-generic/errno.h>
#endif
include/asm-s390x/siginfo.h
View file @
f7e837b2
...
...
@@ -9,116 +9,16 @@
#ifndef _S390_SIGINFO_H
#define _S390_SIGINFO_H
#
include <linux/types.h>
#
define HAVE_ARCH_SI_CODES
/* XXX: This structure was copied from the Alpha; is there an iBCS version? */
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
#include <asm-generic/siginfo.h>
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#undef SI_TIMER
#define SI_TIMER -2
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
...
...
@@ -177,7 +77,7 @@ typedef struct siginfo {
#define CLD_TRAPPED 4
/* traced child has trapped */
#define CLD_STOPPED 5
/* child has stopped */
#define CLD_CONTINUED 6
/* stopped child has continued */
#define NSIGCHLD
#define NSIGCHLD
6
/*
* SIGPOLL si_codes
...
...
@@ -190,52 +90,4 @@ typedef struct siginfo {
#define POLL_HUP 6
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
extern
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#endif
include/asm-sh/errno.h
View file @
f7e837b2
#ifndef __ASM_SH_ERRNO_H
#define __ASM_SH_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#define ENOMEDIUM 123
/* No medium found */
#define EMEDIUMTYPE 124
/* Wrong medium type */
#include <asm-generic/errno.h>
#endif
/* __ASM_SH_ERRNO_H */
include/asm-sh/siginfo.h
View file @
f7e837b2
#ifndef __ASM_SH_SIGINFO_H
#define __ASM_SH_SIGINFO_H
#include <linux/types.h>
/* XXX: This structure was copied from the Alpha; is there an iBCS version? */
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
static
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#include <asm-generic/siginfo.h>
#endif
/* __ASM_SH_SIGINFO_H */
include/asm-sparc/errno.h
View file @
f7e837b2
...
...
@@ -3,40 +3,9 @@
#define _SPARC_ERRNO_H
/* These match the SunOS error numbering scheme. */
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#include <asm-generic/errno-base.h>
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define EINPROGRESS 36
/* Operation now in progress */
#define EALREADY 37
/* Operation already in progress */
...
...
include/asm-sparc/siginfo.h
View file @
f7e837b2
...
...
@@ -5,15 +5,10 @@
#ifndef _SPARC_SIGINFO_H
#define _SPARC_SIGINFO_H
#include <linux/types.h>
#define HAVE_ARCH_SIGINFO_T
#define HAVE_ARCH_COPY_SIGINFO
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
#include <asm-generic/siginfo.h>
typedef
struct
siginfo
{
int
si_signo
;
...
...
@@ -65,128 +60,9 @@ typedef struct siginfo {
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_trapno _sifields._sigfault._trapno
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_NOINFO 32767
/* no information in siginfo_t */
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_DETHREAD -7
/* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* SIGEMT si_codes
...
...
@@ -194,35 +70,6 @@ typedef struct siginfo {
#define EMT_TAGOVF (__SI_FAULT|1)
/* tag overflow */
#define NSIGEMT 1
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#ifdef __KERNEL__
#include <linux/string.h>
...
...
@@ -236,12 +83,6 @@ extern inline void copy_siginfo(siginfo_t *to, siginfo_t *from)
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
#define HAVE_ARCH_COPY_SIGINFO_TO_USER
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#endif
/* !(_SPARC_SIGINFO_H) */
include/asm-sparc/signal.h
View file @
f7e837b2
...
...
@@ -216,6 +216,8 @@ typedef struct sigaltstack {
size_t
ss_size
;
}
stack_t
;
#define HAVE_ARCH_GET_SIGNAL_TO_DELIVER
#endif
/* !(__ASSEMBLY__) */
#endif
/* !(_ASMSPARC_SIGNAL_H) */
include/asm-sparc64/errno.h
View file @
f7e837b2
...
...
@@ -3,40 +3,9 @@
#define _SPARC64_ERRNO_H
/* These match the SunOS error numbering scheme. */
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#include <asm-generic/errno-base.h>
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define EINPROGRESS 36
/* Operation now in progress */
#define EALREADY 37
/* Operation already in progress */
...
...
include/asm-sparc64/siginfo.h
View file @
f7e837b2
#ifndef _SPARC64_SIGINFO_H
#define _SPARC64_SIGINFO_H
#include <linux/types.h>
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 4)
#define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
#define SIGEV_PAD_SIZE32 ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
#define HAVE_ARCH_SIGINFO_T
#define HAVE_ARCH_COPY_SIGINFO
#include <asm-generic/siginfo.h>
#ifdef __KERNEL__
...
...
@@ -17,10 +22,6 @@ typedef union sigval32 {
#endif
/* __KERNEL__ */
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 4)
#define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
...
...
@@ -125,128 +126,9 @@ typedef struct siginfo32 {
#endif
/* __KERNEL__ */
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_trapno _sifields._sigfault._trapno
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
*/
#define SI_NOINFO 32767
/* no information in siginfo_t */
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_DETHREAD -7
/* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* SIGEMT si_codes
...
...
@@ -254,36 +136,6 @@ typedef struct siginfo32 {
#define EMT_TAGOVF (__SI_FAULT|1)
/* tag overflow */
#define NSIGEMT 1
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
#define SIGEV_PAD_SIZE32 ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#ifdef __KERNEL__
typedef
struct
sigevent32
{
...
...
@@ -311,13 +163,8 @@ extern inline void copy_siginfo(siginfo_t *to, siginfo_t *from)
memcpy
(
to
,
from
,
4
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
#define HAVE_ARCH_COPY_SIGINFO_TO_USER
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
extern
int
copy_siginfo_to_user32
(
siginfo_t32
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#endif
include/asm-sparc64/signal.h
View file @
f7e837b2
...
...
@@ -252,6 +252,9 @@ typedef struct sigaltstack32 {
int
ss_flags
;
__kernel_size_t32
ss_size
;
}
stack_t32
;
#define HAVE_ARCH_GET_SIGNAL_TO_DELIVER
#endif
#endif
/* !(__ASSEMBLY__) */
...
...
include/asm-x86_64/errno.h
View file @
f7e837b2
#ifndef _X8664_ERRNO_H
#define _X8664_ERRNO_H
#define EPERM 1
/* Operation not permitted */
#define ENOENT 2
/* No such file or directory */
#define ESRCH 3
/* No such process */
#define EINTR 4
/* Interrupted system call */
#define EIO 5
/* I/O error */
#define ENXIO 6
/* No such device or address */
#define E2BIG 7
/* Arg list too long */
#define ENOEXEC 8
/* Exec format error */
#define EBADF 9
/* Bad file number */
#define ECHILD 10
/* No child processes */
#define EAGAIN 11
/* Try again */
#define ENOMEM 12
/* Out of memory */
#define EACCES 13
/* Permission denied */
#define EFAULT 14
/* Bad address */
#define ENOTBLK 15
/* Block device required */
#define EBUSY 16
/* Device or resource busy */
#define EEXIST 17
/* File exists */
#define EXDEV 18
/* Cross-device link */
#define ENODEV 19
/* No such device */
#define ENOTDIR 20
/* Not a directory */
#define EISDIR 21
/* Is a directory */
#define EINVAL 22
/* Invalid argument */
#define ENFILE 23
/* File table overflow */
#define EMFILE 24
/* Too many open files */
#define ENOTTY 25
/* Not a typewriter */
#define ETXTBSY 26
/* Text file busy */
#define EFBIG 27
/* File too large */
#define ENOSPC 28
/* No space left on device */
#define ESPIPE 29
/* Illegal seek */
#define EROFS 30
/* Read-only file system */
#define EMLINK 31
/* Too many links */
#define EPIPE 32
/* Broken pipe */
#define EDOM 33
/* Math argument out of domain of func */
#define ERANGE 34
/* Math result not representable */
#define EDEADLK 35
/* Resource deadlock would occur */
#define ENAMETOOLONG 36
/* File name too long */
#define ENOLCK 37
/* No record locks available */
#define ENOSYS 38
/* Function not implemented */
#define ENOTEMPTY 39
/* Directory not empty */
#define ELOOP 40
/* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN
/* Operation would block */
#define ENOMSG 42
/* No message of desired type */
#define EIDRM 43
/* Identifier removed */
#define ECHRNG 44
/* Channel number out of range */
#define EL2NSYNC 45
/* Level 2 not synchronized */
#define EL3HLT 46
/* Level 3 halted */
#define EL3RST 47
/* Level 3 reset */
#define ELNRNG 48
/* Link number out of range */
#define EUNATCH 49
/* Protocol driver not attached */
#define ENOCSI 50
/* No CSI structure available */
#define EL2HLT 51
/* Level 2 halted */
#define EBADE 52
/* Invalid exchange */
#define EBADR 53
/* Invalid request descriptor */
#define EXFULL 54
/* Exchange full */
#define ENOANO 55
/* No anode */
#define EBADRQC 56
/* Invalid request code */
#define EBADSLT 57
/* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59
/* Bad font file format */
#define ENOSTR 60
/* Device not a stream */
#define ENODATA 61
/* No data available */
#define ETIME 62
/* Timer expired */
#define ENOSR 63
/* Out of streams resources */
#define ENONET 64
/* Machine is not on the network */
#define ENOPKG 65
/* Package not installed */
#define EREMOTE 66
/* Object is remote */
#define ENOLINK 67
/* Link has been severed */
#define EADV 68
/* Advertise error */
#define ESRMNT 69
/* Srmount error */
#define ECOMM 70
/* Communication error on send */
#define EPROTO 71
/* Protocol error */
#define EMULTIHOP 72
/* Multihop attempted */
#define EDOTDOT 73
/* RFS specific error */
#define EBADMSG 74
/* Not a data message */
#define EOVERFLOW 75
/* Value too large for defined data type */
#define ENOTUNIQ 76
/* Name not unique on network */
#define EBADFD 77
/* File descriptor in bad state */
#define EREMCHG 78
/* Remote address changed */
#define ELIBACC 79
/* Can not access a needed shared library */
#define ELIBBAD 80
/* Accessing a corrupted shared library */
#define ELIBSCN 81
/* .lib section in a.out corrupted */
#define ELIBMAX 82
/* Attempting to link in too many shared libraries */
#define ELIBEXEC 83
/* Cannot exec a shared library directly */
#define EILSEQ 84
/* Illegal byte sequence */
#define ERESTART 85
/* Interrupted system call should be restarted */
#define ESTRPIPE 86
/* Streams pipe error */
#define EUSERS 87
/* Too many users */
#define ENOTSOCK 88
/* Socket operation on non-socket */
#define EDESTADDRREQ 89
/* Destination address required */
#define EMSGSIZE 90
/* Message too long */
#define EPROTOTYPE 91
/* Protocol wrong type for socket */
#define ENOPROTOOPT 92
/* Protocol not available */
#define EPROTONOSUPPORT 93
/* Protocol not supported */
#define ESOCKTNOSUPPORT 94
/* Socket type not supported */
#define EOPNOTSUPP 95
/* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96
/* Protocol family not supported */
#define EAFNOSUPPORT 97
/* Address family not supported by protocol */
#define EADDRINUSE 98
/* Address already in use */
#define EADDRNOTAVAIL 99
/* Cannot assign requested address */
#define ENETDOWN 100
/* Network is down */
#define ENETUNREACH 101
/* Network is unreachable */
#define ENETRESET 102
/* Network dropped connection because of reset */
#define ECONNABORTED 103
/* Software caused connection abort */
#define ECONNRESET 104
/* Connection reset by peer */
#define ENOBUFS 105
/* No buffer space available */
#define EISCONN 106
/* Transport endpoint is already connected */
#define ENOTCONN 107
/* Transport endpoint is not connected */
#define ESHUTDOWN 108
/* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109
/* Too many references: cannot splice */
#define ETIMEDOUT 110
/* Connection timed out */
#define ECONNREFUSED 111
/* Connection refused */
#define EHOSTDOWN 112
/* Host is down */
#define EHOSTUNREACH 113
/* No route to host */
#define EALREADY 114
/* Operation already in progress */
#define EINPROGRESS 115
/* Operation now in progress */
#define ESTALE 116
/* Stale NFS file handle */
#define EUCLEAN 117
/* Structure needs cleaning */
#define ENOTNAM 118
/* Not a XENIX named type file */
#define ENAVAIL 119
/* No XENIX semaphores available */
#define EISNAM 120
/* Is a named type file */
#define EREMOTEIO 121
/* Remote I/O error */
#define EDQUOT 122
/* Quota exceeded */
#define ENOMEDIUM 123
/* No medium found */
#define EMEDIUMTYPE 124
/* Wrong medium type */
#include <asm-generic/errno.h>
#endif
include/asm-x86_64/siginfo.h
View file @
f7e837b2
#ifndef _X8664_SIGINFO_H
#define _X8664_SIGINFO_H
#include <linux/types.h>
typedef
union
sigval
{
int
sival_int
;
void
*
sival_ptr
;
}
sigval_t
;
#define SI_MAX_SIZE 128
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[
SI_PAD_SIZE
];
/* kill() */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
unsigned
int
_timer1
;
unsigned
int
_timer2
;
}
_timer
;
/* POSIX.1b signals */
struct
{
pid_t
_pid
;
/* sender's pid */
uid_t
_uid
;
/* sender's uid */
sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
pid_t
_pid
;
/* which child */
uid_t
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
clock_t
_utime
;
clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
void
*
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
siginfo_t
;
/*
* How these fields are to be accessed.
*/
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_status _sifields._sigchld._status
#define si_utime _sifields._sigchld._utime
#define si_stime _sifields._sigchld._stime
#define si_value _sifields._rt._sigval
#define si_int _sifields._rt._sigval.sival_int
#define si_ptr _sifields._rt._sigval.sival_ptr
#define si_addr _sifields._sigfault._addr
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
#ifdef __KERNEL__
#define __SI_MASK 0xffff0000
#define __SI_KILL (0 << 16)
#define __SI_TIMER (1 << 16)
#define __SI_POLL (2 << 16)
#define __SI_FAULT (3 << 16)
#define __SI_CHLD (4 << 16)
#define __SI_RT (5 << 16)
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff))
#else
#define __SI_KILL 0
#define __SI_TIMER 0
#define __SI_POLL 0
#define __SI_FAULT 0
#define __SI_CHLD 0
#define __SI_RT 0
#define __SI_CODE(T,N) (N)
#endif
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
* ... And Linux ignores that convention -AK.
*/
#define SI_USER 0
/* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80
/* sent by the kernel from somewhere */
#define SI_QUEUE -1
/* sent by sigqueue */
#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
/* sent by timer expiration */
#define SI_MESGQ -3
/* sent by real time mesq state change */
#define SI_ASYNCIO -4
/* sent by AIO completion */
#define SI_SIGIO -5
/* sent by queued SIGIO */
#define SI_TKILL -6
/* sent by tkill system call */
#define SI_DETHREAD -7
/* sent by execve() killing subsidiary thread */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
/*
* SIGILL si_codes
*/
#define ILL_ILLOPC (__SI_FAULT|1)
/* illegal opcode */
#define ILL_ILLOPN (__SI_FAULT|2)
/* illegal operand */
#define ILL_ILLADR (__SI_FAULT|3)
/* illegal addressing mode */
#define ILL_ILLTRP (__SI_FAULT|4)
/* illegal trap */
#define ILL_PRVOPC (__SI_FAULT|5)
/* privileged opcode */
#define ILL_PRVREG (__SI_FAULT|6)
/* privileged register */
#define ILL_COPROC (__SI_FAULT|7)
/* coprocessor error */
#define ILL_BADSTK (__SI_FAULT|8)
/* internal stack error */
#define NSIGILL 8
/*
* SIGFPE si_codes
*/
#define FPE_INTDIV (__SI_FAULT|1)
/* integer divide by zero */
#define FPE_INTOVF (__SI_FAULT|2)
/* integer overflow */
#define FPE_FLTDIV (__SI_FAULT|3)
/* floating point divide by zero */
#define FPE_FLTOVF (__SI_FAULT|4)
/* floating point overflow */
#define FPE_FLTUND (__SI_FAULT|5)
/* floating point underflow */
#define FPE_FLTRES (__SI_FAULT|6)
/* floating point inexact result */
#define FPE_FLTINV (__SI_FAULT|7)
/* floating point invalid operation */
#define FPE_FLTSUB (__SI_FAULT|8)
/* subscript out of range */
#define NSIGFPE 8
/*
* SIGSEGV si_codes
*/
#define SEGV_MAPERR (__SI_FAULT|1)
/* address not mapped to object */
#define SEGV_ACCERR (__SI_FAULT|2)
/* invalid permissions for mapped object */
#define NSIGSEGV 2
/*
* SIGBUS si_codes
*/
#define BUS_ADRALN (__SI_FAULT|1)
/* invalid address alignment */
#define BUS_ADRERR (__SI_FAULT|2)
/* non-existant physical address */
#define BUS_OBJERR (__SI_FAULT|3)
/* object specific hardware error */
#define NSIGBUS 3
/*
* SIGTRAP si_codes
*/
#define TRAP_BRKPT (__SI_FAULT|1)
/* process breakpoint */
#define TRAP_TRACE (__SI_FAULT|2)
/* process trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD si_codes
*/
#define CLD_EXITED (__SI_CHLD|1)
/* child has exited */
#define CLD_KILLED (__SI_CHLD|2)
/* child was killed */
#define CLD_DUMPED (__SI_CHLD|3)
/* child terminated abnormally */
#define CLD_TRAPPED (__SI_CHLD|4)
/* traced child has trapped */
#define CLD_STOPPED (__SI_CHLD|5)
/* child has stopped */
#define CLD_CONTINUED (__SI_CHLD|6)
/* stopped child has continued */
#define NSIGCHLD 6
/*
* SIGPOLL si_codes
*/
#define POLL_IN (__SI_POLL|1)
/* data input available */
#define POLL_OUT (__SI_POLL|2)
/* output buffers available */
#define POLL_MSG (__SI_POLL|3)
/* input message available */
#define POLL_ERR (__SI_POLL|4)
/* i/o error */
#define POLL_PRI (__SI_POLL|5)
/* high priority input available */
#define POLL_HUP (__SI_POLL|6)
/* device disconnected */
#define NSIGPOLL 6
/*
* sigevent definitions
*
* It seems likely that SIGEV_THREAD will have to be handled from
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
* thread manager then catches and does the appropriate nonsense.
* However, everything is written out here so as to not get lost.
*/
#define SIGEV_SIGNAL 0
/* notify via signal */
#define SIGEV_NONE 1
/* other notification: meaningless */
#define SIGEV_THREAD 2
/* deliver via thread creation */
#define SIGEV_MAX_SIZE 64
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
typedef
struct
sigevent
{
sigval_t
sigev_value
;
int
sigev_signo
;
int
sigev_notify
;
union
{
int
_pad
[
SIGEV_PAD_SIZE
];
struct
{
void
(
*
_function
)(
sigval_t
);
void
*
_attribute
;
/* really pthread_attr_t */
}
_sigev_thread
;
}
_sigev_un
;
}
sigevent_t
;
#define sigev_notify_function _sigev_un._sigev_thread._function
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
#ifdef __KERNEL__
#include <linux/string.h>
extern
inline
void
copy_siginfo
(
siginfo_t
*
to
,
siginfo_t
*
from
)
{
if
(
from
->
si_code
<
0
)
memcpy
(
to
,
from
,
sizeof
(
siginfo_t
));
else
/* _sigchld is currently the largest know union member */
memcpy
(
to
,
from
,
3
*
sizeof
(
int
)
+
sizeof
(
from
->
_sifields
.
_sigchld
));
}
extern
int
copy_siginfo_to_user
(
siginfo_t
*
to
,
siginfo_t
*
from
);
#endif
/* __KERNEL__ */
#include <asm-generic/siginfo.h>
#endif
include/linux/signal.h
View file @
f7e837b2
...
...
@@ -220,6 +220,10 @@ static inline void init_sigpending(struct sigpending *sig)
extern
long
do_sigpending
(
void
*
,
unsigned
long
);
#ifndef HAVE_ARCH_GET_SIGNAL_TO_DELIVER
extern
int
get_signal_to_deliver
(
siginfo_t
*
info
,
struct
pt_regs
*
regs
);
#endif
#endif
/* __KERNEL__ */
#endif
/* _LINUX_SIGNAL_H */
kernel/signal.c
View file @
f7e837b2
...
...
@@ -14,6 +14,8 @@
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/tty.h>
#include <linux/binfmts.h>
#include <asm/uaccess.h>
#include <asm/siginfo.h>
...
...
@@ -825,6 +827,110 @@ notify_parent(struct task_struct *tsk, int sig)
read_unlock
(
&
tasklist_lock
);
}
#ifndef HAVE_ARCH_GET_SIGNAL_TO_DELIVER
int
get_signal_to_deliver
(
siginfo_t
*
info
,
struct
pt_regs
*
regs
)
{
for
(;;)
{
unsigned
long
signr
;
struct
k_sigaction
*
ka
;
spin_lock_irq
(
&
current
->
sigmask_lock
);
signr
=
dequeue_signal
(
&
current
->
blocked
,
info
);
spin_unlock_irq
(
&
current
->
sigmask_lock
);
if
(
!
signr
)
break
;
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
set_current_state
(
TASK_STOPPED
);
notify_parent
(
current
,
SIGCHLD
);
schedule
();
/* We're back. Did the debugger cancel the sig? */
signr
=
current
->
exit_code
;
if
(
signr
==
0
)
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
->
si_signo
)
{
info
->
si_signo
=
signr
;
info
->
si_errno
=
0
;
info
->
si_code
=
SI_USER
;
info
->
si_pid
=
current
->
parent
->
pid
;
info
->
si_uid
=
current
->
parent
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
case
SIGURG
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
{
struct
signal_struct
*
sig
;
set_current_state
(
TASK_STOPPED
);
current
->
exit_code
=
signr
;
sig
=
current
->
parent
->
sig
;
if
(
sig
&&
!
(
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
continue
;
}
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
info
);
/* NOTREACHED */
}
}
return
signr
;
}
return
0
;
}
#endif
EXPORT_SYMBOL
(
dequeue_signal
);
EXPORT_SYMBOL
(
flush_signals
);
EXPORT_SYMBOL
(
force_sig
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment