Lines Matching defs:elf
15 #include <elf.h>
688 static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
690 return sym ? elf->strtab + sym->st_name : "";
748 static void check_section(const char *modname, struct elf_info *elf,
751 const char *sec = sech_name(elf, sechdr);
963 static Elf_Sym *find_fromsym(struct elf_info *elf, Elf_Addr addr,
966 return symsearch_find_nearest(elf, addr, secndx, false, ~0);
969 static Elf_Sym *find_tosym(struct elf_info *elf, Elf_Addr addr, Elf_Sym *sym)
974 if (is_valid_name(elf, sym))
981 new_sym = symsearch_find_nearest(elf, addr, get_secindex(elf, sym),
986 static bool is_executable_section(struct elf_info *elf, unsigned int secndx)
988 if (secndx >= elf->num_sections)
991 return (elf->sechdrs[secndx].sh_flags & SHF_EXECINSTR) != 0;
994 static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1005 from = find_fromsym(elf, faddr, fsecndx);
1006 fromsym = sym_name(elf, from);
1008 tsym = find_tosym(elf, taddr, tsym);
1009 tosym = sym_name(elf, tsym);
1037 else if (is_executable_section(elf, get_secindex(elf, tsym)))
1052 static void check_export_symbol(struct module *mod, struct elf_info *elf,
1062 label = find_fromsym(elf, faddr, elf->export_symbol_secndx);
1063 label_name = sym_name(elf, label);
1078 name = sym_name(elf, sym);
1085 data = sym_get_data(elf, label); /* license */
1109 if (elf->hdr->e_ident[EI_CLASS] == ELFCLASS64 &&
1110 elf->hdr->e_machine == EM_PARISC &&
1122 static void check_section_mismatch(struct module *mod, struct elf_info *elf,
1127 const char *tosec = sec_name(elf, get_secindex(elf, sym));
1130 if (module_enabled && elf->export_symbol_secndx == fsecndx) {
1131 check_export_symbol(mod, elf, faddr, tosec, sym);
1139 default_mismatch_handler(mod->name, elf, mismatch, sym,
1287 static void get_rel_type_and_sym(struct elf_info *elf, uint64_t r_info,
1298 bool is_64bit = (elf->hdr->e_ident[EI_CLASS] == ELFCLASS64);
1300 if (elf->hdr->e_machine == EM_MIPS && is_64bit) {
1317 static void section_rela(struct module *mod, struct elf_info *elf,
1329 get_rel_type_and_sym(elf, rela->r_info, &r_type, &r_sym);
1331 tsym = elf->symtab_start + r_sym;
1334 switch (elf->hdr->e_machine) {
1354 check_section_mismatch(mod, elf, tsym,
1359 static void section_rel(struct module *mod, struct elf_info *elf,
1372 get_rel_type_and_sym(elf, rel->r_info, &r_type, &r_sym);
1374 loc = sym_get_data_by_offset(elf, fsecndx, r_offset);
1375 tsym = elf->symtab_start + r_sym;
1377 switch (elf->hdr->e_machine) {
1391 check_section_mismatch(mod, elf, tsym,
1408 static void check_sec_ref(struct module *mod, struct elf_info *elf)
1413 for (i = 0; i < elf->num_sections; i++) {
1414 Elf_Shdr *sechdr = &elf->sechdrs[i];
1416 check_section(mod->name, elf, sechdr);
1421 const char *secname = sec_name(elf, secndx);
1428 start = sym_get_data_by_offset(elf, i, 0);
1432 section_rela(mod, elf, secndx, secname,
1435 section_rel(mod, elf, secndx, secname,