1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _ASM_S390_MODULE_H 3 #define _ASM_S390_MODULE_H 4 5 #include <asm-generic/module.h> 6 7 /* 8 * This file contains the s390 architecture specific module code. 9 */ 10 11 struct mod_arch_syminfo { 12 unsigned long got_offset; 13 unsigned long plt_offset; 14 int got_initialized; 15 int plt_initialized; 16 }; 17 18 struct mod_arch_specific { 19 /* Starting offset of got in the module core memory. */ 20 unsigned long got_offset; 21 /* Starting offset of plt in the module core memory. */ 22 unsigned long plt_offset; 23 /* Size of the got. */ 24 unsigned long got_size; 25 /* Size of the plt. */ 26 unsigned long plt_size; 27 /* Number of symbols in syminfo. */ 28 int nsyms; 29 /* Additional symbol information (got and plt offsets). */ 30 struct mod_arch_syminfo *syminfo; 31 #ifdef CONFIG_FUNCTION_TRACER 32 /* Start of memory reserved for ftrace hotpatch trampolines. */ 33 struct ftrace_hotpatch_trampoline *trampolines_start; 34 /* End of memory reserved for ftrace hotpatch trampolines. */ 35 struct ftrace_hotpatch_trampoline *trampolines_end; 36 /* Next unused ftrace hotpatch trampoline slot. */ 37 struct ftrace_hotpatch_trampoline *next_trampoline; 38 #endif /* CONFIG_FUNCTION_TRACER */ 39 }; 40 find_section(const Elf_Ehdr * hdr,const Elf_Shdr * sechdrs,const char * name)41static inline const Elf_Shdr *find_section(const Elf_Ehdr *hdr, 42 const Elf_Shdr *sechdrs, 43 const char *name) 44 { 45 const char *secstrs = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; 46 const Elf_Shdr *s, *se; 47 48 for (s = sechdrs, se = sechdrs + hdr->e_shnum; s < se; s++) { 49 if (strcmp(name, secstrs + s->sh_name) == 0) 50 return s; 51 } 52 return NULL; 53 } 54 55 #endif /* _ASM_S390_MODULE_H */ 56