Lines Matching refs:info
325 static void *sym_get_data_by_offset(const struct elf_info *info, in sym_get_data_by_offset() argument
328 Elf_Shdr *sechdr = &info->sechdrs[secindex]; in sym_get_data_by_offset()
330 return (void *)info->hdr + sechdr->sh_offset + offset; in sym_get_data_by_offset()
333 void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym) in sym_get_data() argument
335 return sym_get_data_by_offset(info, get_secindex(info, sym), in sym_get_data()
339 static const char *sech_name(const struct elf_info *info, Elf_Shdr *sechdr) in sech_name() argument
341 return sym_get_data_by_offset(info, info->secindex_strings, in sech_name()
345 static const char *sec_name(const struct elf_info *info, unsigned int secindex) in sec_name() argument
352 if (secindex >= info->num_sections) in sec_name()
355 return sech_name(info, &info->sechdrs[secindex]); in sec_name()
417 static int parse_elf(struct elf_info *info, const char *filename) in parse_elf() argument
426 hdr = grab_file(filename, &info->size); in parse_elf()
436 info->hdr = hdr; in parse_elf()
437 if (info->size < sizeof(*hdr)) { in parse_elf()
476 info->sechdrs = sechdrs; in parse_elf()
483 if (hdr->e_shoff > info->size) in parse_elf()
485 (unsigned long)hdr->e_shoff, filename, info->size); in parse_elf()
492 info->num_sections = TO_NATIVE(sechdrs[0].sh_size); in parse_elf()
495 info->num_sections = hdr->e_shnum; in parse_elf()
498 info->secindex_strings = TO_NATIVE(sechdrs[0].sh_link); in parse_elf()
501 info->secindex_strings = hdr->e_shstrndx; in parse_elf()
505 for (i = 0; i < info->num_sections; i++) { in parse_elf()
518 secstrings = (void *)hdr + sechdrs[info->secindex_strings].sh_offset; in parse_elf()
519 for (i = 1; i < info->num_sections; i++) { in parse_elf()
523 if (!nobits && sechdrs[i].sh_offset > info->size) in parse_elf()
532 info->modinfo = (void *)hdr + sechdrs[i].sh_offset; in parse_elf()
533 info->modinfo_len = sechdrs[i].sh_size; in parse_elf()
535 info->export_symbol_secndx = i; in parse_elf()
541 info->symtab_start = (void *)hdr + in parse_elf()
543 info->symtab_stop = (void *)hdr + in parse_elf()
546 info->strtab = (void *)hdr + in parse_elf()
553 info->symtab_shndx_start = (void *)hdr + in parse_elf()
555 info->symtab_shndx_stop = (void *)hdr + in parse_elf()
559 if (!info->symtab_start) in parse_elf()
563 for (sym = info->symtab_start; sym < info->symtab_stop; sym++) { in parse_elf()
577 for (p = info->symtab_shndx_start; p < info->symtab_shndx_stop; in parse_elf()
582 symsearch_init(info); in parse_elf()
587 static void parse_elf_finish(struct elf_info *info) in parse_elf_finish() argument
589 symsearch_finish(info); in parse_elf_finish()
590 release_file(info->hdr, info->size); in parse_elf_finish()
593 static int ignore_undef_symbol(struct elf_info *info, const char *symname) in ignore_undef_symbol() argument
601 if (info->hdr->e_machine == EM_PPC) in ignore_undef_symbol()
610 if (info->hdr->e_machine == EM_PPC64) in ignore_undef_symbol()
622 static void handle_symbol(struct module *mod, struct elf_info *info, in handle_symbol() argument
637 if (ignore_undef_symbol(info, symname)) in handle_symbol()
639 if (info->hdr->e_machine == EM_SPARC || in handle_symbol()
640 info->hdr->e_machine == EM_SPARCV9) { in handle_symbol()
685 static char *get_next_modinfo(struct elf_info *info, const char *tag, in get_next_modinfo() argument
690 char *modinfo = info->modinfo; in get_next_modinfo()
691 unsigned long size = info->modinfo_len; in get_next_modinfo()
705 static char *get_modinfo(struct elf_info *info, const char *tag) in get_modinfo() argument
708 return get_next_modinfo(info, tag, NULL); in get_modinfo()
1582 struct elf_info info = { }; in read_symbols() local
1585 if (!parse_elf(&info, modname)) in read_symbols()
1597 license = get_modinfo(&info, "license"); in read_symbols()
1605 license = get_next_modinfo(&info, "license", license); in read_symbols()
1608 namespace = get_modinfo(&info, "import_ns"); in read_symbols()
1611 namespace = get_next_modinfo(&info, "import_ns", in read_symbols()
1615 if (extra_warn && !get_modinfo(&info, "description")) in read_symbols()
1619 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) { in read_symbols()
1620 symname = remove_dot(info.strtab + sym->st_name); in read_symbols()
1622 handle_symbol(mod, &info, sym, symname); in read_symbols()
1623 handle_moddevtable(mod, &info, sym, symname); in read_symbols()
1626 check_sec_ref(mod, &info); in read_symbols()
1629 version = get_modinfo(&info, "version"); in read_symbols()
1635 parse_elf_finish(&info); in read_symbols()