Lines Matching defs:elf

15 #include <elf.h>
697 static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
700 return elf->strtab + sym->st_name;
760 static void check_section(const char *modname, struct elf_info *elf,
763 const char *sec = sech_name(elf, sechdr);
997 static Elf_Sym *find_fromsym(struct elf_info *elf, Elf_Addr addr,
1000 return symsearch_find_nearest(elf, addr, secndx, false, ~0);
1003 static Elf_Sym *find_tosym(struct elf_info *elf, Elf_Addr addr, Elf_Sym *sym)
1008 if (is_valid_name(elf, sym))
1015 new_sym = symsearch_find_nearest(elf, addr, get_secindex(elf, sym),
1020 static bool is_executable_section(struct elf_info *elf, unsigned int secndx)
1022 if (secndx >= elf->num_sections)
1025 return (elf->sechdrs[secndx].sh_flags & SHF_EXECINSTR) != 0;
1028 static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1038 from = find_fromsym(elf, faddr, fsecndx);
1039 fromsym = sym_name(elf, from);
1041 tsym = find_tosym(elf, taddr, tsym);
1042 tosym = sym_name(elf, tsym);
1063 else if (is_executable_section(elf, get_secindex(elf, tsym)))
1078 static void check_export_symbol(struct module *mod, struct elf_info *elf,
1088 label = find_fromsym(elf, faddr, elf->export_symbol_secndx);
1089 label_name = sym_name(elf, label);
1104 name = sym_name(elf, sym);
1111 data = sym_get_data(elf, label); /* license */
1135 if (elf->hdr->e_ident[EI_CLASS] == ELFCLASS64 &&
1136 elf->hdr->e_machine == EM_PARISC &&
1148 static void check_section_mismatch(struct module *mod, struct elf_info *elf,
1153 const char *tosec = sec_name(elf, get_secindex(elf, sym));
1156 if (module_enabled && elf->export_symbol_secndx == fsecndx) {
1157 check_export_symbol(mod, elf, faddr, tosec, sym);
1165 default_mismatch_handler(mod->name, elf, mismatch, sym,
1347 static void get_rel_type_and_sym(struct elf_info *elf, uint64_t r_info,
1358 bool is_64bit = (elf->hdr->e_ident[EI_CLASS] == ELFCLASS64);
1360 if (elf->hdr->e_machine == EM_MIPS && is_64bit) {
1377 static void section_rela(struct module *mod, struct elf_info *elf,
1389 get_rel_type_and_sym(elf, rela->r_info, &r_type, &r_sym);
1391 tsym = elf->symtab_start + r_sym;
1394 switch (elf->hdr->e_machine) {
1414 check_section_mismatch(mod, elf, tsym,
1419 static void section_rel(struct module *mod, struct elf_info *elf,
1432 get_rel_type_and_sym(elf, rel->r_info, &r_type, &r_sym);
1434 loc = sym_get_data_by_offset(elf, fsecndx, r_offset);
1435 tsym = elf->symtab_start + r_sym;
1437 switch (elf->hdr->e_machine) {
1451 check_section_mismatch(mod, elf, tsym,
1468 static void check_sec_ref(struct module *mod, struct elf_info *elf)
1473 for (i = 0; i < elf->num_sections; i++) {
1474 Elf_Shdr *sechdr = &elf->sechdrs[i];
1476 check_section(mod->name, elf, sechdr);
1481 const char *secname = sec_name(elf, secndx);
1488 start = sym_get_data_by_offset(elf, i, 0);
1492 section_rela(mod, elf, secndx, secname,
1495 section_rel(mod, elf, secndx, secname,