1#include <dlfcn.h>
2#include <stdio.h>
3#include <string.h>
4
5static int
6do_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

source code of glibc/elf/tst-addr1.c