]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
1da177e4 LT |
2 | #ifndef _ASM_MODULE_H |
3 | #define _ASM_MODULE_H | |
4 | ||
1da177e4 | 5 | #include <linux/list.h> |
4ca98d39 | 6 | #include <linux/elf.h> |
29abfbd9 | 7 | #include <asm/extable.h> |
1da177e4 LT |
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; | |
861667dc | 14 | struct mips_hi16 *r_mips_hi16_list; |
1da177e4 LT |
15 | }; |
16 | ||
17 | typedef uint8_t Elf64_Byte; /* Type for a 8-bit quantity. */ | |
18 | ||
4e6a05fe TS |
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. */ | |
1da177e4 LT |
36 | } Elf64_Mips_Rela; |
37 | ||
875d43e7 | 38 | #ifdef CONFIG_32BIT |
1da177e4 LT |
39 | #define Elf_Shdr Elf32_Shdr |
40 | #define Elf_Sym Elf32_Sym | |
41 | #define Elf_Ehdr Elf32_Ehdr | |
4e6a05fe | 42 | #define Elf_Addr Elf32_Addr |
786d35d4 DH |
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) | |
4e6a05fe TS |
47 | |
48 | #define Elf_Mips_Rel Elf32_Rel | |
49 | #define Elf_Mips_Rela Elf32_Rela | |
50 | ||
430d0b88 PB |
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) | |
1da177e4 LT |
53 | |
54 | #endif | |
55 | ||
875d43e7 | 56 | #ifdef CONFIG_64BIT |
1da177e4 LT |
57 | #define Elf_Shdr Elf64_Shdr |
58 | #define Elf_Sym Elf64_Sym | |
59 | #define Elf_Ehdr Elf64_Ehdr | |
4e6a05fe | 60 | #define Elf_Addr Elf64_Addr |
786d35d4 DH |
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) | |
4e6a05fe TS |
65 | |
66 | #define Elf_Mips_Rel Elf64_Mips_Rel | |
67 | #define Elf_Mips_Rela Elf64_Mips_Rela | |
68 | ||
430d0b88 PB |
69 | #define ELF_MIPS_R_SYM(rel) ((rel).r_sym) |
70 | #define ELF_MIPS_R_TYPE(rel) ((rel).r_type) | |
1da177e4 LT |
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 | ||
1c7c4451 KC |
86 | #ifdef CONFIG_CPU_BMIPS |
87 | #define MODULE_PROC_FAMILY "BMIPS " | |
88 | #elif defined CONFIG_CPU_MIPS32_R1 | |
b0c70516 | 89 | #define MODULE_PROC_FAMILY "MIPS32_R1 " |
097975fc | 90 | #elif defined CONFIG_CPU_MIPS32_R2 |
b0c70516 | 91 | #define MODULE_PROC_FAMILY "MIPS32_R2 " |
b840a82c LY |
92 | #elif defined CONFIG_CPU_MIPS32_R6 |
93 | #define MODULE_PROC_FAMILY "MIPS32_R6 " | |
097975fc | 94 | #elif defined CONFIG_CPU_MIPS64_R1 |
b0c70516 | 95 | #define MODULE_PROC_FAMILY "MIPS64_R1 " |
097975fc | 96 | #elif defined CONFIG_CPU_MIPS64_R2 |
b0c70516 | 97 | #define MODULE_PROC_FAMILY "MIPS64_R2 " |
b840a82c LY |
98 | #elif defined CONFIG_CPU_MIPS64_R6 |
99 | #define MODULE_PROC_FAMILY "MIPS64_R6 " | |
097975fc | 100 | #elif defined CONFIG_CPU_R3000 |
b0c70516 | 101 | #define MODULE_PROC_FAMILY "R3000 " |
097975fc | 102 | #elif defined CONFIG_CPU_TX39XX |
b0c70516 | 103 | #define MODULE_PROC_FAMILY "TX39XX " |
097975fc | 104 | #elif defined CONFIG_CPU_VR41XX |
b0c70516 | 105 | #define MODULE_PROC_FAMILY "VR41XX " |
097975fc | 106 | #elif defined CONFIG_CPU_R4300 |
b0c70516 | 107 | #define MODULE_PROC_FAMILY "R4300 " |
097975fc | 108 | #elif defined CONFIG_CPU_R4X00 |
b0c70516 | 109 | #define MODULE_PROC_FAMILY "R4X00 " |
097975fc | 110 | #elif defined CONFIG_CPU_TX49XX |
b0c70516 | 111 | #define MODULE_PROC_FAMILY "TX49XX " |
097975fc | 112 | #elif defined CONFIG_CPU_R5000 |
b0c70516 | 113 | #define MODULE_PROC_FAMILY "R5000 " |
097975fc | 114 | #elif defined CONFIG_CPU_R5432 |
b0c70516 | 115 | #define MODULE_PROC_FAMILY "R5432 " |
542c1020 SK |
116 | #elif defined CONFIG_CPU_R5500 |
117 | #define MODULE_PROC_FAMILY "R5500 " | |
097975fc | 118 | #elif defined CONFIG_CPU_NEVADA |
b0c70516 | 119 | #define MODULE_PROC_FAMILY "NEVADA " |
097975fc | 120 | #elif defined CONFIG_CPU_R8000 |
b0c70516 | 121 | #define MODULE_PROC_FAMILY "R8000 " |
097975fc | 122 | #elif defined CONFIG_CPU_R10000 |
b0c70516 | 123 | #define MODULE_PROC_FAMILY "R10000 " |
097975fc | 124 | #elif defined CONFIG_CPU_RM7000 |
b0c70516 | 125 | #define MODULE_PROC_FAMILY "RM7000 " |
097975fc | 126 | #elif defined CONFIG_CPU_SB1 |
b0c70516 | 127 | #define MODULE_PROC_FAMILY "SB1 " |
2fa36399 KC |
128 | #elif defined CONFIG_CPU_LOONGSON1 |
129 | #define MODULE_PROC_FAMILY "LOONGSON1 " | |
2a21c730 FZ |
130 | #elif defined CONFIG_CPU_LOONGSON2 |
131 | #define MODULE_PROC_FAMILY "LOONGSON2 " | |
152ebb44 HC |
132 | #elif defined CONFIG_CPU_LOONGSON3 |
133 | #define MODULE_PROC_FAMILY "LOONGSON3 " | |
0dd4781b DD |
134 | #elif defined CONFIG_CPU_CAVIUM_OCTEON |
135 | #define MODULE_PROC_FAMILY "OCTEON " | |
efa0f81c J |
136 | #elif defined CONFIG_CPU_XLR |
137 | #define MODULE_PROC_FAMILY "XLR " | |
a3d4fb2d J |
138 | #elif defined CONFIG_CPU_XLP |
139 | #define MODULE_PROC_FAMILY "XLP " | |
097975fc RB |
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 | ||
2fae3731 | 150 | #define MODULE_ARCH_VERMAGIC \ |
b633648c | 151 | MODULE_PROC_FAMILY MODULE_KERNEL_TYPE |
097975fc | 152 | |
1da177e4 | 153 | #endif /* _ASM_MODULE_H */ |