aboutsummaryrefslogtreecommitdiffstats
path: root/include/uapi/linux/elf.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-10-13 16:28:32 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-13 16:28:32 -0400
commit0b381a286e5d748b1fd80095d3dd52326819742f (patch)
treed72fca56123520b9c78661137f8a02b6ad26f95b /include/uapi/linux/elf.h
parent034b5eeb6bc783e7f60e11299154556e65699e7a (diff)
parent5921e6f8809b1616932ca4afd40fe449faa8fd88 (diff)
Merge tag 'disintegrate-main-20121013' of git://git.infradead.org/users/dhowells/linux-headers
Pull UAPI disintegration for include/linux/{,byteorder/}*.h from David Howells: "The patches contained herein do the following: (1) Remove kernel-only stuff in linux/ppp-comp.h from the UAPI. I checked this with Paul Mackerras before I created the patch and he suggested some extra bits to unexport. (2) Remove linux/blk_types.h entirely from the UAPI as none of it is userspace applicable, and remove from the UAPI that part of linux/fs.h that was the reason for linux/blk_types.h being exported in the first place. I discussed this with Jens Axboe before creating the patch. (3) The big patch of the series to disintegrate include/linux/*.h as a unit. This could be split up, though there would be collisions in moving stuff between the two Kbuild files when the parts are merged as that file is sorted alphabetically rather than being grouped by subsystem. Of this set of headers, 17 files have changed in the UAPI exported region since the 4th and only 8 since the 9th so there isn't much change in this area - as one might expect. It should be pretty obvious and straightforward if it does come to fixing up: stuff in __KERNEL__ guards stays where it is and stuff outside moves to the same file in the include/uapi/linux/ directory. If a new file appears then things get a bit more complicated as the "headers +=" line has to move to include/uapi/linux/Kbuild. Only one new file has appeared since the 9th and I judge this type of event relatively unlikely. (4) A patch to disintegrate include/linux/byteorder/*.h as a unit. Signed-off-by: David Howells <dhowells@redhat.com>" * tag 'disintegrate-main-20121013' of git://git.infradead.org/users/dhowells/linux-headers: UAPI: (Scripted) Disintegrate include/linux/byteorder UAPI: (Scripted) Disintegrate include/linux UAPI: Unexport linux/blk_types.h UAPI: Unexport part of linux/ppp-comp.h
Diffstat (limited to 'include/uapi/linux/elf.h')
-rw-r--r--include/uapi/linux/elf.h414
1 files changed, 414 insertions, 0 deletions
diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h
new file mode 100644
index 000000000000..126a8175e3e2
--- /dev/null
+++ b/include/uapi/linux/elf.h
@@ -0,0 +1,414 @@
1#ifndef _UAPI_LINUX_ELF_H
2#define _UAPI_LINUX_ELF_H
3
4#include <linux/types.h>
5#include <linux/elf-em.h>
6
7/* 32-bit ELF base types. */
8typedef __u32 Elf32_Addr;
9typedef __u16 Elf32_Half;
10typedef __u32 Elf32_Off;
11typedef __s32 Elf32_Sword;
12typedef __u32 Elf32_Word;
13
14/* 64-bit ELF base types. */
15typedef __u64 Elf64_Addr;
16typedef __u16 Elf64_Half;
17typedef __s16 Elf64_SHalf;
18typedef __u64 Elf64_Off;
19typedef __s32 Elf64_Sword;
20typedef __u32 Elf64_Word;
21typedef __u64 Elf64_Xword;
22typedef __s64 Elf64_Sxword;
23
24/* These constants are for the segment types stored in the image headers */
25#define PT_NULL 0
26#define PT_LOAD 1
27#define PT_DYNAMIC 2
28#define PT_INTERP 3
29#define PT_NOTE 4
30#define PT_SHLIB 5
31#define PT_PHDR 6
32#define PT_TLS 7 /* Thread local storage segment */
33#define PT_LOOS 0x60000000 /* OS-specific */
34#define PT_HIOS 0x6fffffff /* OS-specific */
35#define PT_LOPROC 0x70000000
36#define PT_HIPROC 0x7fffffff
37#define PT_GNU_EH_FRAME 0x6474e550
38
39#define PT_GNU_STACK (PT_LOOS + 0x474e551)
40
41/*
42 * Extended Numbering
43 *
44 * If the real number of program header table entries is larger than
45 * or equal to PN_XNUM(0xffff), it is set to sh_info field of the
46 * section header at index 0, and PN_XNUM is set to e_phnum
47 * field. Otherwise, the section header at index 0 is zero
48 * initialized, if it exists.
49 *
50 * Specifications are available in:
51 *
52 * - Sun microsystems: Linker and Libraries.
53 * Part No: 817-1984-17, September 2008.
54 * URL: http://docs.sun.com/app/docs/doc/817-1984
55 *
56 * - System V ABI AMD64 Architecture Processor Supplement
57 * Draft Version 0.99.,
58 * May 11, 2009.
59 * URL: http://www.x86-64.org/
60 */
61#define PN_XNUM 0xffff
62
63/* These constants define the different elf file types */
64#define ET_NONE 0
65#define ET_REL 1
66#define ET_EXEC 2
67#define ET_DYN 3
68#define ET_CORE 4
69#define ET_LOPROC 0xff00
70#define ET_HIPROC 0xffff
71
72/* This is the info that is needed to parse the dynamic section of the file */
73#define DT_NULL 0
74#define DT_NEEDED 1
75#define DT_PLTRELSZ 2
76#define DT_PLTGOT 3
77#define DT_HASH 4
78#define DT_STRTAB 5
79#define DT_SYMTAB 6
80#define DT_RELA 7
81#define DT_RELASZ 8
82#define DT_RELAENT 9
83#define DT_STRSZ 10
84#define DT_SYMENT 11
85#define DT_INIT 12
86#define DT_FINI 13
87#define DT_SONAME 14
88#define DT_RPATH 15
89#define DT_SYMBOLIC 16
90#define DT_REL 17
91#define DT_RELSZ 18
92#define DT_RELENT 19
93#define DT_PLTREL 20
94#define DT_DEBUG 21
95#define DT_TEXTREL 22
96#define DT_JMPREL 23
97#define DT_ENCODING 32
98#define OLD_DT_LOOS 0x60000000
99#define DT_LOOS 0x6000000d
100#define DT_HIOS 0x6ffff000
101#define DT_VALRNGLO 0x6ffffd00
102#define DT_VALRNGHI 0x6ffffdff
103#define DT_ADDRRNGLO 0x6ffffe00
104#define DT_ADDRRNGHI 0x6ffffeff
105#define DT_VERSYM 0x6ffffff0
106#define DT_RELACOUNT 0x6ffffff9
107#define DT_RELCOUNT 0x6ffffffa
108#define DT_FLAGS_1 0x6ffffffb
109#define DT_VERDEF 0x6ffffffc
110#define DT_VERDEFNUM 0x6ffffffd
111#define DT_VERNEED 0x6ffffffe
112#define DT_VERNEEDNUM 0x6fffffff
113#define OLD_DT_HIOS 0x6fffffff
114#define DT_LOPROC 0x70000000
115#define DT_HIPROC 0x7fffffff
116
117/* This info is needed when parsing the symbol table */
118#define STB_LOCAL 0
119#define STB_GLOBAL 1
120#define STB_WEAK 2
121
122#define STT_NOTYPE 0
123#define STT_OBJECT 1
124#define STT_FUNC 2
125#define STT_SECTION 3
126#define STT_FILE 4
127#define STT_COMMON 5
128#define STT_TLS 6
129
130#define ELF_ST_BIND(x) ((x) >> 4)
131#define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf)
132#define ELF32_ST_BIND(x) ELF_ST_BIND(x)
133#define ELF32_ST_TYPE(x) ELF_ST_TYPE(x)
134#define ELF64_ST_BIND(x) ELF_ST_BIND(x)
135#define ELF64_ST_TYPE(x) ELF_ST_TYPE(x)
136
137typedef struct dynamic{
138 Elf32_Sword d_tag;
139 union{
140 Elf32_Sword d_val;
141 Elf32_Addr d_ptr;
142 } d_un;
143} Elf32_Dyn;
144
145typedef struct {
146 Elf64_Sxword d_tag; /* entry tag value */
147 union {
148 Elf64_Xword d_val;
149 Elf64_Addr d_ptr;
150 } d_un;
151} Elf64_Dyn;
152
153/* The following are used with relocations */
154#define ELF32_R_SYM(x) ((x) >> 8)
155#define ELF32_R_TYPE(x) ((x) & 0xff)
156
157#define ELF64_R_SYM(i) ((i) >> 32)
158#define ELF64_R_TYPE(i) ((i) & 0xffffffff)
159
160typedef struct elf32_rel {
161 Elf32_Addr r_offset;
162 Elf32_Word r_info;
163} Elf32_Rel;
164
165typedef struct elf64_rel {
166 Elf64_Addr r_offset; /* Location at which to apply the action */
167 Elf64_Xword r_info; /* index and type of relocation */
168} Elf64_Rel;
169
170typedef struct elf32_rela{
171 Elf32_Addr r_offset;
172 Elf32_Word r_info;
173 Elf32_Sword r_addend;
174} Elf32_Rela;
175
176typedef struct elf64_rela {
177 Elf64_Addr r_offset; /* Location at which to apply the action */
178 Elf64_Xword r_info; /* index and type of relocation */
179 Elf64_Sxword r_addend; /* Constant addend used to compute value */
180} Elf64_Rela;
181
182typedef struct elf32_sym{
183 Elf32_Word st_name;
184 Elf32_Addr st_value;
185 Elf32_Word st_size;
186 unsigned char st_info;
187 unsigned char st_other;
188 Elf32_Half st_shndx;
189} Elf32_Sym;
190
191typedef struct elf64_sym {
192 Elf64_Word st_name; /* Symbol name, index in string tbl */
193 unsigned char st_info; /* Type and binding attributes */
194 unsigned char st_other; /* No defined meaning, 0 */
195 Elf64_Half st_shndx; /* Associated section index */
196 Elf64_Addr st_value; /* Value of the symbol */
197 Elf64_Xword st_size; /* Associated symbol size */
198} Elf64_Sym;
199
200
201#define EI_NIDENT 16
202
203typedef struct elf32_hdr{
204 unsigned char e_ident[EI_NIDENT];
205 Elf32_Half e_type;
206 Elf32_Half e_machine;
207 Elf32_Word e_version;
208 Elf32_Addr e_entry; /* Entry point */
209 Elf32_Off e_phoff;
210 Elf32_Off e_shoff;
211 Elf32_Word e_flags;
212 Elf32_Half e_ehsize;
213 Elf32_Half e_phentsize;
214 Elf32_Half e_phnum;
215 Elf32_Half e_shentsize;
216 Elf32_Half e_shnum;
217 Elf32_Half e_shstrndx;
218} Elf32_Ehdr;
219
220typedef struct elf64_hdr {
221 unsigned char e_ident[EI_NIDENT]; /* ELF "magic number" */
222 Elf64_Half e_type;
223 Elf64_Half e_machine;
224 Elf64_Word e_version;
225 Elf64_Addr e_entry; /* Entry point virtual address */
226 Elf64_Off e_phoff; /* Program header table file offset */
227 Elf64_Off e_shoff; /* Section header table file offset */
228 Elf64_Word e_flags;
229 Elf64_Half e_ehsize;
230 Elf64_Half e_phentsize;
231 Elf64_Half e_phnum;
232 Elf64_Half e_shentsize;
233 Elf64_Half e_shnum;
234 Elf64_Half e_shstrndx;
235} Elf64_Ehdr;
236
237/* These constants define the permissions on sections in the program
238 header, p_flags. */
239#define PF_R 0x4
240#define PF_W 0x2
241#define PF_X 0x1
242
243typedef struct elf32_phdr{
244 Elf32_Word p_type;
245 Elf32_Off p_offset;
246 Elf32_Addr p_vaddr;
247 Elf32_Addr p_paddr;
248 Elf32_Word p_filesz;
249 Elf32_Word p_memsz;
250 Elf32_Word p_flags;
251 Elf32_Word p_align;
252} Elf32_Phdr;
253
254typedef struct elf64_phdr {
255 Elf64_Word p_type;
256 Elf64_Word p_flags;
257 Elf64_Off p_offset; /* Segment file offset */
258 Elf64_Addr p_vaddr; /* Segment virtual address */
259 Elf64_Addr p_paddr; /* Segment physical address */
260 Elf64_Xword p_filesz; /* Segment size in file */
261 Elf64_Xword p_memsz; /* Segment size in memory */
262 Elf64_Xword p_align; /* Segment alignment, file & memory */
263} Elf64_Phdr;
264
265/* sh_type */
266#define SHT_NULL 0
267#define SHT_PROGBITS 1
268#define SHT_SYMTAB 2
269#define SHT_STRTAB 3
270#define SHT_RELA 4
271#define SHT_HASH 5
272#define SHT_DYNAMIC 6
273#define SHT_NOTE 7
274#define SHT_NOBITS 8
275#define SHT_REL 9
276#define SHT_SHLIB 10
277#define SHT_DYNSYM 11
278#define SHT_NUM 12
279#define SHT_LOPROC 0x70000000
280#define SHT_HIPROC 0x7fffffff
281#define SHT_LOUSER 0x80000000
282#define SHT_HIUSER 0xffffffff
283
284/* sh_flags */
285#define SHF_WRITE 0x1
286#define SHF_ALLOC 0x2
287#define SHF_EXECINSTR 0x4
288#define SHF_MASKPROC 0xf0000000
289
290/* special section indexes */
291#define SHN_UNDEF 0
292#define SHN_LORESERVE 0xff00
293#define SHN_LOPROC 0xff00
294#define SHN_HIPROC 0xff1f
295#define SHN_ABS 0xfff1
296#define SHN_COMMON 0xfff2
297#define SHN_HIRESERVE 0xffff
298
299typedef struct elf32_shdr {
300 Elf32_Word sh_name;
301 Elf32_Word sh_type;
302 Elf32_Word sh_flags;
303 Elf32_Addr sh_addr;
304 Elf32_Off sh_offset;
305 Elf32_Word sh_size;
306 Elf32_Word sh_link;
307 Elf32_Word sh_info;
308 Elf32_Word sh_addralign;
309 Elf32_Word sh_entsize;
310} Elf32_Shdr;
311
312typedef struct elf64_shdr {
313 Elf64_Word sh_name; /* Section name, index in string tbl */
314 Elf64_Word sh_type; /* Type of section */
315 Elf64_Xword sh_flags; /* Miscellaneous section attributes */
316 Elf64_Addr sh_addr; /* Section virtual addr at execution */
317 Elf64_Off sh_offset; /* Section file offset */
318 Elf64_Xword sh_size; /* Size of section in bytes */
319 Elf64_Word sh_link; /* Index of another section */
320 Elf64_Word sh_info; /* Additional section information */
321 Elf64_Xword sh_addralign; /* Section alignment */
322 Elf64_Xword sh_entsize; /* Entry size if section holds table */
323} Elf64_Shdr;
324
325#define EI_MAG0 0 /* e_ident[] indexes */
326#define EI_MAG1 1
327#define EI_MAG2 2
328#define EI_MAG3 3
329#define EI_CLASS 4
330#define EI_DATA 5
331#define EI_VERSION 6
332#define EI_OSABI 7
333#define EI_PAD 8
334
335#define ELFMAG0 0x7f /* EI_MAG */
336#define ELFMAG1 'E'
337#define ELFMAG2 'L'
338#define ELFMAG3 'F'
339#define ELFMAG "\177ELF"
340#define SELFMAG 4
341
342#define ELFCLASSNONE 0 /* EI_CLASS */
343#define ELFCLASS32 1
344#define ELFCLASS64 2
345#define ELFCLASSNUM 3
346
347#define ELFDATANONE 0 /* e_ident[EI_DATA] */
348#define ELFDATA2LSB 1
349#define ELFDATA2MSB 2
350
351#define EV_NONE 0 /* e_version, EI_VERSION */
352#define EV_CURRENT 1
353#define EV_NUM 2
354
355#define ELFOSABI_NONE 0
356#define ELFOSABI_LINUX 3
357
358#ifndef ELF_OSABI
359#define ELF_OSABI ELFOSABI_NONE
360#endif
361
362/*
363 * Notes used in ET_CORE. Architectures export some of the arch register sets
364 * using the corresponding note types via the PTRACE_GETREGSET and
365 * PTRACE_SETREGSET requests.
366 */
367#define NT_PRSTATUS 1
368#define NT_PRFPREG 2
369#define NT_PRPSINFO 3
370#define NT_TASKSTRUCT 4
371#define NT_AUXV 6
372/*
373 * Note to userspace developers: size of NT_SIGINFO note may increase
374 * in the future to accomodate more fields, don't assume it is fixed!
375 */
376#define NT_SIGINFO 0x53494749
377#define NT_FILE 0x46494c45
378#define NT_PRXFPREG 0x46e62b7f /* copied from gdb5.1/include/elf/common.h */
379#define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */
380#define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */
381#define NT_PPC_VSX 0x102 /* PowerPC VSX registers */
382#define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */
383#define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */
384#define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */
385#define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */
386#define NT_S390_TIMER 0x301 /* s390 timer register */
387#define NT_S390_TODCMP 0x302 /* s390 TOD clock comparator register */
388#define NT_S390_TODPREG 0x303 /* s390 TOD programmable register */
389#define NT_S390_CTRS 0x304 /* s390 control registers */
390#define NT_S390_PREFIX 0x305 /* s390 prefix register */
391#define NT_S390_LAST_BREAK 0x306 /* s390 breaking event address */
392#define NT_S390_SYSTEM_CALL 0x307 /* s390 system call restart data */
393#define NT_S390_TDB 0x308 /* s390 transaction diagnostic block */
394#define NT_ARM_VFP 0x400 /* ARM VFP/NEON registers */
395#define NT_ARM_TLS 0x401 /* ARM TLS register */
396#define NT_ARM_HW_BREAK 0x402 /* ARM hardware breakpoint registers */
397#define NT_ARM_HW_WATCH 0x403 /* ARM hardware watchpoint registers */
398
399
400/* Note header in a PT_NOTE section */
401typedef struct elf32_note {
402 Elf32_Word n_namesz; /* Name size */
403 Elf32_Word n_descsz; /* Content size */
404 Elf32_Word n_type; /* Content type */
405} Elf32_Nhdr;
406
407/* Note header in a PT_NOTE section */
408typedef struct elf64_note {
409 Elf64_Word n_namesz; /* Name size */
410 Elf64_Word n_descsz; /* Content size */
411 Elf64_Word n_type; /* Content type */
412} Elf64_Nhdr;
413
414#endif /* _UAPI_LINUX_ELF_H */