module.h 3.7 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#ifndef _ASM_MODULE_H
#define _ASM_MODULE_H

#include <linux/list.h>
#include <asm/uaccess.h>

struct mod_arch_specific {
	/* Data Bus Error exception tables */
	struct list_head dbe_list;
	const struct exception_table_entry *dbe_start;
	const struct exception_table_entry *dbe_end;
};

typedef uint8_t Elf64_Byte;		/* Type for a 8-bit quantity.  */

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
typedef struct {
	Elf64_Addr r_offset;			/* Address of relocation.  */
	Elf64_Word r_sym;			/* Symbol index.  */
	Elf64_Byte r_ssym;			/* Special symbol.  */
	Elf64_Byte r_type3;			/* Third relocation.  */
	Elf64_Byte r_type2;			/* Second relocation.  */
	Elf64_Byte r_type;			/* First relocation.  */
} Elf64_Mips_Rel;

typedef struct {
	Elf64_Addr r_offset;			/* Address of relocation.  */
	Elf64_Word r_sym;			/* Symbol index.  */
	Elf64_Byte r_ssym;			/* Special symbol.  */
	Elf64_Byte r_type3;			/* Third relocation.  */
	Elf64_Byte r_type2;			/* Second relocation.  */
	Elf64_Byte r_type;			/* First relocation.  */
	Elf64_Sxword r_addend;			/* Addend.  */
L
Linus Torvalds 已提交
33 34
} Elf64_Mips_Rela;

35
#ifdef CONFIG_32BIT
L
Linus Torvalds 已提交
36 37 38 39

#define Elf_Shdr	Elf32_Shdr
#define Elf_Sym		Elf32_Sym
#define Elf_Ehdr	Elf32_Ehdr
40 41 42 43 44 45 46
#define Elf_Addr	Elf32_Addr

#define Elf_Mips_Rel	Elf32_Rel
#define Elf_Mips_Rela	Elf32_Rela

#define ELF_MIPS_R_SYM(rel) ELF32_R_SYM(rel.r_info)
#define ELF_MIPS_R_TYPE(rel) ELF32_R_TYPE(rel.r_info)
L
Linus Torvalds 已提交
47 48 49

#endif

50
#ifdef CONFIG_64BIT
L
Linus Torvalds 已提交
51 52 53 54

#define Elf_Shdr	Elf64_Shdr
#define Elf_Sym		Elf64_Sym
#define Elf_Ehdr	Elf64_Ehdr
55 56 57 58 59 60 61
#define Elf_Addr	Elf64_Addr

#define Elf_Mips_Rel	Elf64_Mips_Rel
#define Elf_Mips_Rela	Elf64_Mips_Rela

#define ELF_MIPS_R_SYM(rel) (rel.r_sym)
#define ELF_MIPS_R_TYPE(rel) (rel.r_type)
L
Linus Torvalds 已提交
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

#endif

#ifdef CONFIG_MODULES
/* Given an address, look for it in the exception tables. */
const struct exception_table_entry*search_module_dbetables(unsigned long addr);
#else
/* Given an address, look for it in the exception tables. */
static inline const struct exception_table_entry *
search_module_dbetables(unsigned long addr)
{
	return NULL;
}
#endif

77
#ifdef CONFIG_CPU_MIPS32_R1
78
#define MODULE_PROC_FAMILY "MIPS32_R1 "
79
#elif defined CONFIG_CPU_MIPS32_R2
80
#define MODULE_PROC_FAMILY "MIPS32_R2 "
81
#elif defined CONFIG_CPU_MIPS64_R1
82
#define MODULE_PROC_FAMILY "MIPS64_R1 "
83
#elif defined CONFIG_CPU_MIPS64_R2
84
#define MODULE_PROC_FAMILY "MIPS64_R2 "
85
#elif defined CONFIG_CPU_R3000
86
#define MODULE_PROC_FAMILY "R3000 "
87
#elif defined CONFIG_CPU_TX39XX
88
#define MODULE_PROC_FAMILY "TX39XX "
89
#elif defined CONFIG_CPU_VR41XX
90
#define MODULE_PROC_FAMILY "VR41XX "
91
#elif defined CONFIG_CPU_R4300
92
#define MODULE_PROC_FAMILY "R4300 "
93
#elif defined CONFIG_CPU_R4X00
94
#define MODULE_PROC_FAMILY "R4X00 "
95
#elif defined CONFIG_CPU_TX49XX
96
#define MODULE_PROC_FAMILY "TX49XX "
97
#elif defined CONFIG_CPU_R5000
98
#define MODULE_PROC_FAMILY "R5000 "
99
#elif defined CONFIG_CPU_R5432
100
#define MODULE_PROC_FAMILY "R5432 "
101
#elif defined CONFIG_CPU_R6000
102
#define MODULE_PROC_FAMILY "R6000 "
103
#elif defined CONFIG_CPU_NEVADA
104
#define MODULE_PROC_FAMILY "NEVADA "
105
#elif defined CONFIG_CPU_R8000
106
#define MODULE_PROC_FAMILY "R8000 "
107
#elif defined CONFIG_CPU_R10000
108
#define MODULE_PROC_FAMILY "R10000 "
109
#elif defined CONFIG_CPU_RM7000
110
#define MODULE_PROC_FAMILY "RM7000 "
111
#elif defined CONFIG_CPU_RM9000
112
#define MODULE_PROC_FAMILY "RM9000 "
113
#elif defined CONFIG_CPU_SB1
114
#define MODULE_PROC_FAMILY "SB1 "
115 116
#elif defined CONFIG_CPU_LOONGSON2
#define MODULE_PROC_FAMILY "LOONGSON2 "
117 118 119 120 121 122 123 124 125 126
#else
#error MODULE_PROC_FAMILY undefined for your processor configuration
#endif

#ifdef CONFIG_32BIT
#define MODULE_KERNEL_TYPE "32BIT "
#elif defined CONFIG_64BIT
#define MODULE_KERNEL_TYPE "64BIT "
#endif

127 128 129 130 131 132 133 134
#ifdef CONFIG_MIPS_MT_SMTC
#define MODULE_KERNEL_SMTC "MT_SMTC "
#else
#define MODULE_KERNEL_SMTC ""
#endif

#define MODULE_ARCH_VERMAGIC \
	MODULE_PROC_FAMILY MODULE_KERNEL_TYPE MODULE_KERNEL_SMTC
135

L
Linus Torvalds 已提交
136
#endif /* _ASM_MODULE_H */