1#ifndef _ASM_MODULE_H 2#define _ASM_MODULE_H 3 4#include <linux/list.h> 5#include <linux/elf.h> 6#include <asm/uaccess.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 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 44#define Elf_Mips_Rel Elf32_Rel 45#define Elf_Mips_Rela Elf32_Rela 46 47#define ELF_MIPS_R_SYM(rel) ELF32_R_SYM(rel.r_info) 48#define ELF_MIPS_R_TYPE(rel) ELF32_R_TYPE(rel.r_info) 49 50#endif 51 52#ifdef CONFIG_64BIT 53 54#define Elf_Shdr Elf64_Shdr 55#define Elf_Sym Elf64_Sym 56#define Elf_Ehdr Elf64_Ehdr 57#define Elf_Addr Elf64_Addr 58 59#define Elf_Mips_Rel Elf64_Mips_Rel 60#define Elf_Mips_Rela Elf64_Mips_Rela 61 62#define ELF_MIPS_R_SYM(rel) (rel.r_sym) 63#define ELF_MIPS_R_TYPE(rel) (rel.r_type) 64 65#endif 66 67#ifdef CONFIG_MODULES 68/* Given an address, look for it in the exception tables. */ 69const struct exception_table_entry*search_module_dbetables(unsigned long addr); 70#else 71/* Given an address, look for it in the exception tables. */ 72static inline const struct exception_table_entry * 73search_module_dbetables(unsigned long addr) 74{ 75 return NULL; 76} 77#endif 78 79#ifdef CONFIG_CPU_BMIPS 80#define MODULE_PROC_FAMILY "BMIPS " 81#elif defined CONFIG_CPU_MIPS32_R1 82#define MODULE_PROC_FAMILY "MIPS32_R1 " 83#elif defined CONFIG_CPU_MIPS32_R2 84#define MODULE_PROC_FAMILY "MIPS32_R2 " 85#elif defined CONFIG_CPU_MIPS64_R1 86#define MODULE_PROC_FAMILY "MIPS64_R1 " 87#elif defined CONFIG_CPU_MIPS64_R2 88#define MODULE_PROC_FAMILY "MIPS64_R2 " 89#elif defined CONFIG_CPU_R3000 90#define MODULE_PROC_FAMILY "R3000 " 91#elif defined CONFIG_CPU_TX39XX 92#define MODULE_PROC_FAMILY "TX39XX " 93#elif defined CONFIG_CPU_VR41XX 94#define MODULE_PROC_FAMILY "VR41XX " 95#elif defined CONFIG_CPU_R4300 96#define MODULE_PROC_FAMILY "R4300 " 97#elif defined CONFIG_CPU_R4X00 98#define MODULE_PROC_FAMILY "R4X00 " 99#elif defined CONFIG_CPU_TX49XX 100#define MODULE_PROC_FAMILY "TX49XX " 101#elif defined CONFIG_CPU_R5000 102#define MODULE_PROC_FAMILY "R5000 " 103#elif defined CONFIG_CPU_R5432 104#define MODULE_PROC_FAMILY "R5432 " 105#elif defined CONFIG_CPU_R5500 106#define MODULE_PROC_FAMILY "R5500 " 107#elif defined CONFIG_CPU_R6000 108#define MODULE_PROC_FAMILY "R6000 " 109#elif defined CONFIG_CPU_NEVADA 110#define MODULE_PROC_FAMILY "NEVADA " 111#elif defined CONFIG_CPU_R8000 112#define MODULE_PROC_FAMILY "R8000 " 113#elif defined CONFIG_CPU_R10000 114#define MODULE_PROC_FAMILY "R10000 " 115#elif defined CONFIG_CPU_RM7000 116#define MODULE_PROC_FAMILY "RM7000 " 117#elif defined CONFIG_CPU_RM9000 118#define MODULE_PROC_FAMILY "RM9000 " 119#elif defined CONFIG_CPU_SB1 120#define MODULE_PROC_FAMILY "SB1 " 121#elif defined CONFIG_CPU_LOONGSON1 122#define MODULE_PROC_FAMILY "LOONGSON1 " 123#elif defined CONFIG_CPU_LOONGSON2 124#define MODULE_PROC_FAMILY "LOONGSON2 " 125#elif defined CONFIG_CPU_CAVIUM_OCTEON 126#define MODULE_PROC_FAMILY "OCTEON " 127#elif defined CONFIG_CPU_XLR 128#define MODULE_PROC_FAMILY "XLR " 129#elif defined CONFIG_CPU_XLP 130#define MODULE_PROC_FAMILY "XLP " 131#else 132#error MODULE_PROC_FAMILY undefined for your processor configuration 133#endif 134 135#ifdef CONFIG_32BIT 136#define MODULE_KERNEL_TYPE "32BIT " 137#elif defined CONFIG_64BIT 138#define MODULE_KERNEL_TYPE "64BIT " 139#endif 140 141#ifdef CONFIG_MIPS_MT_SMTC 142#define MODULE_KERNEL_SMTC "MT_SMTC " 143#else 144#define MODULE_KERNEL_SMTC "" 145#endif 146 147#define MODULE_ARCH_VERMAGIC \ 148 MODULE_PROC_FAMILY MODULE_KERNEL_TYPE MODULE_KERNEL_SMTC 149 150#endif /* _ASM_MODULE_H */ 151