Lines Matching refs:sechdrs
208 const Elf64_Shdr *sechdrs, in get_stubs_size() argument
218 if (sechdrs[i].sh_type == SHT_RELA) { in get_stubs_size()
221 (void *)sechdrs[i].sh_addr, in get_stubs_size()
222 sechdrs[i].sh_size / sizeof(Elf64_Rela)); in get_stubs_size()
229 sort((void *)sechdrs[i].sh_addr, in get_stubs_size()
230 sechdrs[i].sh_size / sizeof(Elf64_Rela), in get_stubs_size()
233 relocs += count_relocs((void *)sechdrs[i].sh_addr, in get_stubs_size()
234 sechdrs[i].sh_size in get_stubs_size()
238 relocs += count_relocs((void *)sechdrs[i].sh_addr, in get_stubs_size()
239 sechdrs[i].sh_size in get_stubs_size()
252 if (!strcmp(secstrings + sechdrs[i].sh_name, "__patchable_function_entries")) { in get_stubs_size()
253 me->arch.ool_stub_count = sechdrs[i].sh_size / sizeof(unsigned long); in get_stubs_size()
268 static int count_pcpu_relocs(const Elf64_Shdr *sechdrs, in count_pcpu_relocs() argument
282 sym = (Elf64_Sym *)sechdrs[symindex].sh_addr in count_pcpu_relocs()
299 const Elf64_Shdr *sechdrs, in get_got_size() argument
307 if (sechdrs[i].sh_type == SHT_SYMTAB) { in get_got_size()
316 if (sechdrs[i].sh_type == SHT_RELA) { in get_got_size()
318 pr_debug("Ptr: %p. Number: %llu\n", (void *)sechdrs[i].sh_addr, in get_got_size()
319 sechdrs[i].sh_size / sizeof(Elf64_Rela)); in get_got_size()
327 sort((void *)sechdrs[i].sh_addr, in get_got_size()
328 sechdrs[i].sh_size / sizeof(Elf64_Rela), in get_got_size()
331 relocs += count_relocs((void *)sechdrs[i].sh_addr, in get_got_size()
332 sechdrs[i].sh_size in get_got_size()
343 relocs += count_pcpu_relocs(sechdrs, in get_got_size()
344 (void *)sechdrs[i].sh_addr, in get_got_size()
345 sechdrs[i].sh_size in get_got_size()
406 static Elf64_Sym *find_dot_toc(Elf64_Shdr *sechdrs, in find_dot_toc() argument
413 syms = (Elf64_Sym *)sechdrs[symindex].sh_addr; in find_dot_toc()
414 numsyms = sechdrs[symindex].sh_size / sizeof(Elf64_Sym); in find_dot_toc()
432 Elf64_Shdr *sechdrs, in module_frob_arch_sections() argument
440 if (strcmp(secstrings + sechdrs[i].sh_name, ".stubs") == 0) in module_frob_arch_sections()
443 else if (strcmp(secstrings + sechdrs[i].sh_name, ".data..percpu") == 0) in module_frob_arch_sections()
445 else if (strcmp(secstrings + sechdrs[i].sh_name, ".mygot") == 0) { in module_frob_arch_sections()
447 if (sechdrs[i].sh_addralign < 8) in module_frob_arch_sections()
448 sechdrs[i].sh_addralign = 8; in module_frob_arch_sections()
451 else if (strcmp(secstrings + sechdrs[i].sh_name, ".toc") == 0) { in module_frob_arch_sections()
453 if (sechdrs[i].sh_addralign < 8) in module_frob_arch_sections()
454 sechdrs[i].sh_addralign = 8; in module_frob_arch_sections()
455 } else if (strcmp(secstrings + sechdrs[i].sh_name, "__versions") == 0) in module_frob_arch_sections()
456 dedotify_versions((void *)hdr + sechdrs[i].sh_offset, in module_frob_arch_sections()
457 sechdrs[i].sh_size); in module_frob_arch_sections()
458 else if (strcmp(secstrings + sechdrs[i].sh_name, "__version_ext_names") == 0) in module_frob_arch_sections()
459 dedotify_ext_version_names((void *)hdr + sechdrs[i].sh_offset, in module_frob_arch_sections()
460 sechdrs[i].sh_size); in module_frob_arch_sections()
462 if (sechdrs[i].sh_type == SHT_SYMTAB) in module_frob_arch_sections()
463 dedotify((void *)hdr + sechdrs[i].sh_offset, in module_frob_arch_sections()
464 sechdrs[i].sh_size / sizeof(Elf64_Sym), in module_frob_arch_sections()
466 + sechdrs[sechdrs[i].sh_link].sh_offset); in module_frob_arch_sections()
482 sechdrs[me->arch.got_section].sh_size = get_got_size(hdr, sechdrs, me); in module_frob_arch_sections()
493 sechdrs[me->arch.stubs_section].sh_size = get_stubs_size(hdr, sechdrs, secstrings, me); in module_frob_arch_sections()
610 static inline unsigned long my_r2(const Elf64_Shdr *sechdrs, struct module *me) in my_r2() argument
613 return (sechdrs[me->arch.toc_section].sh_addr & ~0xfful) + 0x8000; in my_r2()
620 static inline int create_stub(const Elf64_Shdr *sechdrs, in create_stub() argument
664 reladdr = (unsigned long)entry - my_r2(sechdrs, me); in create_stub()
696 static unsigned long stub_for_addr(const Elf64_Shdr *sechdrs, in stub_for_addr() argument
704 num_stubs = sechdrs[me->arch.stubs_section].sh_size / sizeof(*stubs); in stub_for_addr()
707 stubs = (void *)sechdrs[me->arch.stubs_section].sh_addr; in stub_for_addr()
716 if (!create_stub(sechdrs, &stubs[i], addr, me, name)) in stub_for_addr()
724 static unsigned long got_for_addr(const Elf64_Shdr *sechdrs, in got_for_addr() argument
735 num_got = sechdrs[me->arch.got_section].sh_size / sizeof(*got); in got_for_addr()
738 got = (void *)sechdrs[me->arch.got_section].sh_addr; in got_for_addr()
793 int apply_relocate_add(Elf64_Shdr *sechdrs, in apply_relocate_add() argument
800 Elf64_Rela *rela = (void *)sechdrs[relsec].sh_addr; in apply_relocate_add()
806 sechdrs[relsec].sh_info); in apply_relocate_add()
811 sym = find_dot_toc(sechdrs, strtab, symindex); in apply_relocate_add()
815 sym->st_value = my_r2(sechdrs, me); in apply_relocate_add()
819 for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rela); i++) { in apply_relocate_add()
821 location = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr in apply_relocate_add()
824 sym = (Elf64_Sym *)sechdrs[symindex].sh_addr in apply_relocate_add()
848 *(unsigned long *)location = my_r2(sechdrs, me); in apply_relocate_add()
853 value -= my_r2(sechdrs, me); in apply_relocate_add()
866 value -= my_r2(sechdrs, me); in apply_relocate_add()
874 value -= my_r2(sechdrs, me); in apply_relocate_add()
887 value -= my_r2(sechdrs, me); in apply_relocate_add()
900 value -= my_r2(sechdrs, me); in apply_relocate_add()
917 value = stub_for_addr(sechdrs, value, me, in apply_relocate_add()
979 value = got_for_addr(sechdrs, absvalue, me, in apply_relocate_add()
1018 value = my_r2(sechdrs, me) - (unsigned long)location; in apply_relocate_add()
1058 value = got_for_addr(sechdrs, value, me, in apply_relocate_add()
1118 static int setup_ftrace_ool_stubs(const Elf64_Shdr *sechdrs, unsigned long addr, struct module *me) in setup_ftrace_ool_stubs() argument
1124 total_stubs = sechdrs[me->arch.stubs_section].sh_size / sizeof(*stub); in setup_ftrace_ool_stubs()
1129 stub = (void *)sechdrs[me->arch.stubs_section].sh_addr; in setup_ftrace_ool_stubs()
1149 int module_finalize_ftrace(struct module *mod, const Elf_Shdr *sechdrs) in module_finalize_ftrace() argument
1151 mod->arch.tramp = stub_for_addr(sechdrs, in module_finalize_ftrace()
1156 mod->arch.tramp_regs = stub_for_addr(sechdrs, in module_finalize_ftrace()
1167 if (setup_ftrace_ool_stubs(sechdrs, mod->arch.tramp, mod)) in module_finalize_ftrace()