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 9 struct 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 17 typedef uint8_t Elf64_Byte; /* Type for a 8-bit quantity. */ 18 19 typedef 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 28 typedef 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. */ 76 const struct exception_table_entry*search_module_dbetables(unsigned long addr); 77 #else 78 /* Given an address, look for it in the exception tables. */ 79 static inline const struct exception_table_entry * 80 search_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_R4X00 107 #define MODULE_PROC_FAMILY "R4X00 " 108 #elif defined CONFIG_CPU_TX49XX 109 #define MODULE_PROC_FAMILY "TX49XX " 110 #elif defined CONFIG_CPU_R5000 111 #define MODULE_PROC_FAMILY "R5000 " 112 #elif defined CONFIG_CPU_R5500 113 #define MODULE_PROC_FAMILY "R5500 " 114 #elif defined CONFIG_CPU_NEVADA 115 #define MODULE_PROC_FAMILY "NEVADA " 116 #elif defined CONFIG_CPU_R10000 117 #define MODULE_PROC_FAMILY "R10000 " 118 #elif defined CONFIG_CPU_RM7000 119 #define MODULE_PROC_FAMILY "RM7000 " 120 #elif defined CONFIG_CPU_SB1 121 #define MODULE_PROC_FAMILY "SB1 " 122 #elif defined CONFIG_CPU_LOONGSON32 123 #define MODULE_PROC_FAMILY "LOONGSON32 " 124 #elif defined CONFIG_CPU_LOONGSON2EF 125 #define MODULE_PROC_FAMILY "LOONGSON2EF " 126 #elif defined CONFIG_CPU_LOONGSON64 127 #define MODULE_PROC_FAMILY "LOONGSON64 " 128 #elif defined CONFIG_CPU_CAVIUM_OCTEON 129 #define MODULE_PROC_FAMILY "OCTEON " 130 #elif defined CONFIG_CPU_XLR 131 #define MODULE_PROC_FAMILY "XLR " 132 #elif defined CONFIG_CPU_XLP 133 #define MODULE_PROC_FAMILY "XLP " 134 #else 135 #error MODULE_PROC_FAMILY undefined for your processor configuration 136 #endif 137 138 #ifdef CONFIG_32BIT 139 #define MODULE_KERNEL_TYPE "32BIT " 140 #elif defined CONFIG_64BIT 141 #define MODULE_KERNEL_TYPE "64BIT " 142 #endif 143 144 #define MODULE_ARCH_VERMAGIC \ 145 MODULE_PROC_FAMILY MODULE_KERNEL_TYPE 146 147 #endif /* _ASM_MODULE_H */ 148