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