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_R4300 107#define MODULE_PROC_FAMILY "R4300 " 108#elif defined CONFIG_CPU_R4X00 109#define MODULE_PROC_FAMILY "R4X00 " 110#elif defined CONFIG_CPU_TX49XX 111#define MODULE_PROC_FAMILY "TX49XX " 112#elif defined CONFIG_CPU_R5000 113#define MODULE_PROC_FAMILY "R5000 " 114#elif defined CONFIG_CPU_R5432 115#define MODULE_PROC_FAMILY "R5432 " 116#elif defined CONFIG_CPU_R5500 117#define MODULE_PROC_FAMILY "R5500 " 118#elif defined CONFIG_CPU_NEVADA 119#define MODULE_PROC_FAMILY "NEVADA " 120#elif defined CONFIG_CPU_R8000 121#define MODULE_PROC_FAMILY "R8000 " 122#elif defined CONFIG_CPU_R10000 123#define MODULE_PROC_FAMILY "R10000 " 124#elif defined CONFIG_CPU_RM7000 125#define MODULE_PROC_FAMILY "RM7000 " 126#elif defined CONFIG_CPU_SB1 127#define MODULE_PROC_FAMILY "SB1 " 128#elif defined CONFIG_CPU_LOONGSON1 129#define MODULE_PROC_FAMILY "LOONGSON1 " 130#elif defined CONFIG_CPU_LOONGSON2 131#define MODULE_PROC_FAMILY "LOONGSON2 " 132#elif defined CONFIG_CPU_LOONGSON3 133#define MODULE_PROC_FAMILY "LOONGSON3 " 134#elif defined CONFIG_CPU_CAVIUM_OCTEON 135#define MODULE_PROC_FAMILY "OCTEON " 136#elif defined CONFIG_CPU_XLR 137#define MODULE_PROC_FAMILY "XLR " 138#elif defined CONFIG_CPU_XLP 139#define MODULE_PROC_FAMILY "XLP " 140#else 141#error MODULE_PROC_FAMILY undefined for your processor configuration 142#endif 143 144#ifdef CONFIG_32BIT 145#define MODULE_KERNEL_TYPE "32BIT " 146#elif defined CONFIG_64BIT 147#define MODULE_KERNEL_TYPE "64BIT " 148#endif 149 150#define MODULE_ARCH_VERMAGIC \ 151 MODULE_PROC_FAMILY MODULE_KERNEL_TYPE 152 153#endif /* _ASM_MODULE_H */ 154