-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
m68k: Switch to generic siginfo layout
This patch switches m68k to generic siginfo layout. The custom layout of m68k's `struct siginfo' had several issues due to not considering aliasing of members in the union, e.g., _uid32 was at different offsets in ._kill, ._rt and ._sigchld. Signed-off-by: Maxim Kuvyrkov <[email protected]> Signed-off-by: Geert Uytterhoeven <[email protected]>
- Loading branch information
Showing
1 changed file
with
0 additions
and
91 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,97 +1,6 @@ | ||
#ifndef _M68K_SIGINFO_H | ||
#define _M68K_SIGINFO_H | ||
|
||
#ifndef __uClinux__ | ||
#define HAVE_ARCH_SIGINFO_T | ||
#define HAVE_ARCH_COPY_SIGINFO | ||
#endif | ||
|
||
#include <asm-generic/siginfo.h> | ||
|
||
#ifndef __uClinux__ | ||
|
||
typedef struct siginfo { | ||
int si_signo; | ||
int si_errno; | ||
int si_code; | ||
|
||
union { | ||
int _pad[SI_PAD_SIZE]; | ||
|
||
/* kill() */ | ||
struct { | ||
__kernel_pid_t _pid; /* sender's pid */ | ||
__kernel_uid_t _uid; /* backwards compatibility */ | ||
__kernel_uid32_t _uid32; /* sender's uid */ | ||
} _kill; | ||
|
||
/* POSIX.1b timers */ | ||
struct { | ||
timer_t _tid; /* timer id */ | ||
int _overrun; /* overrun count */ | ||
char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)]; | ||
sigval_t _sigval; /* same as below */ | ||
int _sys_private; /* not to be passed to user */ | ||
} _timer; | ||
|
||
/* POSIX.1b signals */ | ||
struct { | ||
__kernel_pid_t _pid; /* sender's pid */ | ||
__kernel_uid_t _uid; /* backwards compatibility */ | ||
sigval_t _sigval; | ||
__kernel_uid32_t _uid32; /* sender's uid */ | ||
} _rt; | ||
|
||
/* SIGCHLD */ | ||
struct { | ||
__kernel_pid_t _pid; /* which child */ | ||
__kernel_uid_t _uid; /* backwards compatibility */ | ||
int _status; /* exit code */ | ||
clock_t _utime; | ||
clock_t _stime; | ||
__kernel_uid32_t _uid32; /* sender's uid */ | ||
} _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; | ||
|
||
#define UID16_SIGINFO_COMPAT_NEEDED | ||
|
||
/* | ||
* How these fields are to be accessed. | ||
*/ | ||
#undef si_uid | ||
#ifdef __KERNEL__ | ||
#define si_uid _sifields._kill._uid32 | ||
#define si_uid16 _sifields._kill._uid | ||
#else | ||
#define si_uid _sifields._kill._uid | ||
#endif | ||
|
||
#ifdef __KERNEL__ | ||
|
||
#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 /* __KERNEL__ */ | ||
#endif /* !__uClinux__ */ | ||
|
||
#endif |