cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

module.h (2238B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2#ifndef _ASM_POWERPC_MODULE_H
      3#define _ASM_POWERPC_MODULE_H
      4#ifdef __KERNEL__
      5
      6#include <linux/list.h>
      7#include <asm/bug.h>
      8#include <asm-generic/module.h>
      9
     10#ifndef __powerpc64__
     11/*
     12 * Thanks to Paul M for explaining this.
     13 *
     14 * PPC can only do rel jumps += 32MB, and often the kernel and other
     15 * modules are further away than this.  So, we jump to a table of
     16 * trampolines attached to the module (the Procedure Linkage Table)
     17 * whenever that happens.
     18 */
     19
     20struct ppc_plt_entry {
     21	/* 16 byte jump instruction sequence (4 instructions) */
     22	unsigned int jump[4];
     23};
     24#endif	/* __powerpc64__ */
     25
     26
     27struct mod_arch_specific {
     28#ifdef __powerpc64__
     29	unsigned int stubs_section;	/* Index of stubs section in module */
     30	unsigned int toc_section;	/* What section is the TOC? */
     31	bool toc_fixed;			/* Have we fixed up .TOC.? */
     32
     33	/* For module function descriptor dereference */
     34	unsigned long start_opd;
     35	unsigned long end_opd;
     36#else /* powerpc64 */
     37	/* Indices of PLT sections within module. */
     38	unsigned int core_plt_section;
     39	unsigned int init_plt_section;
     40#endif /* powerpc64 */
     41
     42#ifdef CONFIG_DYNAMIC_FTRACE
     43	unsigned long tramp;
     44	unsigned long tramp_regs;
     45#endif
     46
     47	/* List of BUG addresses, source line numbers and filenames */
     48	struct list_head bug_list;
     49	struct bug_entry *bug_table;
     50	unsigned int num_bugs;
     51};
     52
     53/*
     54 * Select ELF headers.
     55 * Make empty section for module_frob_arch_sections to expand.
     56 */
     57
     58#ifdef __powerpc64__
     59#    ifdef MODULE
     60	asm(".section .stubs,\"ax\",@nobits; .align 3; .previous");
     61#    endif
     62#else
     63#    ifdef MODULE
     64	asm(".section .plt,\"ax\",@nobits; .align 3; .previous");
     65	asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous");
     66#    endif	/* MODULE */
     67#endif
     68
     69#ifdef CONFIG_DYNAMIC_FTRACE
     70#    ifdef MODULE
     71	asm(".section .ftrace.tramp,\"ax\",@nobits; .align 3; .previous");
     72#    endif	/* MODULE */
     73
     74int module_trampoline_target(struct module *mod, unsigned long trampoline,
     75			     unsigned long *target);
     76int module_finalize_ftrace(struct module *mod, const Elf_Shdr *sechdrs);
     77#else
     78static inline int module_finalize_ftrace(struct module *mod, const Elf_Shdr *sechdrs)
     79{
     80	return 0;
     81}
     82#endif
     83
     84#endif /* __KERNEL__ */
     85#endif	/* _ASM_POWERPC_MODULE_H */