Commit d00d9203 authored by Amanieu d'Antras's avatar Amanieu d'Antras Committed by Ralf Baechle
Browse files

MIPS: Clean up compat_siginfo_t



While mips can't use the generic compat_siginfo_t directly because
its si_code and si_errno are inverted, we can still make it as
close to the generic version as possible. This makes it easier
to update when new members are added to siginfo_t.

The main changes are adding a missing _sigsys union member and
eliminating the unused _irix_sigchld one.

Signed-off-by: default avatarAmanieu d'Antras <amanieu@gmail.com>
Cc: linux-kernel@vger.kernel.org
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/11455/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 22b14523
Loading
Loading
Loading
Loading
+34 −28
Original line number Diff line number Diff line
@@ -130,6 +130,8 @@ typedef union compat_sigval {
	compat_uptr_t	sival_ptr;
} compat_sigval_t;

/* Can't use the generic version because si_code and si_errno are swapped */

#define SI_PAD_SIZE32	(128/sizeof(int) - 3)

typedef struct compat_siginfo {
@@ -138,57 +140,61 @@ typedef struct compat_siginfo {
	int si_errno;

	union {
		int _pad[SI_PAD_SIZE32];
		int _pad[128 / sizeof(int) - 3];

		/* kill() */
		struct {
			compat_pid_t _pid;	/* sender's pid */
			__compat_uid_t _uid;	/* sender's uid */
			__compat_uid32_t _uid;	/* sender's uid */
		} _kill;

		/* POSIX.1b timers */
		struct {
			compat_timer_t _tid;	/* timer id */
			int _overrun;		/* overrun count */
			compat_sigval_t _sigval;	/* same as below */
		} _timer;

		/* POSIX.1b signals */
		struct {
			compat_pid_t _pid;	/* sender's pid */
			__compat_uid32_t _uid;	/* sender's uid */
			compat_sigval_t _sigval;
		} _rt;

		/* SIGCHLD */
		struct {
			compat_pid_t _pid;	/* which child */
			__compat_uid_t _uid;	/* sender's uid */
			__compat_uid32_t _uid;	/* sender's uid */
			int _status;		/* exit code */
			compat_clock_t _utime;
			compat_clock_t _stime;
		} _sigchld;

		/* IRIX SIGCHLD */
		struct {
			compat_pid_t _pid;	/* which child */
			compat_clock_t _utime;
			int _status;		/* exit code */
			compat_clock_t _stime;
		} _irix_sigchld;

		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
		struct {
			s32 _addr; /* faulting insn/memory ref. */
			compat_uptr_t _addr;	/* faulting insn/memory ref. */
#ifdef __ARCH_SI_TRAPNO
			int _trapno;	/* TRAP # which caused the signal */
#endif
			short _addr_lsb; /* LSB of the reported address */
			struct {
				compat_uptr_t _lower;
				compat_uptr_t _upper;
			} _addr_bnd;
		} _sigfault;

		/* SIGPOLL, SIGXFSZ (To do ...)	 */
		/* SIGPOLL */
		struct {
			int _band;	/* POLL_IN, POLL_OUT, POLL_MSG */
			compat_long_t _band; /* POLL_IN, POLL_OUT, POLL_MSG */
			int _fd;
		} _sigpoll;

		/* POSIX.1b timers */
		struct {
			timer_t _tid;		/* timer id */
			int _overrun;		/* overrun count */
			compat_sigval_t _sigval;/* same as below */
			int _sys_private;	/* not to be passed to user */
		} _timer;

		/* POSIX.1b signals */
		struct {
			compat_pid_t _pid;	/* sender's pid */
			__compat_uid_t _uid;	/* sender's uid */
			compat_sigval_t _sigval;
		} _rt;

			compat_uptr_t _call_addr; /* calling insn */
			int _syscall;	/* triggering system call number */
			compat_uint_t _arch;	/* AUDIT_ARCH_* of syscall */
		} _sigsys;
	} _sifields;
} compat_siginfo_t;