Lines Matching refs:elf
264 static const char *sec_name(struct elf_info *elf, int secindex);
268 static enum export export_from_secname(struct elf_info *elf, unsigned int sec) in export_from_secname() argument
270 const char *secname = sec_name(elf, sec); in export_from_secname()
286 static enum export export_from_sec(struct elf_info *elf, unsigned int sec) in export_from_sec() argument
288 if (sec == elf->export_sec) in export_from_sec()
290 else if (sec == elf->export_unused_sec) in export_from_sec()
292 else if (sec == elf->export_gpl_sec) in export_from_sec()
294 else if (sec == elf->export_unused_gpl_sec) in export_from_sec()
296 else if (sec == elf->export_gpl_future_sec) in export_from_sec()
753 static const char *sym_name(struct elf_info *elf, Elf_Sym *sym) in sym_name() argument
756 return elf->strtab + sym->st_name; in sym_name()
761 static const char *sec_name(struct elf_info *elf, int secindex) in sec_name() argument
763 Elf_Shdr *sechdrs = elf->sechdrs; in sec_name()
764 return (void *)elf->hdr + in sec_name()
765 elf->sechdrs[elf->secindex_strings].sh_offset + in sec_name()
769 static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr) in sech_name() argument
771 return (void *)elf->hdr + in sech_name()
772 elf->sechdrs[elf->secindex_strings].sh_offset + in sech_name()
848 static void check_section(const char *modname, struct elf_info *elf, in check_section() argument
851 const char *sec = sech_name(elf, sechdr); in check_section()
977 void (*handler)(const char *modname, struct elf_info *elf,
983 static void extable_mismatch_handler(const char *modname, struct elf_info *elf,
1206 static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr, in find_elf_symbol() argument
1218 relsym_secindex = get_secindex(elf, relsym); in find_elf_symbol()
1219 for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) { in find_elf_symbol()
1220 if (get_secindex(elf, sym) != relsym_secindex) in find_elf_symbol()
1257 static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym) in is_valid_name() argument
1259 const char *name = elf->strtab + sym->st_name; in is_valid_name()
1272 static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr, in find_elf_symbol2() argument
1279 for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) { in find_elf_symbol2()
1284 symsec = sec_name(elf, get_secindex(elf, sym)); in find_elf_symbol2()
1287 if (!is_valid_name(elf, sym)) in find_elf_symbol2()
1514 static void default_mismatch_handler(const char *modname, struct elf_info *elf, in default_mismatch_handler() argument
1524 from = find_elf_symbol2(elf, r->r_offset, fromsec); in default_mismatch_handler()
1525 fromsym = sym_name(elf, from); in default_mismatch_handler()
1531 tosec = sec_name(elf, get_secindex(elf, sym)); in default_mismatch_handler()
1532 to = find_elf_symbol(elf, r->r_addend, sym); in default_mismatch_handler()
1533 tosym = sym_name(elf, to); in default_mismatch_handler()
1545 static int is_executable_section(struct elf_info* elf, unsigned int section_index) in is_executable_section() argument
1547 if (section_index > elf->num_sections) in is_executable_section()
1550 return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR); in is_executable_section()
1590 static void report_extable_warnings(const char* modname, struct elf_info* elf, in report_extable_warnings() argument
1595 Elf_Sym* fromsym = find_elf_symbol2(elf, r->r_offset, fromsec); in report_extable_warnings()
1596 const char* fromsym_name = sym_name(elf, fromsym); in report_extable_warnings()
1597 Elf_Sym* tosym = find_elf_symbol(elf, r->r_addend, sym); in report_extable_warnings()
1598 const char* tosym_name = sym_name(elf, tosym); in report_extable_warnings()
1616 is_executable_section(elf, get_secindex(elf, sym))) in report_extable_warnings()
1628 static void extable_mismatch_handler(const char* modname, struct elf_info *elf, in extable_mismatch_handler() argument
1633 const char* tosec = sec_name(elf, get_secindex(elf, sym)); in extable_mismatch_handler()
1638 report_extable_warnings(modname, elf, mismatch, r, sym, in extable_mismatch_handler()
1648 else if (!is_executable_section(elf, get_secindex(elf, sym))) { in extable_mismatch_handler()
1666 static void check_section_mismatch(const char *modname, struct elf_info *elf, in check_section_mismatch() argument
1669 const char *tosec = sec_name(elf, get_secindex(elf, sym));; in check_section_mismatch()
1674 mismatch->handler(modname, elf, mismatch, in check_section_mismatch()
1677 default_mismatch_handler(modname, elf, mismatch, in check_section_mismatch()
1682 static unsigned int *reloc_location(struct elf_info *elf, in reloc_location() argument
1685 Elf_Shdr *sechdrs = elf->sechdrs; in reloc_location()
1688 return (void *)elf->hdr + sechdrs[section].sh_offset + in reloc_location()
1692 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r) in addend_386_rel() argument
1695 unsigned int *location = reloc_location(elf, sechdr, r); in addend_386_rel()
1704 if (elf->hdr->e_type == ET_EXEC) in addend_386_rel()
1728 static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r) in addend_arm_rel() argument
1736 (elf->symtab_start + ELF_R_SYM(r->r_info)); in addend_arm_rel()
1745 r->r_addend = (int)(long)(elf->hdr + in addend_arm_rel()
1755 static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r) in addend_mips_rel() argument
1758 unsigned int *location = reloc_location(elf, sechdr, r); in addend_mips_rel()
1778 static void section_rela(const char *modname, struct elf_info *elf, in section_rela() argument
1787 Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset; in section_rela()
1790 fromsec = sech_name(elf, sechdr); in section_rela()
1799 if (elf->hdr->e_machine == EM_MIPS) { in section_rela()
1814 sym = elf->symtab_start + r_sym; in section_rela()
1820 check_section_mismatch(modname, elf, &r, sym, fromsec); in section_rela()
1824 static void section_rel(const char *modname, struct elf_info *elf, in section_rel() argument
1833 Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset; in section_rel()
1836 fromsec = sech_name(elf, sechdr); in section_rel()
1845 if (elf->hdr->e_machine == EM_MIPS) { in section_rel()
1860 switch (elf->hdr->e_machine) { in section_rel()
1862 if (addend_386_rel(elf, sechdr, &r)) in section_rel()
1866 if (addend_arm_rel(elf, sechdr, &r)) in section_rel()
1870 if (addend_mips_rel(elf, sechdr, &r)) in section_rel()
1874 sym = elf->symtab_start + r_sym; in section_rel()
1880 check_section_mismatch(modname, elf, &r, sym, fromsec); in section_rel()
1897 struct elf_info *elf) in check_sec_ref() argument
1900 Elf_Shdr *sechdrs = elf->sechdrs; in check_sec_ref()
1903 for (i = 0; i < elf->num_sections; i++) { in check_sec_ref()
1904 check_section(modname, elf, &elf->sechdrs[i]); in check_sec_ref()
1907 section_rela(modname, elf, &elf->sechdrs[i]); in check_sec_ref()
1909 section_rel(modname, elf, &elf->sechdrs[i]); in check_sec_ref()