PageRenderTime 23ms CodeModel.GetById 10ms app.highlight 9ms RepoModel.GetById 0ms app.codeStats 0ms

/arch/mips/include/asm/siginfo.h

https://bitbucket.org/cresqo/cm7-p500-kernel
C Header | 130 lines | 79 code | 21 blank | 30 comment | 1 complexity | 5ea8b0e595d68cae410d9985c3786fb4 MD5 | raw file
Possible License(s): LGPL-2.0, AGPL-1.0, GPL-2.0
  1/*
  2 * This file is subject to the terms and conditions of the GNU General Public
  3 * License.  See the file "COPYING" in the main directory of this archive
  4 * for more details.
  5 *
  6 * Copyright (C) 1998, 1999, 2001, 2003 Ralf Baechle
  7 * Copyright (C) 2000, 2001 Silicon Graphics, Inc.
  8 */
  9#ifndef _ASM_SIGINFO_H
 10#define _ASM_SIGINFO_H
 11
 12
 13#define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(long) + 2*sizeof(int))
 14#undef __ARCH_SI_TRAPNO	/* exception code needs to fill this ...  */
 15
 16#define HAVE_ARCH_SIGINFO_T
 17
 18/*
 19 * We duplicate the generic versions - <asm-generic/siginfo.h> is just borked
 20 * by design ...
 21 */
 22#define HAVE_ARCH_COPY_SIGINFO
 23struct siginfo;
 24
 25/*
 26 * Careful to keep union _sifields from shifting ...
 27 */
 28#ifdef CONFIG_32BIT
 29#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
 30#endif
 31#ifdef CONFIG_64BIT
 32#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
 33#endif
 34
 35#include <asm-generic/siginfo.h>
 36
 37typedef struct siginfo {
 38	int si_signo;
 39	int si_code;
 40	int si_errno;
 41	int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3];
 42
 43	union {
 44		int _pad[SI_PAD_SIZE];
 45
 46		/* kill() */
 47		struct {
 48			pid_t _pid;		/* sender's pid */
 49			__ARCH_SI_UID_T _uid;	/* sender's uid */
 50		} _kill;
 51
 52		/* POSIX.1b timers */
 53		struct {
 54			timer_t _tid;		/* timer id */
 55			int _overrun;		/* overrun count */
 56			char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
 57			sigval_t _sigval;	/* same as below */
 58			int _sys_private;       /* not to be passed to user */
 59		} _timer;
 60
 61		/* POSIX.1b signals */
 62		struct {
 63			pid_t _pid;		/* sender's pid */
 64			__ARCH_SI_UID_T _uid;	/* sender's uid */
 65			sigval_t _sigval;
 66		} _rt;
 67
 68		/* SIGCHLD */
 69		struct {
 70			pid_t _pid;		/* which child */
 71			__ARCH_SI_UID_T _uid;	/* sender's uid */
 72			int _status;		/* exit code */
 73			clock_t _utime;
 74			clock_t _stime;
 75		} _sigchld;
 76
 77		/* IRIX SIGCHLD */
 78		struct {
 79			pid_t _pid;		/* which child */
 80			clock_t _utime;
 81			int _status;		/* exit code */
 82			clock_t _stime;
 83		} _irix_sigchld;
 84
 85		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
 86		struct {
 87			void __user *_addr; /* faulting insn/memory ref. */
 88#ifdef __ARCH_SI_TRAPNO
 89			int _trapno;	/* TRAP # which caused the signal */
 90#endif
 91		} _sigfault;
 92
 93		/* SIGPOLL, SIGXFSZ (To do ...)  */
 94		struct {
 95			__ARCH_SI_BAND_T _band;	/* POLL_IN, POLL_OUT, POLL_MSG */
 96			int _fd;
 97		} _sigpoll;
 98	} _sifields;
 99} siginfo_t;
100
101/*
102 * si_code values
103 * Again these have been choosen to be IRIX compatible.
104 */
105#undef SI_ASYNCIO
106#undef SI_TIMER
107#undef SI_MESGQ
108#define SI_ASYNCIO	-2	/* sent by AIO completion */
109#define SI_TIMER __SI_CODE(__SI_TIMER, -3) /* sent by timer expiration */
110#define SI_MESGQ __SI_CODE(__SI_MESGQ, -4) /* sent by real time mesq state change */
111
112#ifdef __KERNEL__
113
114/*
115 * Duplicated here because of <asm-generic/siginfo.h> braindamage ...
116 */
117#include <linux/string.h>
118
119static inline void copy_siginfo(struct siginfo *to, struct siginfo *from)
120{
121	if (from->si_code < 0)
122		memcpy(to, from, sizeof(*to));
123	else
124		/* _sigchld is currently the largest know union member */
125		memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld));
126}
127
128#endif
129
130#endif /* _ASM_SIGINFO_H */