at v5.6 147 lines 4.4 kB view raw
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 9struct 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 17typedef uint8_t Elf64_Byte; /* Type for a 8-bit quantity. */ 18 19typedef 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 28typedef 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. */ 76const struct exception_table_entry*search_module_dbetables(unsigned long addr); 77#else 78/* Given an address, look for it in the exception tables. */ 79static inline const struct exception_table_entry * 80search_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 */