Lines Matching defs:reloc
268 struct reloc *find_reloc_by_dest_range(const struct elf *elf, struct section *sec,
271 struct reloc *reloc, *r = NULL;
280 elf_hash_for_each_possible(reloc, reloc, hash,
282 if (reloc->sec != rsec)
285 if (reloc_offset(reloc) >= offset &&
286 reloc_offset(reloc) < offset + len) {
287 if (!r || reloc_offset(reloc) < reloc_offset(r))
288 r = reloc;
298 struct reloc *find_reloc_by_dest(const struct elf *elf, struct section *sec, unsigned long offset)
581 struct reloc *reloc;
583 for (reloc = sym->relocs; reloc; reloc = reloc->sym_next_reloc)
584 set_reloc_sym(elf, reloc, reloc->sym->idx);
850 static struct reloc *elf_init_reloc(struct elf *elf, struct section *rsec,
855 struct reloc *reloc, empty = { 0 };
863 reloc = &rsec->relocs[reloc_idx];
865 if (memcmp(reloc, &empty, sizeof(empty))) {
866 WARN("%s: %s: reloc %d already initialized!",
871 reloc->sec = rsec;
872 reloc->sym = sym;
874 set_reloc_offset(elf, reloc, offset);
875 set_reloc_sym(elf, reloc, sym->idx);
876 set_reloc_type(elf, reloc, type);
877 set_reloc_addend(elf, reloc, addend);
879 elf_hash_add(reloc, &reloc->hash, reloc_hash(reloc));
880 reloc->sym_next_reloc = sym->relocs;
881 sym->relocs = reloc;
883 return reloc;
886 struct reloc *elf_init_reloc_text_sym(struct elf *elf, struct section *sec,
919 struct reloc *elf_init_reloc_data_sym(struct elf *elf, struct section *sec,
939 struct reloc *reloc;
944 if (!elf_alloc_hash(reloc, elf->num_relocs))
953 WARN("can't find base section for reloc section %s",
961 rsec->relocs = calloc(sec_num_entries(rsec), sizeof(*reloc));
967 reloc = &rsec->relocs[i];
969 reloc->sec = rsec;
970 symndx = reloc_sym(reloc);
971 reloc->sym = sym = find_symbol_by_index(elf, symndx);
972 if (!reloc->sym) {
973 WARN("can't find reloc entry symbol %d for %s",
978 elf_hash_add(reloc, &reloc->hash, reloc_hash(reloc));
979 reloc->sym_next_reloc = sym->relocs;
980 sym->relocs = reloc;
1197 rsec->relocs = calloc(sec_num_entries(rsec), sizeof(struct reloc));