Lines Matching refs:info
332 static void *sym_get_data_by_offset(const struct elf_info *info, in sym_get_data_by_offset() argument
335 Elf_Shdr *sechdr = &info->sechdrs[secindex]; in sym_get_data_by_offset()
337 if (info->hdr->e_type != ET_REL) in sym_get_data_by_offset()
340 return (void *)info->hdr + sechdr->sh_offset + offset; in sym_get_data_by_offset()
343 static void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym) in sym_get_data() argument
345 return sym_get_data_by_offset(info, get_secindex(info, sym), in sym_get_data()
349 static const char *sech_name(const struct elf_info *info, Elf_Shdr *sechdr) in sech_name() argument
351 return sym_get_data_by_offset(info, info->secindex_strings, in sech_name()
355 static const char *sec_name(const struct elf_info *info, int secindex) in sec_name() argument
357 return sech_name(info, &info->sechdrs[secindex]); in sec_name()
384 static const char *namespace_from_kstrtabns(const struct elf_info *info, in namespace_from_kstrtabns() argument
387 const char *value = sym_get_data(info, sym); in namespace_from_kstrtabns()
475 static int parse_elf(struct elf_info *info, const char *filename) in parse_elf() argument
484 hdr = grab_file(filename, &info->size); in parse_elf()
494 info->hdr = hdr; in parse_elf()
495 if (info->size < sizeof(*hdr)) { in parse_elf()
522 info->sechdrs = sechdrs; in parse_elf()
525 if (hdr->e_shoff > info->size) { in parse_elf()
527 (unsigned long)hdr->e_shoff, filename, info->size); in parse_elf()
536 info->num_sections = TO_NATIVE(sechdrs[0].sh_size); in parse_elf()
539 info->num_sections = hdr->e_shnum; in parse_elf()
542 info->secindex_strings = TO_NATIVE(sechdrs[0].sh_link); in parse_elf()
545 info->secindex_strings = hdr->e_shstrndx; in parse_elf()
549 for (i = 0; i < info->num_sections; i++) { in parse_elf()
562 secstrings = (void *)hdr + sechdrs[info->secindex_strings].sh_offset; in parse_elf()
563 for (i = 1; i < info->num_sections; i++) { in parse_elf()
567 if (!nobits && sechdrs[i].sh_offset > info->size) { in parse_elf()
578 info->modinfo = (void *)hdr + sechdrs[i].sh_offset; in parse_elf()
579 info->modinfo_len = sechdrs[i].sh_size; in parse_elf()
581 info->export_sec = i; in parse_elf()
583 info->export_gpl_sec = i; in parse_elf()
588 info->symtab_start = (void *)hdr + in parse_elf()
590 info->symtab_stop = (void *)hdr + in parse_elf()
593 info->strtab = (void *)hdr + in parse_elf()
600 info->symtab_shndx_start = (void *)hdr + in parse_elf()
602 info->symtab_shndx_stop = (void *)hdr + in parse_elf()
606 if (!info->symtab_start) in parse_elf()
610 for (sym = info->symtab_start; sym < info->symtab_stop; sym++) { in parse_elf()
624 for (p = info->symtab_shndx_start; p < info->symtab_shndx_stop; in parse_elf()
632 static void parse_elf_finish(struct elf_info *info) in parse_elf_finish() argument
634 release_file(info->hdr, info->size); in parse_elf_finish()
637 static int ignore_undef_symbol(struct elf_info *info, const char *symname) in ignore_undef_symbol() argument
645 if (info->hdr->e_machine == EM_PPC) in ignore_undef_symbol()
654 if (info->hdr->e_machine == EM_PPC64) in ignore_undef_symbol()
667 const struct elf_info *info, in handle_modversion() argument
687 crcp = sym_get_data(info, sym); in handle_modversion()
693 static void handle_symbol(struct module *mod, struct elf_info *info, in handle_symbol() argument
700 export = export_from_secname(info, get_secindex(info, sym)); in handle_symbol()
702 export = export_from_sec(info, get_secindex(info, sym)); in handle_symbol()
716 if (ignore_undef_symbol(info, symname)) in handle_symbol()
718 if (info->hdr->e_machine == EM_SPARC || in handle_symbol()
719 info->hdr->e_machine == EM_SPARCV9) { in handle_symbol()
770 static char *get_next_modinfo(struct elf_info *info, const char *tag, in get_next_modinfo() argument
775 char *modinfo = info->modinfo; in get_next_modinfo()
776 unsigned long size = info->modinfo_len; in get_next_modinfo()
790 static char *get_modinfo(struct elf_info *info, const char *tag) in get_modinfo() argument
793 return get_next_modinfo(info, tag, NULL); in get_modinfo()
1958 struct elf_info info = { }; in read_symbols() local
1961 if (!parse_elf(&info, modname)) in read_symbols()
1978 license = get_modinfo(&info, "license"); in read_symbols()
1988 license = get_next_modinfo(&info, "license", license); in read_symbols()
1991 namespace = get_modinfo(&info, "import_ns"); in read_symbols()
1994 namespace = get_next_modinfo(&info, "import_ns", in read_symbols()
1999 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) { in read_symbols()
2000 symname = remove_dot(info.strtab + sym->st_name); in read_symbols()
2002 handle_symbol(mod, &info, sym, symname); in read_symbols()
2003 handle_moddevtable(mod, &info, sym, symname); in read_symbols()
2006 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) { in read_symbols()
2007 symname = remove_dot(info.strtab + sym->st_name); in read_symbols()
2012 namespace_from_kstrtabns(&info, in read_symbols()
2016 handle_modversion(mod, &info, sym, in read_symbols()
2021 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) { in read_symbols()
2026 find_symbol(remove_dot(info.strtab + in read_symbols()
2034 check_sec_ref(mod, modname, &info); in read_symbols()
2037 version = get_modinfo(&info, "version"); in read_symbols()
2043 parse_elf_finish(&info); in read_symbols()