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

moduleloader.h (3170B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _LINUX_MODULELOADER_H
      3#define _LINUX_MODULELOADER_H
      4/* The stuff needed for archs to support modules. */
      5
      6#include <linux/module.h>
      7#include <linux/elf.h>
      8
      9/* These may be implemented by architectures that need to hook into the
     10 * module loader code.  Architectures that don't need to do anything special
     11 * can just rely on the 'weak' default hooks defined in kernel/module.c.
     12 * Note, however, that at least one of apply_relocate or apply_relocate_add
     13 * must be implemented by each architecture.
     14 */
     15
     16/* Adjust arch-specific sections.  Return 0 on success.  */
     17int module_frob_arch_sections(Elf_Ehdr *hdr,
     18			      Elf_Shdr *sechdrs,
     19			      char *secstrings,
     20			      struct module *mod);
     21
     22/* Additional bytes needed by arch in front of individual sections */
     23unsigned int arch_mod_section_prepend(struct module *mod, unsigned int section);
     24
     25/* Allocator used for allocating struct module, core sections and init
     26   sections.  Returns NULL on failure. */
     27void *module_alloc(unsigned long size);
     28
     29/* Free memory returned from module_alloc. */
     30void module_memfree(void *module_region);
     31
     32/* Determines if the section name is an init section (that is only used during
     33 * module loading).
     34 */
     35bool module_init_section(const char *name);
     36
     37/* Determines if the section name is an exit section (that is only used during
     38 * module unloading)
     39 */
     40bool module_exit_section(const char *name);
     41
     42/*
     43 * Apply the given relocation to the (simplified) ELF.  Return -error
     44 * or 0.
     45 */
     46#ifdef CONFIG_MODULES_USE_ELF_REL
     47int apply_relocate(Elf_Shdr *sechdrs,
     48		   const char *strtab,
     49		   unsigned int symindex,
     50		   unsigned int relsec,
     51		   struct module *mod);
     52#else
     53static inline int apply_relocate(Elf_Shdr *sechdrs,
     54				 const char *strtab,
     55				 unsigned int symindex,
     56				 unsigned int relsec,
     57				 struct module *me)
     58{
     59	printk(KERN_ERR "module %s: REL relocation unsupported\n",
     60	       module_name(me));
     61	return -ENOEXEC;
     62}
     63#endif
     64
     65/*
     66 * Apply the given add relocation to the (simplified) ELF.  Return
     67 * -error or 0
     68 */
     69#ifdef CONFIG_MODULES_USE_ELF_RELA
     70int apply_relocate_add(Elf_Shdr *sechdrs,
     71		       const char *strtab,
     72		       unsigned int symindex,
     73		       unsigned int relsec,
     74		       struct module *mod);
     75#else
     76static inline int apply_relocate_add(Elf_Shdr *sechdrs,
     77				     const char *strtab,
     78				     unsigned int symindex,
     79				     unsigned int relsec,
     80				     struct module *me)
     81{
     82	printk(KERN_ERR "module %s: REL relocation unsupported\n",
     83	       module_name(me));
     84	return -ENOEXEC;
     85}
     86#endif
     87
     88/* Any final processing of module before access.  Return -error or 0. */
     89int module_finalize(const Elf_Ehdr *hdr,
     90		    const Elf_Shdr *sechdrs,
     91		    struct module *mod);
     92
     93/* Any cleanup needed when module leaves. */
     94void module_arch_cleanup(struct module *mod);
     95
     96/* Any cleanup before freeing mod->module_init */
     97void module_arch_freeing_init(struct module *mod);
     98
     99#if (defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)) && \
    100		!defined(CONFIG_KASAN_VMALLOC)
    101#include <linux/kasan.h>
    102#define MODULE_ALIGN (PAGE_SIZE << KASAN_SHADOW_SCALE_SHIFT)
    103#else
    104#define MODULE_ALIGN PAGE_SIZE
    105#endif
    106
    107#endif