Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
elf.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2023 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 */
7#ifndef ZEPHYR_LLEXT_ELF_H
8#define ZEPHYR_LLEXT_ELF_H
9
10#include <stdint.h>
11
22#ifdef __cplusplus
23extern "C" {
24#endif
25
36
51
52
64#define EI_NIDENT 16
65
69struct elf32_ehdr {
71 unsigned char e_ident[EI_NIDENT];
98};
99
105 unsigned char e_ident[EI_NIDENT];
132};
133
135#define ET_REL 1
136
138#define ET_EXEC 2
139
141#define ET_DYN 3
142
144#define ET_CORE 4
145
170};
171
196};
197
198#define SHT_PROGBITS 0x1
199#define SHT_SYMTAB 0x2
200#define SHT_STRTAB 0x3
201#define SHT_RELA 0x4
202#define SHT_NOBITS 0x8
203#define SHT_REL 0x9
204#define SHT_DYNSYM 0xB
205
206#define SHF_WRITE 0x1
207#define SHF_ALLOC 0x2
208#define SHF_EXECINSTR 0x4
209
213struct elf32_sym {
221 unsigned char st_info;
223 unsigned char st_other;
226};
227
231struct elf64_sym {
239 unsigned char st_info;
241 unsigned char st_other;
244};
245
246#define SHN_UNDEF 0
247#define SHN_ABS 0xfff1
248#define SHN_COMMON 0xfff2
249
250#define STT_NOTYPE 0
251#define STT_OBJECT 1
252#define STT_FUNC 2
253#define STT_SECTION 3
254#define STT_FILE 4
255#define STT_COMMON 5
256#define STT_LOOS 10
257#define STT_HIOS 12
258#define STT_LOPROC 13
259#define STT_HIPROC 15
260
261#define STB_LOCAL 0
262#define STB_GLOBAL 1
263#define STB_WEAK 2
264#define STB_LOOS 10
265#define STB_HIOS 12
266#define STB_LOPROC 13
267#define STB_HIPROC 15
268
274#define ELF32_ST_BIND(i) ((i) >> 4)
275
281#define ELF32_ST_TYPE(i) ((i) & 0xf)
282
288#define ELF64_ST_BIND(i) ((i) >> 4)
289
290
296#define ELF64_ST_TYPE(i) ((i) & 0xf)
297
301struct elf32_rel {
304
307};
308
314#define ELF32_R_SYM(i) ((i) >> 8)
315
321#define ELF32_R_TYPE(i) ((i) & 0xff)
322
326struct elf64_rel {
331};
332
337#define ELF64_R_SYM(i) ((i) >> 32)
338
344#define ELF64_R_TYPE(i) ((i) & 0xffffffff)
345
346#define R_386_NONE 0
347#define R_386_32 1
348#define R_386_PC32 2
349#define R_386_GOT32 3
350#define R_386_PLT32 4
351#define R_386_COPY 5
352#define R_386_GLOB_DAT 6
353#define R_386_JMP_SLOT 7
354#define R_386_RELATIVE 8
355#define R_386_GOTOFF 9
356
357#define R_ARM_NONE 0
358#define R_ARM_PC24 1
359#define R_ARM_ABS32 2
360#define R_ARM_REL32 3
361#define R_ARM_COPY 4
362#define R_ARM_CALL 28
363#define R_ARM_V4BX 40
364
365#define R_XTENSA_NONE 0
366#define R_XTENSA_32 1
367#define R_XTENSA_SLOT0_OP 20
368
381};
382
395};
396
400#define PT_LOAD 1
401
405struct elf32_dyn {
407 union {
411};
412
416struct elf64_dyn {
418 union {
422};
423
424#if defined(CONFIG_64BIT) || defined(__DOXYGEN__)
426typedef struct elf64_ehdr elf_ehdr_t;
428typedef struct elf64_shdr elf_shdr_t;
430typedef struct elf64_phdr elf_phdr_t;
438typedef struct elf64_rela elf_rel_t;
440typedef struct elf64_sym elf_sym_t;
442#define ELF_R_SYM ELF64_R_SYM
444#define ELF_R_TYPE ELF64_R_TYPE
446#define ELF_ST_BIND ELF64_ST_BIND
448#define ELF_ST_TYPE ELF64_ST_TYPE
449#else
451typedef struct elf32_ehdr elf_ehdr_t;
453typedef struct elf32_shdr elf_shdr_t;
455typedef struct elf32_phdr elf_phdr_t;
457typedef elf32_addr elf_addr;
459typedef elf32_half elf_half;
461typedef elf32_word elf_word;
463typedef struct elf32_rel elf_rel_t;
465typedef struct elf32_sym elf_sym_t;
467#define ELF_R_SYM ELF32_R_SYM
469#define ELF_R_TYPE ELF32_R_TYPE
471#define ELF_ST_BIND ELF32_ST_BIND
473#define ELF_ST_TYPE ELF32_ST_TYPE
474#endif
475
476#ifdef __cplusplus
477}
478#endif
479
484#endif /* ZEPHYR_LLEXT_ELF_H */
int32_t elf32_sword
Signed integer.
Definition: elf.h:33
uint16_t elf32_half
Unsigned medium integer.
Definition: elf.h:29
elf64_xword elf_word
Machine sized integer.
Definition: elf.h:436
int32_t elf64_sword
Signed integer.
Definition: elf.h:44
uint16_t elf64_half
Unsigned medium integer.
Definition: elf.h:40
int64_t elf64_sxword
Signed long integer.
Definition: elf.h:48
uint64_t elf64_addr
Unsigned program address.
Definition: elf.h:38
uint32_t elf32_addr
Unsigned program address.
Definition: elf.h:27
uint64_t elf64_xword
Unsigned long integer.
Definition: elf.h:50
uint64_t elf64_off
Unsigned file offset.
Definition: elf.h:42
elf64_addr elf_addr
Machine sized program address.
Definition: elf.h:432
uint32_t elf64_word
Unsigned integer.
Definition: elf.h:46
uint32_t elf32_off
Unsigned file offset.
Definition: elf.h:31
uint32_t elf32_word
Unsigned integer.
Definition: elf.h:35
elf64_half elf_half
Machine sized small integer.
Definition: elf.h:434
struct elf64_rela elf_rel_t
Machine sized relocation struct.
Definition: elf.h:438
#define EI_NIDENT
ELF identifier block.
Definition: elf.h:64
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__INT32_TYPE__ int32_t
Definition: stdint.h:74
__UINT64_TYPE__ uint64_t
Definition: stdint.h:91
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
__INT64_TYPE__ int64_t
Definition: stdint.h:75
Dynamic section entry(32-bit)
Definition: elf.h:405
elf32_sword d_tag
Definition: elf.h:406
union elf32_dyn::@236 d_un
elf32_addr d_ptr
Definition: elf.h:409
elf32_word d_val
Definition: elf.h:408
ELF Header(32-bit)
Definition: elf.h:69
elf32_off e_shoff
Section header table offset.
Definition: elf.h:83
elf32_half e_machine
Machine type.
Definition: elf.h:75
elf32_half e_phentsize
Program header count.
Definition: elf.h:89
elf32_word e_flags
Processor specific flags.
Definition: elf.h:85
elf32_addr e_entry
Virtual address of entry.
Definition: elf.h:79
elf32_half e_phnum
Program header count.
Definition: elf.h:91
elf32_half e_shentsize
Section header size.
Definition: elf.h:93
elf32_half e_ehsize
ELF header size.
Definition: elf.h:87
elf32_half e_shstrndx
Section header containing section header string table.
Definition: elf.h:97
elf32_word e_version
Object file version.
Definition: elf.h:77
elf32_half e_shnum
Section header count.
Definition: elf.h:95
unsigned char e_ident[16]
Magic string identifying ELF binary.
Definition: elf.h:71
elf32_half e_type
Type of ELF.
Definition: elf.h:73
elf32_off e_phoff
Program header table offset.
Definition: elf.h:81
Program header(32-bit)
Definition: elf.h:372
elf32_word p_flags
Definition: elf.h:379
elf32_addr p_paddr
Definition: elf.h:376
elf32_word p_memsz
Definition: elf.h:378
elf32_off p_offset
Definition: elf.h:374
elf32_addr p_vaddr
Definition: elf.h:375
elf32_word p_align
Definition: elf.h:380
elf32_word p_type
Definition: elf.h:373
elf32_word p_filesz
Definition: elf.h:377
Relocation entry for 32-bit ELFs.
Definition: elf.h:301
elf32_addr r_offset
Offset in the section to perform a relocation.
Definition: elf.h:303
elf32_word r_info
Information about the relocation, related symbol and type.
Definition: elf.h:306
Section Header(32-bit)
Definition: elf.h:149
elf32_addr sh_addr
Address of section in the image.
Definition: elf.h:157
elf32_word sh_name
Section header name index in section header string table.
Definition: elf.h:151
elf32_word sh_type
Section type.
Definition: elf.h:153
elf32_word sh_flags
Section header attributes.
Definition: elf.h:155
elf32_word sh_size
Section size in bytes.
Definition: elf.h:161
elf32_word sh_info
Section info, depends on section type.
Definition: elf.h:165
elf32_word sh_addralign
Section address alignment.
Definition: elf.h:167
elf32_off sh_offset
Location of section in the ELF binary in bytes.
Definition: elf.h:159
elf32_word sh_entsize
Section contains table of fixed size entries sh_entsize bytes large.
Definition: elf.h:169
elf32_word sh_link
Section header table link index, depends on section type.
Definition: elf.h:163
Symbol table entry(32-bit)
Definition: elf.h:213
elf32_half st_shndx
Symbols related section given by section header index.
Definition: elf.h:225
elf32_word st_name
Name of the symbol as an index into the symbol string table.
Definition: elf.h:215
elf32_addr st_value
Value or location of the symbol.
Definition: elf.h:217
unsigned char st_other
Symbol visibility.
Definition: elf.h:223
unsigned char st_info
Symbol binding and type information.
Definition: elf.h:221
elf32_word st_size
Size of the symbol.
Definition: elf.h:219
Dynamic section entry(64-bit)
Definition: elf.h:416
elf64_sxword d_tag
Definition: elf.h:417
elf64_addr d_ptr
Definition: elf.h:420
union elf64_dyn::@237 d_un
elf64_xword d_val
Definition: elf.h:419
ELF Header(64-bit)
Definition: elf.h:103
elf64_addr e_entry
Virtual address of entry.
Definition: elf.h:113
elf64_off e_shoff
Section header table offset.
Definition: elf.h:117
elf64_half e_shentsize
Section header size.
Definition: elf.h:127
elf64_half e_phnum
Program header count.
Definition: elf.h:125
elf64_half e_shstrndx
Section header containing section header string table.
Definition: elf.h:131
elf64_half e_phentsize
Program header size.
Definition: elf.h:123
elf64_word e_flags
Processor specific flags.
Definition: elf.h:119
elf64_half e_ehsize
ELF header size.
Definition: elf.h:121
elf64_word e_version
Object file version.
Definition: elf.h:111
elf64_half e_type
Type of ELF.
Definition: elf.h:107
elf64_off e_phoff
Program header table offset.
Definition: elf.h:115
elf64_half e_machine
Machine type.
Definition: elf.h:109
unsigned char e_ident[16]
Magic string identifying ELF binary.
Definition: elf.h:105
elf64_half e_shnum
Section header count.
Definition: elf.h:129
Program header(64-bit)
Definition: elf.h:386
elf64_xword p_filesz
Definition: elf.h:391
elf64_addr p_vaddr
Definition: elf.h:389
elf64_word p_type
Definition: elf.h:387
elf64_addr p_paddr
Definition: elf.h:390
elf64_word p_flags
Definition: elf.h:393
elf64_xword p_align
Definition: elf.h:394
elf64_xword p_memsz
Definition: elf.h:392
elf64_off p_offset
Definition: elf.h:388
Relocation entry for 64-bit ELFs.
Definition: elf.h:326
elf64_addr r_offset
Offset in section to perform a relocation.
Definition: elf.h:328
elf64_xword r_info
Information about relocation, related symbol and type.
Definition: elf.h:330
Section Header(64-bit)
Definition: elf.h:175
elf64_xword sh_size
Section size in bytes.
Definition: elf.h:187
elf64_xword sh_entsize
Section contains table of fixed size entries sh_entsize bytes large.
Definition: elf.h:195
elf64_word sh_link
Section header table link index, depends on section type.
Definition: elf.h:189
elf64_addr sh_addr
Address of section in the image.
Definition: elf.h:183
elf64_off sh_offset
Location of section in the ELF binary in bytes.
Definition: elf.h:185
elf64_xword sh_addralign
Section address alignment.
Definition: elf.h:193
elf64_word sh_info
Section info, depends on section type.
Definition: elf.h:191
elf64_xword sh_flags
Section header attributes.
Definition: elf.h:181
elf64_word sh_type
Section type.
Definition: elf.h:179
elf64_word sh_name
Section header name index in section header string table.
Definition: elf.h:177
Symbol table entry(64-bit)
Definition: elf.h:231
elf64_half st_shndx
Symbols related section given by section header index.
Definition: elf.h:243
elf64_addr st_value
Value or location of the symbol.
Definition: elf.h:235
unsigned char st_other
Symbol visibility.
Definition: elf.h:241
unsigned char st_info
Symbol binding and type information.
Definition: elf.h:239
elf64_xword st_size
Size of the symbol.
Definition: elf.h:237
elf64_word st_name
Name of the symbol as an index into the symbol string table.
Definition: elf.h:233