105,7 → 105,35 |
#define EE_UNSUPPORTED 4 // Non-supported ELF (e.g. dynamic ELFs) |
|
|
/* |
/** |
* ELF section types |
*/ |
#define SHT_NULL 0 |
#define SHT_PROGBITS 1 |
#define SHT_SYMTAB 2 |
#define SHT_STRTAB 3 |
#define SHT_RELA 4 |
#define SHT_HASH 5 |
#define SHT_DYNAMIC 6 |
#define SHT_NOTE 7 |
#define SHT_NOBITS 8 |
#define SHT_REL 9 |
#define SHT_SHLIB 10 |
#define SHT_DYNSYM 11 |
#define SHT_LOPROC 0x70000000 |
#define SHT_HIPROC 0x7fffffff |
#define SHT_LOUSER 0x80000000 |
#define SHT_HIUSER 0xffffffff |
|
/** |
* ELF section flags |
*/ |
#define SHF_WRITE 0x1 |
#define SHF_ALLOC 0x2 |
#define SHF_EXECINSTR 0x4 |
#define SHF_MASKPROC 0xf0000000 |
|
/** |
* 32-bit ELF data types |
*/ |
typedef __u32 elf32_addr; |
114,7 → 142,7 |
typedef int elf32_sword; |
typedef __u32 elf32_word; |
|
/* |
/** |
* 32-bit ELF header |
*/ |
struct elf32_header { |
134,6 → 162,28 |
elf32_half e_shstrndx; |
}; |
|
|
/* |
* 32-bit ELF section header |
*/ |
struct elf32_section_header { |
elf32_word sh_name; |
elf32_word sh_type; |
elf32_word sh_flags; |
elf32_addr sh_addr; |
elf32_off sh_offset; |
elf32_word sh_size; |
elf32_word sh_link; |
elf32_word sh_info; |
elf32_word sh_addralign; |
elf32_word sh_entsize; |
} |
|
|
typedef struct elf32_header elf32_header_t; |
typedef struct elf32_section_header elf32_section_header_t; |
|
|
extern int elf32_load(__address header, as_t * as); |
|
#endif |