blob: c0027d4e8e9783838189a653cad3fa491462275a [file] [log] [blame]
/* -*- Mode: C; tab-width: 8; c-basic-offset: 2; indent-tabs-mode: nil; -*- */
#include "util.h"
static void handler(__attribute__((unused)) int sig) {
struct timespec ts = { 1, 0 };
clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL);
}
static void* start_thread(__attribute__((unused)) void* dontcare) {
struct timespec ts = { 1, 0 };
signal(SIGCHLD, handler);
nanosleep(&ts, NULL);
return NULL;
}
static void constructor(void) __attribute__((constructor));
static void constructor(void) {
struct timeval tv;
pthread_t t;
gettimeofday(&tv, NULL);
pthread_create(&t, NULL, start_thread, NULL);
/* Try to make the thread enter its sleep syscalls */
struct timespec ts = { 0, 1000000 };
nanosleep(&ts, NULL);
/* Trigger signal handler */
pthread_kill(t, SIGCHLD);
/* Ensure that signal handler is entered before we proceed to init preload */
nanosleep(&ts, NULL);
}
void lib_exit_success(void) { atomic_puts("EXIT-SUCCESS"); }