summaryrefslogtreecommitdiff
path: root/include/elf.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/elf.h')
-rw-r--r--include/elf.h306
1 files changed, 153 insertions, 153 deletions
diff --git a/include/elf.h b/include/elf.h
index a43e5c3..bbd5e38 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -18,209 +18,209 @@
*/
// ELF data types (TIS ELF Spec v1.2, May 1995
-typedef uint32_t e32_a; // 32-bit unsigned address
-typedef uint16_t e32_h; // 16-bit unsigned "medium" integer
-typedef uint32_t e32_o; // 32-bit unsigned offset
-typedef int32_t e32_sw; // 32-bit signed "large" integer
-typedef uint32_t e32_w; // 32-bit unsigned "large" integer
-typedef uint8_t e32_si; // 8-bit unsigned "small" integer
+typedef uint32_t e32_a; // 32-bit unsigned address
+typedef uint16_t e32_h; // 16-bit unsigned "medium" integer
+typedef uint32_t e32_o; // 32-bit unsigned offset
+typedef int32_t e32_sw; // 32-bit signed "large" integer
+typedef uint32_t e32_w; // 32-bit unsigned "large" integer
+typedef uint8_t e32_si; // 8-bit unsigned "small" integer
// ELF magic number - first four bytes
-#define ELF_MAGIC 0x464C457FU // "\x7FELF" in little-endian order
-#define EI_NIDENT 16
+#define ELF_MAGIC 0x464C457FU // "\x7FELF" in little-endian order
+#define EI_NIDENT 16
union elfident_u {
- uint8_t bytes[EI_NIDENT]; // array of 16 bytes
+ uint8_t bytes[EI_NIDENT]; // array of 16 bytes
struct {
- uint32_t magic; // magic number
- uint8_t class; // file class
- uint8_t data; // data encoding
- uint8_t version; // file version
- uint8_t osabi; // OS ABI identification
- uint8_t abivers; // ABI version
- uint8_t pad[7]; // padding to 16 bytes
+ uint32_t magic; // magic number
+ uint8_t class; // file class
+ uint8_t data; // data encoding
+ uint8_t version; // file version
+ uint8_t osabi; // OS ABI identification
+ uint8_t abivers; // ABI version
+ uint8_t pad[7]; // padding to 16 bytes
} f;
};
// indices for byte fields in the ident array
-#define EI_MAGIC 0
-# define EI_MAG0 EI_MAGIC
-# define EI_MAG1 1
-# define EI_MAG2 2
-# define EI_MAG3 3
-#define EI_CLASS 4
-#define EI_DATA 5
-#define EI_VERSION 6
-#define EI_OSABI 7
-#define EI_ABIVERSION 8
+#define EI_MAGIC 0
+#define EI_MAG0 EI_MAGIC
+#define EI_MAG1 1
+#define EI_MAG2 2
+#define EI_MAG3 3
+#define EI_CLASS 4
+#define EI_DATA 5
+#define EI_VERSION 6
+#define EI_OSABI 7
+#define EI_ABIVERSION 8
// ELF classes
-#define ELF_CLASS_NONE 0
-#define ELF_CLASS_32 1 // 32-bit objects
-#define ELF_CLASS_64 2 // 64-bit objects
+#define ELF_CLASS_NONE 0
+#define ELF_CLASS_32 1 // 32-bit objects
+#define ELF_CLASS_64 2 // 64-bit objects
// ELF data encoding
-#define ELF_DATA_NONE 0 // invalid data encoding
-#define ELF_DATA_2LSB 1 // two's complement little-endian
-#define ELF_DATA_2MSB 2 // two's complement big-endian
+#define ELF_DATA_NONE 0 // invalid data encoding
+#define ELF_DATA_2LSB 1 // two's complement little-endian
+#define ELF_DATA_2MSB 2 // two's complement big-endian
// ELF versions
-#define ELF_VERSION__NONE 0 // invalid version
-# define EV_NONE ELF_VERSION_NONE
-#define ELF_VERSION__CURRENT 1 // current version
-# define EV_CURRENT ELF_VERSION_CURRENT
+#define ELF_VERSION__NONE 0 // invalid version
+#define EV_NONE ELF_VERSION_NONE
+#define ELF_VERSION__CURRENT 1 // current version
+#define EV_CURRENT ELF_VERSION_CURRENT
// ELF header
//
// field names are from the TIS ELF Spec v1.2, May 1995
typedef struct elfhdr_s {
- union elfident_u e_ident; // file identification
- e32_h e_type; // file type
- e32_h e_machine; // required architecture
- e32_w e_version; // object file version
- e32_a e_entry; // entry point (VA)
- e32_o e_phoff; // offset to program header table (PHT)
- e32_o e_shoff; // offset to section header table (SHT)
- e32_w e_flags; // processor-specific flags
- e32_h e_ehsize; // ELF header size (bytes)
- e32_h e_phentsize; // size of one PHT entry (bytes)
- e32_h e_phnum; // number of PHT entries
- e32_h e_shentsize; // size of one SHT entry (bytes)
- e32_h e_shnum; // number of SHT entries
- e32_h e_shstrndx; // SHT index of the sect. name string table
+ union elfident_u e_ident; // file identification
+ e32_h e_type; // file type
+ e32_h e_machine; // required architecture
+ e32_w e_version; // object file version
+ e32_a e_entry; // entry point (VA)
+ e32_o e_phoff; // offset to program header table (PHT)
+ e32_o e_shoff; // offset to section header table (SHT)
+ e32_w e_flags; // processor-specific flags
+ e32_h e_ehsize; // ELF header size (bytes)
+ e32_h e_phentsize; // size of one PHT entry (bytes)
+ e32_h e_phnum; // number of PHT entries
+ e32_h e_shentsize; // size of one SHT entry (bytes)
+ e32_h e_shnum; // number of SHT entries
+ e32_h e_shstrndx; // SHT index of the sect. name string table
} elfhdr_t;
-#define SZ_ELFHDR sizeof(elfhdr_t)
+#define SZ_ELFHDR sizeof(elfhdr_t)
// field values
// e_type
-#define ET_NONE 0 // no file type
-#define ET_REL 1 // relocatable file
-#define ET_EXEC 2 // executable file
-#define ET_DYN 3 // shared object file
-#define ET_CORE 4 // core file
-#define ET_LO_OS 0xfe00 // processor-specific
-#define ET_HI_OS 0xfeff // processor-specific
-#define ET_LO_CP 0xff00 // processor-specific
-#define ET_HI_CP 0xffff // processor-specific
+#define ET_NONE 0 // no file type
+#define ET_REL 1 // relocatable file
+#define ET_EXEC 2 // executable file
+#define ET_DYN 3 // shared object file
+#define ET_CORE 4 // core file
+#define ET_LO_OS 0xfe00 // processor-specific
+#define ET_HI_OS 0xfeff // processor-specific
+#define ET_LO_CP 0xff00 // processor-specific
+#define ET_HI_CP 0xffff // processor-specific
// e_machine
-#define EM_NONE 0x00 // no machine type
-#define EM_M32 0x01 // AT&T WE 32100
-#define EM_SPARC 0x02 // SUN SPARC
-#define EM_386 0x03 // Intel Architecture
-#define EM_68K 0x04 // Motorola 68000
-#define EM_88K 0x05 // Motorola 88000
-#define EM_IAMCU 0x06 // Intel MCU
-#define EM_860 0x07 // Intel 80860
-#define EM_MIPS 0x08 // MIPS RS3000 Big-Endian
-#define EM_S370 0x09 // IBM System/370
-#define EM_MIPS_RS3_LE 0x0a // MIPS RS3000 Big-Endian
-#define EM_SPARC32PLLUS 0x12 // Sun "v8plus"
-#define EM_PPC 0x14 // IBM PowerPC
-#define EM_PPC64 0x15 // IBM PowerPC 64-bit
-#define EM_S390 0x16 // IBM System/390
-#define EM_ARM 0x28 // ARM up to V7/AArch32
-#define EM_SPARCV9 0x2b // SPARC V9 64-bit
-#define EM_IA_64 0x32 // Intel Itanium (Merced)
-#define EM_MIPS_X 0x32 // Stanford MIPS-X
-#define EM_X86_64 0x3E // AMD x86-64 (Intel64)
-#define EM_PDP11 0x40 // DEC PDP-11
-#define EM_VAX 0x4b // DEC VAX
-#define EM_AARCH64 0xb7 // ARM AArch64
-#define EM_Z80 0xec // Zilog Z-80
-#define EM_AMDGPU 0xf0 // AMD GPU
-#define EM_RISCV 0xf3 // RISC-V
-#define EM_BPF 0xf7 // Berkeley Packet Filter
+#define EM_NONE 0x00 // no machine type
+#define EM_M32 0x01 // AT&T WE 32100
+#define EM_SPARC 0x02 // SUN SPARC
+#define EM_386 0x03 // Intel Architecture
+#define EM_68K 0x04 // Motorola 68000
+#define EM_88K 0x05 // Motorola 88000
+#define EM_IAMCU 0x06 // Intel MCU
+#define EM_860 0x07 // Intel 80860
+#define EM_MIPS 0x08 // MIPS RS3000 Big-Endian
+#define EM_S370 0x09 // IBM System/370
+#define EM_MIPS_RS3_LE 0x0a // MIPS RS3000 Big-Endian
+#define EM_SPARC32PLLUS 0x12 // Sun "v8plus"
+#define EM_PPC 0x14 // IBM PowerPC
+#define EM_PPC64 0x15 // IBM PowerPC 64-bit
+#define EM_S390 0x16 // IBM System/390
+#define EM_ARM 0x28 // ARM up to V7/AArch32
+#define EM_SPARCV9 0x2b // SPARC V9 64-bit
+#define EM_IA_64 0x32 // Intel Itanium (Merced)
+#define EM_MIPS_X 0x32 // Stanford MIPS-X
+#define EM_X86_64 0x3E // AMD x86-64 (Intel64)
+#define EM_PDP11 0x40 // DEC PDP-11
+#define EM_VAX 0x4b // DEC VAX
+#define EM_AARCH64 0xb7 // ARM AArch64
+#define EM_Z80 0xec // Zilog Z-80
+#define EM_AMDGPU 0xf0 // AMD GPU
+#define EM_RISCV 0xf3 // RISC-V
+#define EM_BPF 0xf7 // Berkeley Packet Filter
// ELF section header
//
// field names are from the TIS ELF Spec v1.2, May 1995
typedef struct shdr_s {
- e32_w sh_name; // section name (index into string table)
- e32_w sh_type; // section contents/semantics
- e32_w sh_flags; // attribute flag bits
- e32_a sh_addr; // 0, or load point of this section in memory
- e32_o sh_offset; // byte offset within the file
- e32_w sh_size; // section size in bytes
- e32_w sh_link; // section header index table link
- e32_w sh_info; // "extra information"
- e32_w sh_addralign; // required alignment
- e32_w sh_entsize; // 0, or size of each entry in the section
+ e32_w sh_name; // section name (index into string table)
+ e32_w sh_type; // section contents/semantics
+ e32_w sh_flags; // attribute flag bits
+ e32_a sh_addr; // 0, or load point of this section in memory
+ e32_o sh_offset; // byte offset within the file
+ e32_w sh_size; // section size in bytes
+ e32_w sh_link; // section header index table link
+ e32_w sh_info; // "extra information"
+ e32_w sh_addralign; // required alignment
+ e32_w sh_entsize; // 0, or size of each entry in the section
} elfsecthdr_t;
-#define SZ_ELFSECTHDR sizeof(elfsecthdr_t)
+#define SZ_ELFSECTHDR sizeof(elfsecthdr_t)
// sh_name
-#define SHN_UNDEF 0
+#define SHN_UNDEF 0
// sh_type
-#define SHT_NULL 0x00
-#define SHT_PROGBITS 0x01
-#define SHT_SYMTAB 0x02
-#define SHT_STRTAB 0x03
-#define SHT_RELA 0x04
-#define SHT_HASH 0x05
-#define SHT_DYNAMIC 0x06
-#define SHT_NOTE 0x07
-#define SHT_NOBITS 0x08
-#define SHT_REL 0x09
-#define SHT_SHLIB 0x0a
-#define SHT_DYNSYM 0x0b
-#define SHT_LO_CP 0x70000000
-#define SHT_HI_CP 0x7fffffff
-#define SHT_LO_US 0x80000000
-#define SHT_HI_US 0x8fffffff
+#define SHT_NULL 0x00
+#define SHT_PROGBITS 0x01
+#define SHT_SYMTAB 0x02
+#define SHT_STRTAB 0x03
+#define SHT_RELA 0x04
+#define SHT_HASH 0x05
+#define SHT_DYNAMIC 0x06
+#define SHT_NOTE 0x07
+#define SHT_NOBITS 0x08
+#define SHT_REL 0x09
+#define SHT_SHLIB 0x0a
+#define SHT_DYNSYM 0x0b
+#define SHT_LO_CP 0x70000000
+#define SHT_HI_CP 0x7fffffff
+#define SHT_LO_US 0x80000000
+#define SHT_HI_US 0x8fffffff
// sh_flags
-#define SHF_WRITE 0x001
-#define SHF_ALLOC 0x002
-#define SHF_EXECINSTR 0x004
-#define SHF_MERGE 0x010
-#define SHF_STRINGS 0x020
-#define SHF_INFO_LINK 0x040
-#define SHF_LINK_ORDER 0x080
-#define SHF_OS_NONCON 0x100
-#define SHF_GROUP 0x200
-#define SHF_TLS 0x400
-#define SHF_MASKOS 0x0ff00000
-#define SHF_MASKPROC 0xf0000000
+#define SHF_WRITE 0x001
+#define SHF_ALLOC 0x002
+#define SHF_EXECINSTR 0x004
+#define SHF_MERGE 0x010
+#define SHF_STRINGS 0x020
+#define SHF_INFO_LINK 0x040
+#define SHF_LINK_ORDER 0x080
+#define SHF_OS_NONCON 0x100
+#define SHF_GROUP 0x200
+#define SHF_TLS 0x400
+#define SHF_MASKOS 0x0ff00000
+#define SHF_MASKPROC 0xf0000000
// ELF program header
//
// field names are from the TIS ELF Spec v1.2, May 1995
typedef struct phdr_s {
- e32_w p_type; // type of segment
- e32_o p_offset; // byte offset in file
- e32_a p_va; // load point in memory (virtual address)
- e32_a p_pa; // load point in memory (physical address)
- e32_w p_filesz; // number of bytes in this file
- e32_w p_memsz; // number of bytes in memory
- e32_w p_flags; // attribute flag bits
- e32_w p_align; // required alignment
+ e32_w p_type; // type of segment
+ e32_o p_offset; // byte offset in file
+ e32_a p_va; // load point in memory (virtual address)
+ e32_a p_pa; // load point in memory (physical address)
+ e32_w p_filesz; // number of bytes in this file
+ e32_w p_memsz; // number of bytes in memory
+ e32_w p_flags; // attribute flag bits
+ e32_w p_align; // required alignment
} elfproghdr_t;
-#define SZ_ELFPROGHDR sizeof(elfproghdr_t)
+#define SZ_ELFPROGHDR sizeof(elfproghdr_t)
// p_type
-#define PT_NULL 0
-#define PT_LOAD 1
-#define PT_DYNAMIC 2
-#define PT_INTERP 3
-#define PT_NOTE 4
-#define PT_SHLIB 5
-#define PT_PHDR 6
-#define PT_TLS 7
-#define PT_LO_OS 0x70000000
-#define PT_HI_OS 0x7fffffff
-#define PT_LO_CP 0x70000000
-#define PT_HI_CP 0x7fffffff
+#define PT_NULL 0
+#define PT_LOAD 1
+#define PT_DYNAMIC 2
+#define PT_INTERP 3
+#define PT_NOTE 4
+#define PT_SHLIB 5
+#define PT_PHDR 6
+#define PT_TLS 7
+#define PT_LO_OS 0x70000000
+#define PT_HI_OS 0x7fffffff
+#define PT_LO_CP 0x70000000
+#define PT_HI_CP 0x7fffffff
// p_flags
-#define PF_E 0x1
-#define PF_W 0x2
-#define PF_R 0x4
-#define PF_MASKPROC 0xf0000000
+#define PF_E 0x1
+#define PF_W 0x2
+#define PF_R 0x4
+#define PF_MASKPROC 0xf0000000
/*
** Globals
@@ -230,6 +230,6 @@ typedef struct phdr_s {
** Prototypes
*/
-#endif /* !ASM_SRC */
+#endif /* !ASM_SRC */
#endif