| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef _ASM_S390_MODULE_H |
| #define _ASM_S390_MODULE_H |
| |
| #include <asm-generic/module.h> |
| |
| /* |
| * This file contains the s390 architecture specific module code. |
| */ |
| |
| struct mod_arch_syminfo { |
| unsigned long got_offset; |
| unsigned long plt_offset; |
| int got_initialized; |
| int plt_initialized; |
| }; |
| |
| struct mod_arch_specific { |
| /* Starting offset of got in the module core memory. */ |
| unsigned long got_offset; |
| /* Starting offset of plt in the module core memory. */ |
| unsigned long plt_offset; |
| /* Size of the got. */ |
| unsigned long got_size; |
| /* Size of the plt. */ |
| unsigned long plt_size; |
| /* Number of symbols in syminfo. */ |
| int nsyms; |
| /* Additional symbol information (got and plt offsets). */ |
| struct mod_arch_syminfo *syminfo; |
| #ifdef CONFIG_FUNCTION_TRACER |
| /* Start of memory reserved for ftrace hotpatch trampolines. */ |
| struct ftrace_hotpatch_trampoline *trampolines_start; |
| /* End of memory reserved for ftrace hotpatch trampolines. */ |
| struct ftrace_hotpatch_trampoline *trampolines_end; |
| /* Next unused ftrace hotpatch trampoline slot. */ |
| struct ftrace_hotpatch_trampoline *next_trampoline; |
| #endif /* CONFIG_FUNCTION_TRACER */ |
| }; |
| |
| static inline const Elf_Shdr *find_section(const Elf_Ehdr *hdr, |
| const Elf_Shdr *sechdrs, |
| const char *name) |
| { |
| const char *secstrs = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; |
| const Elf_Shdr *s, *se; |
| |
| for (s = sechdrs, se = sechdrs + hdr->e_shnum; s < se; s++) { |
| if (strcmp(name, secstrs + s->sh_name) == 0) |
| return s; |
| } |
| return NULL; |
| } |
| |
| #endif /* _ASM_S390_MODULE_H */ |