54#define EI_ABIVERSION 8
78typedef struct elf_hdr {
119#define SHT_PROGBITS 1
131#define SHT_INIT_ARRAY 14
132#define SHT_FINI_ARRAY 15
133#define SHT_PREINIT_ARRAY 16
135#define SHT_SYMTAB_SHNDX 18
138#define SHT_LOPROC 0x70000000
139#define SHT_HIPROC 0x7fffffff
140#define SHT_LOUSER 0x80000000
141#define SHT_HIUSER 0xffffffff
153#define SHF_WRITE BIT(0)
154#define SHF_ALLOC BIT(1)
155#define SHF_EXECINSTR BIT(2)
156#define SHF_MERGE BIT(4)
157#define SHF_STRINGS BIT(5)
158#define SHF_INFO_LINK BIT(6)
159#define SHF_LINK_ORDER BIT(7)
160#define SHF_GROUP BIT(9)
161#define SHF_TLS BIT(10)
162#define SHF_MASKPROC 0xf0000000
174#define SHN_ABS 0xfff1
184typedef struct elf_shdr {
256typedef struct elf_sym {
272#define ELF32_ST_BIND(info) ((info) >> 4)
281#define ELF32_ST_TYPE(info) ((info) & 0xf)
292typedef struct elf_rela {
307typedef struct elf_rel {
332#define ELF32_R_SYM(i) ((i) >> 8)
341#define ELF32_R_TYPE(i) ((uint8_t)(i))
353typedef struct elf_prog {
Various common macros used throughout the codebase.
#define EI_NIDENT
Size of elf_hdr::ident.
Definition elf.h:57
int elf_load(const char *fn, struct klibrary *shell, elf_prog_t *out)
Load an ELF binary.
void elf_free(elf_prog_t *prog)
Free a loaded ELF program.
static uint32_t("Please see purupuru_effect_t for modern equivalent.") PURUPURU_EFFECT2_UINTENSITY(uint8_t x)
Definition purupuru.h:96
Macros to help dealing with register fields.
ELF file header.
Definition elf.h:78
uint32_t entry
Entry point.
Definition elf.h:83
uint16_t shnum
Section header entry count.
Definition elf.h:91
uint16_t shstrndx
String table section index.
Definition elf.h:92
uint16_t ehsize
ELF header size in bytes.
Definition elf.h:87
uint16_t phnum
Program header entry count.
Definition elf.h:89
uint16_t phentsize
Program header entry size.
Definition elf.h:88
uint32_t shoff
Section header offset.
Definition elf.h:85
uint16_t shentsize
Section header entry size.
Definition elf.h:90
uint16_t machine
ELF file architecture.
Definition elf.h:81
uint32_t phoff
Program header offset.
Definition elf.h:84
uint16_t type
ELF file type.
Definition elf.h:80
uint32_t version
Object file version.
Definition elf.h:82
uint32_t flags
Processor flags.
Definition elf.h:86
Kernel-specific definition of a loaded ELF binary.
Definition elf.h:353
uintptr_t lib_get_name
Pointer to get_name() function.
Definition elf.h:358
void * data
Pointer to program in memory.
Definition elf.h:354
uintptr_t lib_get_version
Pointer to get_version() function.
Definition elf.h:359
uintptr_t lib_close
Pointer to library's close function.
Definition elf.h:361
uintptr_t lib_open
Pointer to library's open function.
Definition elf.h:360
uint32_t size
Memory image size (rounded up to page size)
Definition elf.h:355
ELF Relocation entry (without explicit addend).
Definition elf.h:307
uint32_t info
Symbol and type.
Definition elf.h:309
uint32_t offset
Offset within section.
Definition elf.h:308
ELF Relocation entry (with explicit addend).
Definition elf.h:292
uint32_t info
Symbol and type.
Definition elf.h:294
uint32_t offset
Offset within section.
Definition elf.h:293
int32_t addend
Constant addend for the symbol.
Definition elf.h:295
ELF Section header.
Definition elf.h:184
uint32_t name
Index into string table.
Definition elf.h:185
uint32_t info
Section header extra info.
Definition elf.h:192
uint32_t type
Section type.
Definition elf.h:186
uint32_t addralign
Alignment constraints.
Definition elf.h:193
uint32_t flags
Section flags.
Definition elf.h:187
uint32_t offset
On-disk offset.
Definition elf.h:189
uint32_t entsize
Fixed-size table entry sizes.
Definition elf.h:194
uint32_t link
Section header table index link.
Definition elf.h:191
uint32_t addr
In-memory offset.
Definition elf.h:188
uint32_t size
Size (if SHT_NOBITS, amount of 0s needed)
Definition elf.h:190
Symbol table entry.
Definition elf.h:256
uint16_t shndx
Section index.
Definition elf.h:262
uint32_t size
Size of the symbol.
Definition elf.h:259
uint32_t value
Value of the symbol.
Definition elf.h:258
uint8_t other
0.
Definition elf.h:261
uint8_t info
Symbol type and binding.
Definition elf.h:260
uint32_t name
Index into file's string table.
Definition elf.h:257