1 #include <stdio.h> 2 #include <dlfcn.h> 3 #include <mcheck.h> 4 #include <stdlib.h> 5 6 static int do_test(void)7do_test (void) 8 { 9 void *h; 10 int ret = 0; 11 /* Carry out *one* failing call to dlopen before starting mtrace to 12 force any one-time inintialization that may happen to the 13 executable link map e.g. expansion and caching of $ORIGIN. */ 14 h = dlopen ("$ORIGIN/tst-leaks1.o", RTLD_LAZY); 15 if (h != NULL) 16 { 17 puts ("dlopen unexpectedly succeeded"); 18 ret = 1; 19 dlclose (h); 20 } 21 22 /* Start tracing and run each test 5 times to see if there are any 23 leaks in the failing dlopen. */ 24 mtrace (); 25 26 for (int i = 0; i < 10; i++) 27 { 28 h = dlopen (i < 5 29 ? "./tst-leaks1.c" 30 : "$ORIGIN/tst-leaks1.o", RTLD_LAZY); 31 if (h != NULL) 32 { 33 puts ("dlopen unexpectedly succeeded"); 34 ret = 1; 35 dlclose (h); 36 } 37 } 38 39 return ret; 40 } 41 42 #include <support/test-driver.c> 43