1951a39d68df598db08dfced8b4707755864a0492Ying Wang/****************************************************************************
2951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
3951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
4951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   This header was automatically generated from a Linux kernel header
5951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   of the same name, to make information necessary for userspace to
6951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   call into the kernel available to libc.  It contains only constants,
7951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   structures, and macros generated from the original header, and thus,
8951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   contains no copyrightable information.
9951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
10951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
11951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************/
12951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _LINUX_ELF_H
13951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _LINUX_ELF_H
14951a39d68df598db08dfced8b4707755864a0492Ying Wang
15951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/types.h>
16951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/auxvec.h>
17951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/elf-em.h>
18951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <asm/elf.h>
19951a39d68df598db08dfced8b4707755864a0492Ying Wang
20951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef elf_read_implies_exec
21951a39d68df598db08dfced8b4707755864a0492Ying Wang
22951a39d68df598db08dfced8b4707755864a0492Ying Wang#define elf_read_implies_exec(ex, have_pt_gnu_stack) 0
23951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
24951a39d68df598db08dfced8b4707755864a0492Ying Wang
25951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __u32 Elf32_Addr;
26951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __u16 Elf32_Half;
27951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __u32 Elf32_Off;
28951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __s32 Elf32_Sword;
29951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __u32 Elf32_Word;
30951a39d68df598db08dfced8b4707755864a0492Ying Wang
31951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __u64 Elf64_Addr;
32951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __u16 Elf64_Half;
33951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __s16 Elf64_SHalf;
34951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __u64 Elf64_Off;
35951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __s32 Elf64_Sword;
36951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __u32 Elf64_Word;
37951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __u64 Elf64_Xword;
38951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __s64 Elf64_Sxword;
39951a39d68df598db08dfced8b4707755864a0492Ying Wang
40951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_NULL 0
41951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_LOAD 1
42951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_DYNAMIC 2
43951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_INTERP 3
44951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_NOTE 4
45951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_SHLIB 5
46951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_PHDR 6
47951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_TLS 7
48951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_LOOS 0x60000000
49951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_HIOS 0x6fffffff
50951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_LOPROC 0x70000000
51951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_HIPROC 0x7fffffff
52951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_GNU_EH_FRAME 0x6474e550
53951a39d68df598db08dfced8b4707755864a0492Ying Wang
54951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PT_GNU_STACK (PT_LOOS + 0x474e551)
55951a39d68df598db08dfced8b4707755864a0492Ying Wang
56951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ET_NONE 0
57951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ET_REL 1
58951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ET_EXEC 2
59951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ET_DYN 3
60951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ET_CORE 4
61951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ET_LOPROC 0xff00
62951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ET_HIPROC 0xffff
63951a39d68df598db08dfced8b4707755864a0492Ying Wang
64951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_NULL 0
65951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_NEEDED 1
66951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_PLTRELSZ 2
67951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_PLTGOT 3
68951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_HASH 4
69951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_STRTAB 5
70951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_SYMTAB 6
71951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_RELA 7
72951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_RELASZ 8
73951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_RELAENT 9
74951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_STRSZ 10
75951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_SYMENT 11
76951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_INIT 12
77951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_FINI 13
78951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_SONAME 14
79951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_RPATH 15
80951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_SYMBOLIC 16
81951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_REL 17
82951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_RELSZ 18
83951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_RELENT 19
84951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_PLTREL 20
85951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_DEBUG 21
86951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_TEXTREL 22
87951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_JMPREL 23
88951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_LOPROC 0x70000000
89951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DT_HIPROC 0x7fffffff
90951a39d68df598db08dfced8b4707755864a0492Ying Wang
91951a39d68df598db08dfced8b4707755864a0492Ying Wang#define STB_LOCAL 0
92951a39d68df598db08dfced8b4707755864a0492Ying Wang#define STB_GLOBAL 1
93951a39d68df598db08dfced8b4707755864a0492Ying Wang#define STB_WEAK 2
94951a39d68df598db08dfced8b4707755864a0492Ying Wang
95951a39d68df598db08dfced8b4707755864a0492Ying Wang#define STT_NOTYPE 0
96951a39d68df598db08dfced8b4707755864a0492Ying Wang#define STT_OBJECT 1
97951a39d68df598db08dfced8b4707755864a0492Ying Wang#define STT_FUNC 2
98951a39d68df598db08dfced8b4707755864a0492Ying Wang#define STT_SECTION 3
99951a39d68df598db08dfced8b4707755864a0492Ying Wang#define STT_FILE 4
100951a39d68df598db08dfced8b4707755864a0492Ying Wang#define STT_COMMON 5
101951a39d68df598db08dfced8b4707755864a0492Ying Wang#define STT_TLS 6
102951a39d68df598db08dfced8b4707755864a0492Ying Wang
103951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF_ST_BIND(x) ((x) >> 4)
104951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf)
105951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF32_ST_BIND(x) ELF_ST_BIND(x)
106951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF32_ST_TYPE(x) ELF_ST_TYPE(x)
107951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF64_ST_BIND(x) ELF_ST_BIND(x)
108951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF64_ST_TYPE(x) ELF_ST_TYPE(x)
109951a39d68df598db08dfced8b4707755864a0492Ying Wang
110951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct dynamic{
111951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Sword d_tag;
112951a39d68df598db08dfced8b4707755864a0492Ying Wang union{
113951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Sword d_val;
114951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Addr d_ptr;
115951a39d68df598db08dfced8b4707755864a0492Ying Wang } d_un;
116951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf32_Dyn;
117951a39d68df598db08dfced8b4707755864a0492Ying Wang
118951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct {
119951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Sxword d_tag;
120951a39d68df598db08dfced8b4707755864a0492Ying Wang union {
121951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword d_val;
122951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Addr d_ptr;
123951a39d68df598db08dfced8b4707755864a0492Ying Wang } d_un;
124951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf64_Dyn;
125951a39d68df598db08dfced8b4707755864a0492Ying Wang
126951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF32_R_SYM(x) ((x) >> 8)
127951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF32_R_TYPE(x) ((x) & 0xff)
128951a39d68df598db08dfced8b4707755864a0492Ying Wang
129951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF64_R_SYM(i) ((i) >> 32)
130951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF64_R_TYPE(i) ((i) & 0xffffffff)
131951a39d68df598db08dfced8b4707755864a0492Ying Wang
132951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf32_rel {
133951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Addr r_offset;
134951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word r_info;
135951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf32_Rel;
136951a39d68df598db08dfced8b4707755864a0492Ying Wang
137951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf64_rel {
138951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Addr r_offset;
139951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword r_info;
140951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf64_Rel;
141951a39d68df598db08dfced8b4707755864a0492Ying Wang
142951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf32_rela{
143951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Addr r_offset;
144951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word r_info;
145951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Sword r_addend;
146951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf32_Rela;
147951a39d68df598db08dfced8b4707755864a0492Ying Wang
148951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf64_rela {
149951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Addr r_offset;
150951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword r_info;
151951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Sxword r_addend;
152951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf64_Rela;
153951a39d68df598db08dfced8b4707755864a0492Ying Wang
154951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf32_sym{
155951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word st_name;
156951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Addr st_value;
157951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word st_size;
158951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char st_info;
159951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char st_other;
160951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Half st_shndx;
161951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf32_Sym;
162951a39d68df598db08dfced8b4707755864a0492Ying Wang
163951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf64_sym {
164951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word st_name;
165951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char st_info;
166951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char st_other;
167951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Half st_shndx;
168951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Addr st_value;
169951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword st_size;
170951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf64_Sym;
171951a39d68df598db08dfced8b4707755864a0492Ying Wang
172951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EI_NIDENT 16
173951a39d68df598db08dfced8b4707755864a0492Ying Wang
174951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf32_hdr{
175951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char e_ident[EI_NIDENT];
176951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Half e_type;
177951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Half e_machine;
178951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word e_version;
179951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Addr e_entry;
180951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Off e_phoff;
181951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Off e_shoff;
182951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word e_flags;
183951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Half e_ehsize;
184951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Half e_phentsize;
185951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Half e_phnum;
186951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Half e_shentsize;
187951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Half e_shnum;
188951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Half e_shstrndx;
189951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf32_Ehdr;
190951a39d68df598db08dfced8b4707755864a0492Ying Wang
191951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf64_hdr {
192951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char e_ident[16];
193951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Half e_type;
194951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Half e_machine;
195951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word e_version;
196951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Addr e_entry;
197951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Off e_phoff;
198951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Off e_shoff;
199951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word e_flags;
200951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Half e_ehsize;
201951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Half e_phentsize;
202951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Half e_phnum;
203951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Half e_shentsize;
204951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Half e_shnum;
205951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Half e_shstrndx;
206951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf64_Ehdr;
207951a39d68df598db08dfced8b4707755864a0492Ying Wang
208951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_R 0x4
209951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_W 0x2
210951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_X 0x1
211951a39d68df598db08dfced8b4707755864a0492Ying Wang
212951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf32_phdr{
213951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word p_type;
214951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Off p_offset;
215951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Addr p_vaddr;
216951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Addr p_paddr;
217951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word p_filesz;
218951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word p_memsz;
219951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word p_flags;
220951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word p_align;
221951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf32_Phdr;
222951a39d68df598db08dfced8b4707755864a0492Ying Wang
223951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf64_phdr {
224951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word p_type;
225951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word p_flags;
226951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Off p_offset;
227951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Addr p_vaddr;
228951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Addr p_paddr;
229951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword p_filesz;
230951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword p_memsz;
231951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword p_align;
232951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf64_Phdr;
233951a39d68df598db08dfced8b4707755864a0492Ying Wang
234951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_NULL 0
235951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_PROGBITS 1
236951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_SYMTAB 2
237951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_STRTAB 3
238951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_RELA 4
239951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_HASH 5
240951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_DYNAMIC 6
241951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_NOTE 7
242951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_NOBITS 8
243951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_REL 9
244951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_SHLIB 10
245951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_DYNSYM 11
246951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_NUM 12
247951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_LOPROC 0x70000000
248951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_HIPROC 0x7fffffff
249951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_LOUSER 0x80000000
250951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHT_HIUSER 0xffffffff
251951a39d68df598db08dfced8b4707755864a0492Ying Wang
252951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHF_WRITE 0x1
253951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHF_ALLOC 0x2
254951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHF_EXECINSTR 0x4
255951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHF_MASKPROC 0xf0000000
256951a39d68df598db08dfced8b4707755864a0492Ying Wang
257951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHN_UNDEF 0
258951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHN_LORESERVE 0xff00
259951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHN_LOPROC 0xff00
260951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHN_HIPROC 0xff1f
261951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHN_ABS 0xfff1
262951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHN_COMMON 0xfff2
263951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHN_HIRESERVE 0xffff
264951a39d68df598db08dfced8b4707755864a0492Ying Wang
265951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct {
266951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word sh_name;
267951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word sh_type;
268951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word sh_flags;
269951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Addr sh_addr;
270951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Off sh_offset;
271951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word sh_size;
272951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word sh_link;
273951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word sh_info;
274951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word sh_addralign;
275951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word sh_entsize;
276951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf32_Shdr;
277951a39d68df598db08dfced8b4707755864a0492Ying Wang
278951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf64_shdr {
279951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word sh_name;
280951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word sh_type;
281951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword sh_flags;
282951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Addr sh_addr;
283951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Off sh_offset;
284951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword sh_size;
285951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word sh_link;
286951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word sh_info;
287951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword sh_addralign;
288951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Xword sh_entsize;
289951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf64_Shdr;
290951a39d68df598db08dfced8b4707755864a0492Ying Wang
291951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EI_MAG0 0
292951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EI_MAG1 1
293951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EI_MAG2 2
294951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EI_MAG3 3
295951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EI_CLASS 4
296951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EI_DATA 5
297951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EI_VERSION 6
298951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EI_OSABI 7
299951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EI_PAD 8
300951a39d68df598db08dfced8b4707755864a0492Ying Wang
301951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFMAG0 0x7f
302951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFMAG1 'E'
303951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFMAG2 'L'
304951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFMAG3 'F'
305951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFMAG "\177ELF"
306951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SELFMAG 4
307951a39d68df598db08dfced8b4707755864a0492Ying Wang
308951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFCLASSNONE 0
309951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFCLASS32 1
310951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFCLASS64 2
311951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFCLASSNUM 3
312951a39d68df598db08dfced8b4707755864a0492Ying Wang
313951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFDATANONE 0
314951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFDATA2LSB 1
315951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFDATA2MSB 2
316951a39d68df598db08dfced8b4707755864a0492Ying Wang
317951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EV_NONE 0
318951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EV_CURRENT 1
319951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EV_NUM 2
320951a39d68df598db08dfced8b4707755864a0492Ying Wang
321951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFOSABI_NONE 0
322951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELFOSABI_LINUX 3
323951a39d68df598db08dfced8b4707755864a0492Ying Wang
324951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef ELF_OSABI
325951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ELF_OSABI ELFOSABI_NONE
326951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
327951a39d68df598db08dfced8b4707755864a0492Ying Wang
328951a39d68df598db08dfced8b4707755864a0492Ying Wang#define NT_PRSTATUS 1
329951a39d68df598db08dfced8b4707755864a0492Ying Wang#define NT_PRFPREG 2
330951a39d68df598db08dfced8b4707755864a0492Ying Wang#define NT_PRPSINFO 3
331951a39d68df598db08dfced8b4707755864a0492Ying Wang#define NT_TASKSTRUCT 4
332951a39d68df598db08dfced8b4707755864a0492Ying Wang#define NT_AUXV 6
333951a39d68df598db08dfced8b4707755864a0492Ying Wang#define NT_PRXFPREG 0x46e62b7f
334951a39d68df598db08dfced8b4707755864a0492Ying Wang
335951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf32_note {
336951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word n_namesz;
337951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word n_descsz;
338951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf32_Word n_type;
339951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf32_Nhdr;
340951a39d68df598db08dfced8b4707755864a0492Ying Wang
341951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct elf64_note {
342951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word n_namesz;
343951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word n_descsz;
344951a39d68df598db08dfced8b4707755864a0492Ying Wang Elf64_Word n_type;
345951a39d68df598db08dfced8b4707755864a0492Ying Wang} Elf64_Nhdr;
346951a39d68df598db08dfced8b4707755864a0492Ying Wang
347951a39d68df598db08dfced8b4707755864a0492Ying Wang#if ELF_CLASS == ELFCLASS32
348951a39d68df598db08dfced8b4707755864a0492Ying Wang
349951a39d68df598db08dfced8b4707755864a0492Ying Wang#define elfhdr elf32_hdr
350951a39d68df598db08dfced8b4707755864a0492Ying Wang#define elf_phdr elf32_phdr
351951a39d68df598db08dfced8b4707755864a0492Ying Wang#define elf_note elf32_note
352951a39d68df598db08dfced8b4707755864a0492Ying Wang
353951a39d68df598db08dfced8b4707755864a0492Ying Wang#else
354951a39d68df598db08dfced8b4707755864a0492Ying Wang
355951a39d68df598db08dfced8b4707755864a0492Ying Wang#define elfhdr elf64_hdr
356951a39d68df598db08dfced8b4707755864a0492Ying Wang#define elf_phdr elf64_phdr
357951a39d68df598db08dfced8b4707755864a0492Ying Wang#define elf_note elf64_note
358951a39d68df598db08dfced8b4707755864a0492Ying Wang
359951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
360951a39d68df598db08dfced8b4707755864a0492Ying Wang
361951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
362