1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include <errno.h>
22: #include <libintl.h>
23: #include <stdlib.h>
24: #include <unistd.h>
25: #include <ldsodefs.h>
26: #include <sys/mman.h>
27: #include <sys/param.h>
28: #include <sys/types.h>
29: #include "dynamic-link.h"
30:
31: void
32: _dl_resolve_conflicts (struct link_map *l, ElfW(Rela) *conflict,
33: ElfW(Rela) *conflictend)
34: {
35: #if ! ELF_MACHINE_NO_RELA
36: if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_RELOC, 0))
37: _dl_debug_printf ("\nconflict processing: %s\n",
38: l->l_name[0] ? l->l_name : rtld_progname);
39:
40: {
41:
42:
43:
44:
45: #define RESOLVE_MAP(ref, version, flags) (*ref = NULL, NULL)
46: #define RESOLVE(ref, version, flags) (*ref = NULL, 0)
47: #define CHECK_STATIC_TLS(ref_map, sym_map) ((void) 0)
48: #define RESOLVE_CONFLICT_FIND_MAP(map, r_offset) \
49: do { \
50: while ((resolve_conflict_map->l_map_end < (ElfW(Addr)) (r_offset)) \
51: || (resolve_conflict_map->l_map_start > (ElfW(Addr)) (r_offset))) \
52: resolve_conflict_map = resolve_conflict_map->l_next; \
53: \
54: (map) = resolve_conflict_map; \
55: } while (0)
56:
57:
58: assert (l->l_ns == LM_ID_BASE);
59: struct link_map *resolve_conflict_map __attribute__ ((__unused__))
60: = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
61:
62: #include "dynamic-link.h"
63:
64: GL(dl_num_cache_relocations) += conflictend - conflict;
65:
66: for (; conflict < conflictend; ++conflict)
67: elf_machine_rela (l, conflict, NULL, NULL, (void *) conflict->r_offset);
68: }
69: #endif
70: }