GEL  0.99
gel_elf.h
Go to the documentation of this file.
1 /*
2  * ELF definitions
3  *
4  * This file is part of the GEL++ library.
5  * Copyright (c) 2016, IRIT- UPS
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 #ifndef GEL_ELF_H
22 #define GEL_ELF_H
23 
24 #include <gel/common.h>
25 #include <gel/gel.h>
26 
28 
29 #define ET_NONE 0
30 #define ET_REL 1
31 #define ET_EXEC 2
32 #define ET_DYN 3
33 #define ET_CORE 4
34 
36  typedef u16_t Elf32_Half;
37  typedef u32_t Elf32_Off;
38  typedef s32_t Elf32_Sword;
39  typedef u32_t Elf32_Word;
40 
41 /* ELF header identification */
42 #define EI_MAG0 0
43 #define EI_MAG1 1
44 #define EI_MAG2 2
45 #define EI_MAG3 3
46 #define EI_CLASS 4
47 #define EI_DATA 5
48 #define EI_VERSION 6
49 #define EI_PAD 7
50 #define EI_OSABI 7
51 #define EI_NIDENT 16
52 
53  /* ELF identification */
54 #define ELFMAG0 0x7f
55 #define ELFMAG1 'E'
56 #define ELFMAG2 'L'
57 #define ELFMAG3 'F'
58 
59 /* File classes */
60 #define ELFCLASSNONE 0
61 #define ELFCLASS32 1
62 #define ELFCLASS64 2
63 
64 
65 /* File data encoding */
66 #define ELFDATANONE 0
67 #define ELFDATA2LSB 1
68 #define ELFDATA2MSB 2
69 
70 
71 /* Versions */
72 #define EV_NONE 0
73 #define EV_CURRENT 1
74 
75 
76  /* auxiliairy vector types */
77  #define AT_NULL 0
78  #define AT_IGNORE 1
79  #define AT_EXECFD 2
80  #define AT_PHDR 3
81  #define AT_PHENT 4
82  #define AT_PHNUM 5
83  #define AT_PAGESZ 6
84  #define AT_BASE 7
85  #define AT_FLAGS 8
86  #define AT_ENTRY 9
87  #define AT_DCACHEBSIZE 10
88  #define AT_ICACHEBSIZE 11
89  #define AT_UCACHEBSIZE 12
90 
91 
92 typedef struct {
93  unsigned char e_ident[EI_NIDENT];
107 } Elf32_Ehdr;
108 
109 /* Section Header */
110 typedef struct {
121 } Elf32_Shdr;
122 
123 /* sh_type */
124 #define SHT_NULL 0
125 #define SHT_PROGBITS 1
126 #define SHT_SYMTAB 2
127 #define SHT_STRTAB 3
128 #define SHT_RELA 4
129 #define SHT_HASH 5
130 #define SHT_DYNAMIC 6
131 #define SHT_NOTE 7
132 #define SHT_NOBITS 8
133 #define SHT_REL 9
134 #define SHT_SHLIB 10
135 #define SHT_DYNSYM 11
136 #define SHT_LOPROC 0x70000000
137 #define SHT_HIPROC 0x7fffffff
138 #define SHT_LOUSER 0x80000000
139 #define SHT_HIUSER 0xffffffff
140 
141 /* sh_flags */
142 #define SHF_WRITE 0x00000001
143 #define SHF_ALLOC 0x00000002
144 #define SHF_EXECINSTR 0x00000004
145 #define SHF_MASKPROC 0xf0000000
146 
151 typedef struct {
160 } Elf32_Phdr;
161 
162 #define DT_NULL 0
163 #define DT_NEEDED 1
164 #define DT_STRTAB 5
165 
166 /* Elf32_Phdr p_flags */
167 #define PF_X (1 << 0)
168 #define PF_W (1 << 1)
169 #define PF_R (1 << 2)
170 #define PF_MASKOS 0x0ff00000
171 #define PF_MASKPROC 0xf0000000
172 
173 /* Legal values for note segment descriptor types for core files. */
174 typedef struct {
176  union {
179  } d_un;
180 } Elf32_Dyn;
181 
182 
183 /* ELF32_Sym */
184 typedef struct {
188  unsigned char st_info;
189  unsigned char st_other;
191 } Elf32_Sym;
192 
193 #define ELF32_ST_BIND(i) ((i) >> 4)
194 #define ELF32_ST_TYPE(i) ((i) & 0xf)
195 #define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
196 
197 #define STB_LOCAL 0
198 #define STB_GLOBAL 1
199 #define STB_WEAK 2
200 
201 #define STT_NOTYPE 0
202 #define STT_OBJECT 1
203 #define STT_FUNC 2
204 #define STT_SECTION 3
205 #define STT_FILE 4
206 
207 
208 #define PT_NULL 0
209 #define PT_LOAD 1
210 #define PT_DYNAMIC 2
211 #define PT_INTERP 3
212 #define PT_NOTE 4
213 #define PT_SHLIB 5
214 #define PT_PHDR 6
215 #define PT_LOPROC 0x70000000
216 #define PT_HIPROC 0x7fffffff
217 
218 
219 typedef struct {
222 } Elf32_Rel;
223 
224 typedef struct {
228 } Elf32_Rela;
229 
230 #define ELF32_R_SYM(i) ((i)>>8)
231 #define ELF32_R_TYPE(i) ((unsigned char)(i))
232 #define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t))
233 
234 #define SHN_UNDEF 0
235 #define SHN_LORESERVE 0x0000FF00
236 #define SHN_HIRESERVE 0x0000FFFF
237 #define SHN_ABS 0x0000FFF1
238 #define SHN_COMMON 0x0000FFF2
239 
241 
242 #endif /* GEL_ELF_H */
243 
244 
#define __END_DECLS
Definition: common.h:29
#define __BEGIN_DECLS
Definition: common.h:28
s32_t Elf32_Sword
Definition: gel_elf.h:38
u32_t Elf32_Word
Definition: gel_elf.h:39
u32_t Elf32_Off
Definition: gel_elf.h:37
vaddr_t Elf32_Addr
Definition: gel_elf.h:35
#define EI_NIDENT
Definition: gel_elf.h:51
u16_t Elf32_Half
Definition: gel_elf.h:36
Definition: gel_elf.h:174
Elf32_Word d_val
Definition: gel_elf.h:177
Elf32_Sword d_tag
Definition: gel_elf.h:175
Elf32_Addr d_ptr
Definition: gel_elf.h:178
Definition: gel_elf.h:92
Elf32_Off e_shoff
Definition: gel_elf.h:99
Elf32_Half e_ehsize
Definition: gel_elf.h:101
Elf32_Half e_shnum
Definition: gel_elf.h:105
Elf32_Half e_machine
Definition: gel_elf.h:95
Elf32_Off e_phoff
Definition: gel_elf.h:98
Elf32_Half e_phnum
Definition: gel_elf.h:103
Elf32_Half e_shstrndx
Definition: gel_elf.h:106
Elf32_Half e_type
Definition: gel_elf.h:94
Elf32_Word e_flags
Definition: gel_elf.h:100
Elf32_Word e_version
Definition: gel_elf.h:96
Elf32_Half e_shentsize
Definition: gel_elf.h:104
Elf32_Addr e_entry
Definition: gel_elf.h:97
Elf32_Half e_phentsize
Definition: gel_elf.h:102
Definition: gel_elf.h:151
Elf32_Addr p_vaddr
Definition: gel_elf.h:154
Elf32_Word p_flags
Definition: gel_elf.h:158
Elf32_Word p_type
Definition: gel_elf.h:152
Elf32_Off p_offset
Definition: gel_elf.h:153
Elf32_Word p_filesz
Definition: gel_elf.h:156
Elf32_Word p_memsz
Definition: gel_elf.h:157
Elf32_Addr p_paddr
Definition: gel_elf.h:155
Elf32_Word p_align
Definition: gel_elf.h:159
Definition: gel_elf.h:219
Elf32_Word r_info
Definition: gel_elf.h:221
Elf32_Addr r_offset
Definition: gel_elf.h:220
Definition: gel_elf.h:224
Elf32_Sword r_addend
Definition: gel_elf.h:227
Elf32_Addr r_offset
Definition: gel_elf.h:225
Elf32_Word r_info
Definition: gel_elf.h:226
Definition: gel_elf.h:110
Elf32_Word sh_entsize
Definition: gel_elf.h:120
Elf32_Word sh_flags
Definition: gel_elf.h:113
Elf32_Word sh_addralign
Definition: gel_elf.h:119
Elf32_Off sh_offset
Definition: gel_elf.h:115
Elf32_Word sh_name
Definition: gel_elf.h:111
Elf32_Addr sh_addr
Definition: gel_elf.h:114
Elf32_Word sh_size
Definition: gel_elf.h:116
Elf32_Word sh_type
Definition: gel_elf.h:112
Elf32_Word sh_link
Definition: gel_elf.h:117
Elf32_Word sh_info
Definition: gel_elf.h:118
Definition: gel_elf.h:184
Elf32_Word st_size
Definition: gel_elf.h:187
unsigned char st_other
Definition: gel_elf.h:189
Elf32_Half st_shndx
Definition: gel_elf.h:190
Elf32_Word st_name
Definition: gel_elf.h:185
unsigned char st_info
Definition: gel_elf.h:188
Elf32_Addr st_value
Definition: gel_elf.h:186
int32_t s32_t
Definition: types.h:33
__BEGIN_DECLS typedef uint16_t u16_t
Definition: types.h:30
uint32_t u32_t
Definition: types.h:32
uint32_t vaddr_t
Definition: types.h:36