diff --git a/sys/compat/linux/linux_siginfo.h b/sys/compat/linux/linux_siginfo.h
index eb9120a0208a..b0c70e1b745e 100644
--- a/sys/compat/linux/linux_siginfo.h
+++ b/sys/compat/linux/linux_siginfo.h
@@ -1,125 +1,236 @@
 /*-
  * SPDX-License-Identifier: BSD-3-Clause
  *
  * Copyright (c) 2004 Tim J. Robbins
  * Copyright (c) 2001 Doug Rabson
  * Copyright (c) 1994-1996 Søren Schmidt
  * All rights reserved.
  * Copyright (c) 2022 Dmitry Chagin <dchagin@FreeBSD.org>
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer
  *    in this position and unchanged.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
  * 3. The name of the author may not be used to endorse or promote products
  *    derived from this software without specific prior written permission
  *
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD$
  */
 
 #ifndef _LINUX_SIGINFO_H_
 #define _LINUX_SIGINFO_H_
 
 /*
  * si_code values
  */
 #define	LINUX_SI_USER		0	/* sent by kill, sigsend, raise */
 #define	LINUX_SI_KERNEL		0x80	/* sent by the kernel from somewhere */
 #define	LINUX_SI_QUEUE		-1	/* sent by sigqueue */
 #define	LINUX_SI_TIMER		-2	/* sent by timer expiration */
 #define	LINUX_SI_MESGQ		-3	/* sent by real time mesq state change */
 #define	LINUX_SI_ASYNCIO	-4	/* sent by AIO completion */
 #define	LINUX_SI_SIGIO		-5	/* sent by queued SIGIO */
 #define	LINUX_SI_TKILL		-6	/* sent by tkill system call */
 
