xref: /linux/arch/mips/include/asm/module.h (revision 79b6bb73f888933cbcd20b0ef3976cde67951b72)
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