/* Derived from a test case in http://sourceware.org/bugzilla/show_bug.cgi?id=1158. */ #include <dlfcn.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> static int next = 3; static void f1 (void) { puts ("f1"); if (next-- != 1) _exit (1); } static void f2 (void) { puts ("f2"); if (next-- != 2) _exit (1); } static void f3 (void) { puts ("f3"); if (next-- != 3) _exit (1); } static int do_test (void) { atexit (f1); void *dso = dlopen ("$ORIGIN/bug-atexit2-lib.so", RTLD_NOW); void (*fn) (void) = (void (*) (void)) dlsym (dso, "foo"); fn (); atexit (f2); dlclose (dso); atexit (f3); return 0; } #define TEST_FUNCTION do_test () #include "../test-skeleton.c"