AC_CHECK_MEMBERS([struct utsname.domainname],,, [#include <sys/utsname.h>])
AC_CHECK_MEMBERS([struct sigevent._sigev_un._pad,
- struct sigevent.__pad],,, [#include <signal.h>])
+ struct sigevent.__pad,
+ siginfo_t.si_syscall],,, [#include <signal.h>])
AC_CHECK_TYPES([struct flock64],,, [#include <fcntl.h>])
#define BUS_ADRALN 1 /* invalid address alignment */
#define BUS_ADRERR 2 /* non-existant physical address */
#define BUS_OBJERR 3 /* object specific hardware error */
+#define SYS_SECCOMP 1 /* seccomp triggered */
#define TRAP_BRKPT 1 /* process breakpoint */
#define TRAP_TRACE 2 /* process trace trap */
#define CLD_EXITED 1 /* child has exited */
XLAT_END
};
+#ifndef SYS_SECCOMP
+# define SYS_SECCOMP 1
+#endif
+static const struct xlat sigsys_codes[] = {
+ XLAT(SYS_SECCOMP),
+ XLAT_END
+};
+
static void
printsigsource(const siginfo_t *sip)
{
case SIGBUS:
code = xlookup(sigbus_codes, sip->si_code);
break;
+ case SIGSYS:
+ code = xlookup(sigsys_codes, sip->si_code);
+ break;
}
}
if (code)
break;
}
break;
+#ifdef HAVE_SIGINFO_T_SI_SYSCALL
+ case SIGSYS:
+ tprintf(", si_call_addr=%#lx, si_syscall=%d, si_arch=%u",
+ (unsigned long) sip->si_call_addr,
+ sip->si_syscall, sip->si_arch);
+ break;
+#endif
default:
if (sip->si_pid || sip->si_uid)
printsigsource(sip);