blob: ea70424893316514f8357bca4b64cbe4881169e9 [file] [log] [blame]
/* -*- Mode: C; tab-width: 8; c-basic-offset: 2; indent-tabs-mode: nil; -*- */
#include "util.h"
static void fault_handler(__attribute__((unused)) int sig,
__attribute__((unused)) siginfo_t* si,
__attribute__((unused)) void* context) {
atomic_puts("FAILED: handler should not have been called for blocked signal");
}
static void* start_thread(__attribute__((unused)) void* p) {
sigset_t s;
syscall(SYS_write, STDOUT_FILENO, "EXIT-", (size_t)5);
sigemptyset(&s);
sigaddset(&s, SIGSEGV);
sigprocmask(SIG_BLOCK, &s, NULL);
syscall(SYS_write, STDOUT_FILENO, "SUCCESS\n", (size_t)8, 9, 10, 11);
((void (*)(void))(0x44))();
return NULL;
}
int main(void) {
struct sigaction act;
pthread_t thread;
act.sa_sigaction = fault_handler;
act.sa_flags = SA_SIGINFO | SA_NODEFER;
sigemptyset(&act.sa_mask);
sigaction(SIGSEGV, &act, NULL);
pthread_create(&thread, NULL, start_thread, NULL);
pthread_join(thread, NULL);
return 0;
}