(linenum→info "unix/slp.c:2238")

glibc/2.7/dlfcn/bug-atexit2.c

    1: /* Derived from a test case in
    2:    http://sourceware.org/bugzilla/show_bug.cgi?id=1158.  */
    3: #include <dlfcn.h>
    4: #include <stdlib.h>
    5: #include <stdio.h>
    6: #include <unistd.h>
    7: 
    8: static int next = 3;
    9: 
   10: static void
   11: f1 (void)
   12: {
   13:   puts ("f1");
   14:   if (next-- != 1)
   15:     _exit (1);
   16: }
   17: 
   18: static void
   19: f2 (void)
   20: {
   21:   puts ("f2");
   22:   if (next-- != 2)
   23:     _exit (1);
   24: }
   25: 
   26: static void
   27: f3 (void)
   28: {
   29:   puts ("f3");
   30:   if (next-- != 3)
   31:     _exit (1);
   32: }
   33: 
   34: static int
   35: do_test (void)
   36: {
   37:   atexit (f1);
   38: 
   39:   void *dso = dlopen ("$ORIGIN/bug-atexit2-lib.so", RTLD_NOW);
   40:   void (*fn) (void) = (void (*) (void)) dlsym (dso, "foo");
   41:   fn ();
   42: 
   43:   atexit (f2);
   44: 
   45:   dlclose (dso);
   46: 
   47:   atexit (f3);
   48: 
   49:   return 0;
   50: }
   51: 
   52: #define TEST_FUNCTION do_test ()
   53: #include "../test-skeleton.c"
Syntax (Markdown)