1 /* SPDX-License-Identifier: GPL-2.0 */ 2 // Copyright (C) 2005-2017 Andes Technology Corporation 3 4 #ifndef __ASMNDS32_ELF_H 5 #define __ASMNDS32_ELF_H 6 7 /* 8 * ELF register definitions.. 9 */ 10 11 #include <asm/ptrace.h> 12 #include <asm/fpu.h> 13 #include <linux/elf-em.h> 14 15 typedef unsigned long elf_greg_t; 16 typedef unsigned long elf_freg_t[3]; 17 18 extern unsigned int elf_hwcap; 19 20 #define R_NDS32_NONE 0 21 #define R_NDS32_16_RELA 19 22 #define R_NDS32_32_RELA 20 23 #define R_NDS32_9_PCREL_RELA 22 24 #define R_NDS32_15_PCREL_RELA 23 25 #define R_NDS32_17_PCREL_RELA 24 26 #define R_NDS32_25_PCREL_RELA 25 27 #define R_NDS32_HI20_RELA 26 28 #define R_NDS32_LO12S3_RELA 27 29 #define R_NDS32_LO12S2_RELA 28 30 #define R_NDS32_LO12S1_RELA 29 31 #define R_NDS32_LO12S0_RELA 30 32 #define R_NDS32_SDA15S3_RELA 31 33 #define R_NDS32_SDA15S2_RELA 32 34 #define R_NDS32_SDA15S1_RELA 33 35 #define R_NDS32_SDA15S0_RELA 34 36 #define R_NDS32_GOT20 37 37 #define R_NDS32_25_PLTREL 38 38 #define R_NDS32_COPY 39 39 #define R_NDS32_GLOB_DAT 40 40 #define R_NDS32_JMP_SLOT 41 41 #define R_NDS32_RELATIVE 42 42 #define R_NDS32_GOTOFF 43 43 #define R_NDS32_GOTPC20 44 44 #define R_NDS32_GOT_HI20 45 45 #define R_NDS32_GOT_LO12 46 46 #define R_NDS32_GOTPC_HI20 47 47 #define R_NDS32_GOTPC_LO12 48 48 #define R_NDS32_GOTOFF_HI20 49 49 #define R_NDS32_GOTOFF_LO12 50 50 #define R_NDS32_INSN16 51 51 #define R_NDS32_LABEL 52 52 #define R_NDS32_LONGCALL1 53 53 #define R_NDS32_LONGCALL2 54 54 #define R_NDS32_LONGCALL3 55 55 #define R_NDS32_LONGJUMP1 56 56 #define R_NDS32_LONGJUMP2 57 57 #define R_NDS32_LONGJUMP3 58 58 #define R_NDS32_LOADSTORE 59 59 #define R_NDS32_9_FIXED_RELA 60 60 #define R_NDS32_15_FIXED_RELA 61 61 #define R_NDS32_17_FIXED_RELA 62 62 #define R_NDS32_25_FIXED_RELA 63 63 #define R_NDS32_PLTREL_HI20 64 64 #define R_NDS32_PLTREL_LO12 65 65 #define R_NDS32_PLT_GOTREL_HI20 66 66 #define R_NDS32_PLT_GOTREL_LO12 67 67 #define R_NDS32_LO12S0_ORI_RELA 72 68 #define R_NDS32_DWARF2_OP1_RELA 77 69 #define R_NDS32_DWARF2_OP2_RELA 78 70 #define R_NDS32_DWARF2_LEB_RELA 79 71 #define R_NDS32_WORD_9_PCREL_RELA 94 72 #define R_NDS32_LONGCALL4 107 73 #define R_NDS32_RELA_NOP_MIX 192 74 #define R_NDS32_RELA_NOP_MAX 255 75 76 #define ELF_NGREG (sizeof (struct user_pt_regs) / sizeof(elf_greg_t)) 77 #define ELF_CORE_COPY_REGS(dest, regs) \ 78 *(struct user_pt_regs *)&(dest) = (regs)->user_regs; 79 80 typedef elf_greg_t elf_gregset_t[ELF_NGREG]; 81 82 /* Core file format: The core file is written in such a way that gdb 83 can understand it and provide useful information to the user (under 84 linux we use the 'trad-core' bfd). There are quite a number of 85 obstacles to being able to view the contents of the floating point 86 registers, and until these are solved you will not be able to view the 87 contents of them. Actually, you can read in the core file and look at 88 the contents of the user struct to find out what the floating point 89 registers contain. 90 The actual file contents are as follows: 91 UPAGE: 1 page consisting of a user struct that tells gdb what is present 92 in the file. Directly after this is a copy of the task_struct, which 93 is currently not used by gdb, but it may come in useful at some point. 94 All of the registers are stored as part of the upage. The upage should 95 always be only one page. 96 DATA: The data area is stored. We use current->end_text to 97 current->brk to pick up all of the user variables, plus any memory 98 that may have been malloced. No attempt is made to determine if a page 99 is demand-zero or if a page is totally unused, we just cover the entire 100 range. All of the addresses are rounded in such a way that an integral 101 number of pages is written. 102 STACK: We need the stack information in order to get a meaningful 103 backtrace. We need to write the data from (esp) to 104 current->start_stack, so we round each of these off in order to be able 105 to write an integer number of pages. 106 The minimum core file size is 3 pages, or 12288 bytes. 107 */ 108 109 struct user_fp { 110 unsigned long long fd_regs[32]; 111 unsigned long fpcsr; 112 }; 113 114 typedef struct user_fp elf_fpregset_t; 115 116 struct elf32_hdr; 117 #define elf_check_arch(x) ((x)->e_machine == EM_NDS32) 118 119 /* 120 * These are used to set parameters in the core dumps. 121 */ 122 #define ELF_CLASS ELFCLASS32 123 #ifdef __NDS32_EB__ 124 #define ELF_DATA ELFDATA2MSB 125 #else 126 #define ELF_DATA ELFDATA2LSB 127 #endif 128 #define ELF_ARCH EM_NDS32 129 #define ELF_EXEC_PAGESIZE PAGE_SIZE 130 131 /* This is the location that an ET_DYN program is loaded if exec'ed. Typical 132 use of this is to invoke "./ld.so someprog" to test out a new version of 133 the loader. We need to make sure that it is out of the way of the program 134 that it will "exec", and that there is sufficient room for the brk. */ 135 136 #define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3) 137 138 /* When the program starts, a1 contains a pointer to a function to be 139 registered with atexit, as per the SVR4 ABI. A value of 0 means we 140 have no such handler. */ 141 #define ELF_PLAT_INIT(_r, load_addr) (_r)->uregs[0] = 0 142 143 /* This yields a mask that user programs can use to figure out what 144 instruction set this cpu supports. */ 145 146 #define ELF_HWCAP (elf_hwcap) 147 148 #ifdef __KERNEL__ 149 150 #define ELF_PLATFORM (NULL) 151 152 /* Old NetWinder binaries were compiled in such a way that the iBCS 153 heuristic always trips on them. Until these binaries become uncommon 154 enough not to care, don't trust the `ibcs' flag here. In any case 155 there is no other ELF system currently supported by iBCS. 156 @@ Could print a warning message to encourage users to upgrade. */ 157 #define SET_PERSONALITY(ex) set_personality(PER_LINUX) 158 159 #endif 160 161 162 #if IS_ENABLED(CONFIG_FPU) 163 #define FPU_AUX_ENT NEW_AUX_ENT(AT_FPUCW, FPCSR_INIT) 164 #else 165 #define FPU_AUX_ENT NEW_AUX_ENT(AT_IGNORE, 0) 166 #endif 167 168 #define ARCH_DLINFO \ 169 do { \ 170 /* Optional FPU initialization */ \ 171 FPU_AUX_ENT; \ 172 \ 173 NEW_AUX_ENT(AT_SYSINFO_EHDR, \ 174 (elf_addr_t)current->mm->context.vdso); \ 175 } while (0) 176 #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 177 struct linux_binprm; 178 int arch_setup_additional_pages(struct linux_binprm *, int); 179 180 #endif 181