1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: #include <dlfcn.h>
21:
22: #if !defined SHARED && defined IS_IN_libdl
23:
24: int
25: dladdr1 (const void *address, Dl_info *info, void **extra, int flags)
26: {
27: return __dladdr1 (address, info, extra, flags);
28: }
29:
30: #else
31:
32: int
33: __dladdr1 (const void *address, Dl_info *info, void **extra, int flags)
34: {
35: # ifdef SHARED
36: if (__builtin_expect (_dlfcn_hook != NULL, 0))
37: return _dlfcn_hook->dladdr1 (address, info, extra, flags);
38: # endif
39:
40: switch (flags)
41: {
42: default:
43: case 0:
44: return _dl_addr (address, info, NULL, NULL);
45: case RTLD_DL_SYMENT:
46: return _dl_addr (address, info, NULL, (const ElfW(Sym) **) extra);
47: case RTLD_DL_LINKMAP:
48: return _dl_addr (address, info, (struct link_map **) extra, NULL);
49: }
50: }
51: # ifdef SHARED
52: strong_alias (__dladdr1, dladdr1)
53: # endif
54: #endif