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