1 | #include <dlfcn.h> |
2 | #include <stdio.h> |
3 | #include <string.h> |
4 | |
5 | static int |
6 | do_test (void) |
7 | { |
8 | Dl_info i; |
9 | if (dladdr (address: &printf, info: &i) == 0) |
10 | { |
11 | puts (s: "not found" ); |
12 | return 1; |
13 | } |
14 | printf (format: "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 (s1: i.dli_sname, s2: "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 (s1: i.dli_sname, s2: "_IO_printf" ) != 0); |
33 | #endif |
34 | } |
35 | |
36 | #include <support/test-driver.c> |
37 | |