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 8struct 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 16typedef uint8_t Elf64_Byte; /* Type for a 8-bit quantity. */ 17 18typedef 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 27typedef 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. */ 75const struct exception_table_entry*search_module_dbetables(unsigned long addr); 76#else 77/* Given an address, look for it in the exception tables. */ 78static inline const struct exception_table_entry * 79search_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