linux/arch/mips/include/asm/module.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _ASM_MODULE_H
   3#define _ASM_MODULE_H
   4
   5#include <linux/list.h>
   6#include <linux/elf.h>
   7#include <asm/extable.h>
   8
   9struct mod_arch_specific {
  10        /* Data Bus Error exception tables */
  11        struct list_head dbe_list;
  12        const struct exception_table_entry *dbe_start;
  13        const struct exception_table_entry *dbe_end;
  14        struct mips_hi16 *r_mips_hi16_list;
  15};
  16
  17typedef uint8_t Elf64_Byte;             /* Type for a 8-bit quantity.  */
  18
  19typedef struct {
  20        Elf64_Addr r_offset;                    /* Address of relocation.  */
  21        Elf64_Word r_sym;                       /* Symbol index.  */
  22        Elf64_Byte r_ssym;                      /* Special symbol.  */
  23        Elf64_Byte r_type3;                     /* Third relocation.  */
  24        Elf64_Byte r_type2;                     /* Second relocation.  */
  25        Elf64_Byte r_type;                      /* First relocation.  */
  26} Elf64_Mips_Rel;
  27
  28typedef struct {
  29        Elf64_Addr r_offset;                    /* Address of relocation.  */
  30        Elf64_Word r_sym;                       /* Symbol index.  */
  31        Elf64_Byte r_ssym;                      /* Special symbol.  */
  32        Elf64_Byte r_type3;                     /* Third relocation.  */
  33        Elf64_Byte r_type2;                     /* Second relocation.  */
  34        Elf64_Byte r_type;                      /* First relocation.  */
  35        Elf64_Sxword r_addend;                  /* Addend.  */
  36} Elf64_Mips_Rela;
  37
  38#ifdef CONFIG_32BIT
  39#define Elf_Shdr        Elf32_Shdr
  40#define Elf_Sym         Elf32_Sym
  41#define Elf_Ehdr        Elf32_Ehdr
  42#define Elf_Addr        Elf32_Addr
  43#define Elf_Rel         Elf32_Rel
  44#define Elf_Rela        Elf32_Rela
  45#define ELF_R_TYPE(X)   ELF32_R_TYPE(X)
  46#define ELF_R_SYM(X)    ELF32_R_SYM(X)
  47
  48#define Elf_Mips_Rel    Elf32_Rel
  49#define Elf_Mips_Rela   Elf32_Rela
  50
  51#define ELF_MIPS_R_SYM(rel) ELF32_R_SYM((rel).r_info)
  52#define ELF_MIPS_R_TYPE(rel) ELF32_R_TYPE((rel).r_info)
  53
  54#endif
  55
  56#ifdef CONFIG_64BIT
  57#define Elf_Shdr        Elf64_Shdr
  58#define Elf_Sym         Elf64_Sym
  59#define Elf_Ehdr        Elf64_Ehdr
  60#define Elf_Addr        Elf64_Addr
  61#define Elf_Rel         Elf64_Rel
  62#define Elf_Rela        Elf64_Rela
  63#define ELF_R_TYPE(X)   ELF64_R_TYPE(X)
  64#define ELF_R_SYM(X)    ELF64_R_SYM(X)
  65
  66#define Elf_Mips_Rel    Elf64_Mips_Rel
  67#define Elf_Mips_Rela   Elf64_Mips_Rela
  68
  69#define ELF_MIPS_R_SYM(rel) ((rel).r_sym)
  70#define ELF_MIPS_R_TYPE(rel) ((rel).r_type)
  71
  72#endif
  73
  74#ifdef CONFIG_MODULES
  75/* Given an address, look for it in the exception tables. */
  76const struct exception_table_entry*search_module_dbetables(unsigned long addr);
  77#else
  78/* Given an address, look for it in the exception tables. */
  79static inline const struct exception_table_entry *
  80search_module_dbetables(unsigned long addr)
  81{
  82        return NULL;
  83}
  84#endif
  85
  86#ifdef CONFIG_CPU_BMIPS
  87#define MODULE_PROC_FAMILY "BMIPS "
  88#elif defined CONFIG_CPU_MIPS32_R1
  89#define MODULE_PROC_FAMILY "MIPS32_R1 "
  90#elif defined CONFIG_CPU_MIPS32_R2
  91#define MODULE_PROC_FAMILY "MIPS32_R2 "
  92#elif defined CONFIG_CPU_MIPS32_R6
  93#define MODULE_PROC_FAMILY "MIPS32_R6 "
  94#elif defined CONFIG_CPU_MIPS64_R1
  95#define MODULE_PROC_FAMILY "MIPS64_R1 "
  96#elif defined CONFIG_CPU_MIPS64_R2
  97#define MODULE_PROC_FAMILY "MIPS64_R2 "
  98#elif defined CONFIG_CPU_MIPS64_R6
  99#define MODULE_PROC_FAMILY "MIPS64_R6 "
 100#elif defined CONFIG_CPU_R3000
 101#define MODULE_PROC_FAMILY "R3000 "
 102#elif defined CONFIG_CPU_TX39XX
 103#define MODULE_PROC_FAMILY "TX39XX "
 104#elif defined CONFIG_CPU_VR41XX
 105#define MODULE_PROC_FAMILY "VR41XX "
 106#elif defined CONFIG_CPU_R4300
 107#define MODULE_PROC_FAMILY "R4300 "
 108#elif defined CONFIG_CPU_R4X00
 109#define MODULE_PROC_FAMILY "R4X00 "
 110#elif defined CONFIG_CPU_TX49XX
 111#define MODULE_PROC_FAMILY "TX49XX "
 112#elif defined CONFIG_CPU_R5000
 113#define MODULE_PROC_FAMILY "R5000 "
 114#elif defined CONFIG_CPU_R5432
 115#define MODULE_PROC_FAMILY "R5432 "
 116#elif defined CONFIG_CPU_R5500
 117#define MODULE_PROC_FAMILY "R5500 "
 118#elif defined CONFIG_CPU_NEVADA
 119#define MODULE_PROC_FAMILY "NEVADA "
 120#elif defined CONFIG_CPU_R8000
 121#define MODULE_PROC_FAMILY "R8000 "
 122#elif defined CONFIG_CPU_R10000
 123#define MODULE_PROC_FAMILY "R10000 "
 124#elif defined CONFIG_CPU_RM7000
 125#define MODULE_PROC_FAMILY "RM7000 "
 126#elif defined CONFIG_CPU_SB1
 127#define MODULE_PROC_FAMILY "SB1 "
 128#elif defined CONFIG_CPU_LOONGSON1
 129#define MODULE_PROC_FAMILY "LOONGSON1 "
 130#elif defined CONFIG_CPU_LOONGSON2
 131#define MODULE_PROC_FAMILY "LOONGSON2 "
 132#elif defined CONFIG_CPU_LOONGSON3
 133#define MODULE_PROC_FAMILY "LOONGSON3 "
 134#elif defined CONFIG_CPU_CAVIUM_OCTEON
 135#define MODULE_PROC_FAMILY "OCTEON "
 136#elif defined CONFIG_CPU_XLR
 137#define MODULE_PROC_FAMILY "XLR "
 138#elif defined CONFIG_CPU_XLP
 139#define MODULE_PROC_FAMILY "XLP "
 140#else
 141#error MODULE_PROC_FAMILY undefined for your processor configuration
 142#endif
 143
 144#ifdef CONFIG_32BIT
 145#define MODULE_KERNEL_TYPE "32BIT "
 146#elif defined CONFIG_64BIT
 147#define MODULE_KERNEL_TYPE "64BIT "
 148#endif
 149
 150#define MODULE_ARCH_VERMAGIC \
 151        MODULE_PROC_FAMILY MODULE_KERNEL_TYPE
 152
 153#endif /* _ASM_MODULE_H */
 154