+/*
+ * SIGILL si_codes
+ */
+#define	LINUX_ILL_ILLOPC	1	/* illegal opcode */
+#define	LINUX_ILL_ILLOPN	2	/* illegal operand */
+#define	LINUX_ILL_ILLADR	3	/* illegal addressing mode */
+#define	LINUX_ILL_ILLTRP	4	/* illegal trap */
+#define	LINUX_ILL_PRVOPC	5	/* privileged opcode */
+#define	LINUX_ILL_PRVREG	6	/* privileged register */
+#define	LINUX_ILL_COPROC	7	/* coprocessor error */
+#define	LINUX_ILL_BADSTK	8	/* internal stack error */
+#define	LINUX_ILL_BADIADDR	9	/* unimplemented instruction address */
+#define	LINUX___ILL_BREAK	10	/* (ia64) illegal break */
+#define	LINUX___ILL_BNDMOD	11	/* (ia64) bundle-update (modification)
+					 * in progress
+					 */
+
+/*
+ * SIGFPE si_codes
+ */
+#define	LINUX_FPE_INTDIV	1	/* integer divide by zero */
+#define	LINUX_FPE_INTOVF	2	/* integer overflow */
+#define	LINUX_FPE_FLTDIV	3	/* floating point divide by zero */
+#define	LINUX_FPE_FLTOVF	4	/* floating point overflow */
+#define	LINUX_FPE_FLTUND	5	/* floating point underflow */
+#define	LINUX_FPE_FLTRES	6	/* floating point inexact result */
+#define	LINUX_FPE_FLTINV	7	/* floating point invalid operation */
+#define	LINUX_FPE_FLTSUB	8	/* (ia64) subscript out of range */
+#define	LINUX___FPE_DECOVF	9	/* (ia64) decimal overflow */
+#define	LINUX___FPE_DECDIV	10	/* (ia64) decimal division by zero */
+#define	LINUX___FPE_DECERR	11	/* (ia64) packed decimal error */
+#define	LINUX___FPE_INVASC	12	/* (ia64) invalid ASCII digit */
+#define	LINUX___FPE_INVDEC	13	/* (ia64) invalid decimal digit */
+#define	LINUX_FPE_FLTUNK	14	/* undiagnosed floating-point exception */
+#define	LINUX_FPE_CONDTRAP	15	/* trap on condition */
+
+/*
+ * SIGSEGV si_codes
+ */
+#define	LINUX_SEGV_MAPERR	1	/* address not mapped to object */
+#define	LINUX_SEGV_ACCERR	2	/* invalid permissions for mapped object */
+#define	LINUX_SEGV_BNDERR	3	/* failed address bound checks */
+#ifdef __ia64__
+#define	LINUX___SEGV_PSTKOVF	4	/* paragraph stack overflow */
+#else
+#define	LINUX_SEGV_PKUERR	4	/* failed protection key checks */
+#endif
+#define	LINUX_SEGV_ACCADI	5	/* ADI not enabled for mapped object */
+#define	LINUX_SEGV_ADIDERR	6	/* Disrupting MCD error */
+#define	LINUX_SEGV_ADIPERR	7	/* Precise MCD exception */
+#define	LINUX_SEGV_MTEAERR	8	/* Asynchronous ARM MTE error */
+#define	LINUX_SEGV_MTESERR	9	/* Synchronous ARM MTE exception */
+
+/*
+ * SIGBUS si_codes
+ */
+#define	LINUX_BUS_ADRALN	1	/* invalid address alignment */
+#define	LINUX_BUS_ADRERR	2	/* non-existent physical address */
+#define	LINUX_BUS_OBJERR	3	/* object specific hardware error */
+
+#define	LINUX_BUS_MCEERR_AR	4	/* hardware memory error consumed
+					 * on a machine check:
+					 * action required
+					 */
+#define	LINUX_BUS_MCEERR_AO	5	/* hardware memory error detected
+					 * in process but not consumed:
+					 * action optional
+					 */
+
+/*
+ * SIGTRAP si_codes
+ */
+#define	LINUX_TRAP_BRKPT	1	/* process breakpoint */
+#define	LINUX_TRAP_TRACE	2	/* process trace trap */
+#define	LINUX_TRAP_BRANCH	3	/* process taken branch trap */
+#define	LINUX_TRAP_HWBKPT	4	/* hardware breakpoint/watchpoint */
+#define	LINUX_TRAP_UNK		5	/* undiagnosed trap */
+#define	LINUX_TRAP_PERF		6	/* perf event with sigtrap=1 */
+
+/*
+ * SIGCHLD si_codes
+ */
+#define	LINUX_CLD_EXITED	1	/* child has exited */
+#define	LINUX_CLD_KILLED	2	/* child was killed */
+#define	LINUX_CLD_DUMPED	3	/* child terminated abnormally */
+#define	LINUX_CLD_TRAPPED	4	/* traced child has trapped */
+#define	LINUX_CLD_STOPPED	5	/* child has stopped */
+#define	LINUX_CLD_CONTINUED	6	/* stopped child has continued */
+
+/*
+ * SIGPOLL (or any other signal without signal specific si_codes) si_codes
+ */
+#define	LINUX_POLL_IN		1	/* data input available */
+#define	LINUX_POLL_OUT		2	/* output buffers available */
+#define	LINUX_POLL_MSG		3	/* input message available */
+#define	LINUX_POLL_ERR		4	/* i/o error */
+#define	LINUX_POLL_PRI		5	/* high priority input available */
+#define	LINUX_POLL_HUP		6	/* device disconnected */
+
+/*
+ * SIGSYS si_codes
+ */
+#define	LINUX_SYS_SECCOMP	1	/* seccomp triggered */
+#define	LINUX_SYS_USER_DISPATCH	2	/* syscall user dispatch triggered */
+
+/*
+ * SIGEMT si_codes
+ */
+#define	LINUX_EMT_TAGOVF	1	/* tag overflow */
+
 typedef union l_sigval {
 	l_int		sival_int;
 	l_uintptr_t	sival_ptr;
 } l_sigval_t;
 
 #define	LINUX_SI_MAX_SIZE		128
 
 union __sifields {
 	struct {
 		l_pid_t		_pid;
 		l_uid_t		_uid;
 	} _kill;
 
 	struct {
 		l_timer_t	_tid;
 		l_int		_overrun;
 		char		_pad[sizeof(l_uid_t) - sizeof(int)];
 		union l_sigval	_sigval;
 		l_uint		_sys_private;
 	} _timer;
 
 	struct {
 		l_pid_t		_pid;		/* sender's pid */
 		l_uid_t		_uid;		/* sender's uid */
 		union l_sigval	_sigval;
 	} _rt;
 
 	struct {
 		l_pid_t		_pid;		/* which child */
 		l_uid_t		_uid;		/* sender's uid */
 		l_int		_status;	/* exit code */
 		l_clock_t	_utime;
 		l_clock_t	_stime;
 	} _sigchld;
 
 	struct {
 		l_uintptr_t	_addr;	/* Faulting insn/memory ref. */
 	} _sigfault;
 
 	struct {
 		l_long		_band;	/* POLL_IN,POLL_OUT,POLL_MSG */
 		l_int		_fd;
 	} _sigpoll;
 };
 
 typedef struct l_siginfo {
 	union {
 		struct {
 			l_int		lsi_signo;
 			l_int		lsi_errno;
 			l_int		lsi_code;
 			union __sifields _sifields;
 		};
 		l_int	_pad[LINUX_SI_MAX_SIZE/sizeof(l_int)];
 	};
 } l_siginfo_t;
 
 _Static_assert(sizeof(l_siginfo_t) == LINUX_SI_MAX_SIZE, "l_siginfo_t size");
 
 #define	lsi_pid		_sifields._kill._pid
 #define	lsi_uid		_sifields._kill._uid
 #define	lsi_tid		_sifields._timer._tid
 #define	lsi_overrun	_sifields._timer._overrun
 #define	lsi_sys_private	_sifields._timer._sys_private
 #define	lsi_status	_sifields._sigchld._status
 #define	lsi_utime	_sifields._sigchld._utime
 #define	lsi_stime	_sifields._sigchld._stime
 #define	lsi_value	_sifields._rt._sigval
 #define	lsi_int		_sifields._rt._sigval.sival_int
 #define	lsi_ptr		_sifields._rt._sigval.sival_ptr
 #define	lsi_addr	_sifields._sigfault._addr
 #define	lsi_band	_sifields._sigpoll._band
 #define	lsi_fd		_sifields._sigpoll._fd
 
 #endif /* _LINUX_SIGINFO_H_ */
+