1 #include <dlfcn.h> 2 #include <stdio.h> 3 #include <string.h> 4 5 static int do_test(void)6do_test (void) 7 { 8 Dl_info i; 9 if (dladdr (&printf, &i) == 0) 10 { 11 puts ("not found"); 12 return 1; 13 } 14 printf ("found symbol %s in %s\n", i.dli_sname, i.dli_fname); 15 if (i.dli_sname == NULL) 16 return 1; 17 18 #if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 19 /* On architectures which redirect long double to 20 _Float128 (e.g powerpc64le), printf will resolve 21 to __printfieee128 due to header redirects. There 22 is no _IO_printfieee128 alias. */ 23 return strcmp (i.dli_sname, "__printfieee128") != 0; 24 #else 25 return i.dli_sname == NULL 26 || (strcmp (i.dli_sname, "printf") != 0 27 /* On architectures which create PIC code by default 28 &printf may resolve to an address in libc.so 29 rather than in the binary. printf and _IO_printf 30 are aliased and which one comes first in the 31 hash table is up to the linker. */ 32 && strcmp (i.dli_sname, "_IO_printf") != 0); 33 #endif 34 } 35 36 #include <support/test-driver.c> 37