Lines Matching refs:info
395 static int parse_elf(struct elf_info *info, const char *filename) in parse_elf() argument
404 hdr = grab_file(filename, &info->size); in parse_elf()
409 info->hdr = hdr; in parse_elf()
410 if (info->size < sizeof(*hdr)) { in parse_elf()
437 info->sechdrs = sechdrs; in parse_elf()
440 if (hdr->e_shoff > info->size) { in parse_elf()
443 filename, info->size); in parse_elf()
452 info->num_sections = TO_NATIVE(sechdrs[0].sh_size); in parse_elf()
455 info->num_sections = hdr->e_shnum; in parse_elf()
458 info->secindex_strings = TO_NATIVE(sechdrs[0].sh_link); in parse_elf()
461 info->secindex_strings = hdr->e_shstrndx; in parse_elf()
465 for (i = 0; i < info->num_sections; i++) { in parse_elf()
478 secstrings = (void *)hdr + sechdrs[info->secindex_strings].sh_offset; in parse_elf()
479 for (i = 1; i < info->num_sections; i++) { in parse_elf()
483 if (!nobits && sechdrs[i].sh_offset > info->size) { in parse_elf()
494 info->modinfo = (void *)hdr + sechdrs[i].sh_offset; in parse_elf()
495 info->modinfo_len = sechdrs[i].sh_size; in parse_elf()
497 info->export_sec = i; in parse_elf()
499 info->export_unused_sec = i; in parse_elf()
501 info->export_gpl_sec = i; in parse_elf()
503 info->export_unused_gpl_sec = i; in parse_elf()
505 info->export_gpl_future_sec = i; in parse_elf()
510 info->symtab_start = (void *)hdr + in parse_elf()
512 info->symtab_stop = (void *)hdr + in parse_elf()
515 info->strtab = (void *)hdr + in parse_elf()
522 info->symtab_shndx_start = (void *)hdr + in parse_elf()
524 info->symtab_shndx_stop = (void *)hdr + in parse_elf()
528 if (!info->symtab_start) in parse_elf()
532 for (sym = info->symtab_start; sym < info->symtab_stop; sym++) { in parse_elf()
546 for (p = info->symtab_shndx_start; p < info->symtab_shndx_stop; in parse_elf()
554 static void parse_elf_finish(struct elf_info *info) in parse_elf_finish() argument
556 release_file(info->hdr, info->size); in parse_elf_finish()
559 static int ignore_undef_symbol(struct elf_info *info, const char *symname) in ignore_undef_symbol() argument
567 if (info->hdr->e_machine == EM_PPC) in ignore_undef_symbol()
574 if (info->hdr->e_machine == EM_PPC64) in ignore_undef_symbol()
586 static void handle_modversions(struct module *mod, struct elf_info *info, in handle_modversions() argument
594 export = export_from_secname(info, get_secindex(info, sym)); in handle_modversions()
596 export = export_from_sec(info, get_secindex(info, sym)); in handle_modversions()
615 if (ignore_undef_symbol(info, symname)) in handle_modversions()
623 if (info->hdr->e_machine == EM_SPARC || in handle_modversions()
624 info->hdr->e_machine == EM_SPARCV9) { in handle_modversions()
682 const char *tag, char *info) in get_next_modinfo() argument
688 if (info) { in get_next_modinfo()
689 size -= info - (char *)modinfo; in get_next_modinfo()
690 modinfo = next_string(info, &size); in get_next_modinfo()
1691 struct elf_info info = { }; in read_symbols() local
1694 if (!parse_elf(&info, modname)) in read_symbols()
1706 license = get_modinfo(info.modinfo, info.modinfo_len, "license"); in read_symbols()
1707 if (info.modinfo && !license && !is_vmlinux(modname)) in read_symbols()
1718 license = get_next_modinfo(info.modinfo, info.modinfo_len, in read_symbols()
1722 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) { in read_symbols()
1723 symname = info.strtab + sym->st_name; in read_symbols()
1725 handle_modversions(mod, &info, sym, symname); in read_symbols()
1726 handle_moddevtable(mod, &info, sym, symname); in read_symbols()
1730 check_sec_ref(mod, modname, &info); in read_symbols()
1732 version = get_modinfo(info.modinfo, info.modinfo_len, "version"); in read_symbols()
1734 maybe_frob_rcs_version(modname, version, info.modinfo, in read_symbols()
1735 version - (char *)info.hdr); in read_symbols()
1740 parse_elf_finish(&info); in read_symbols()