diff options
Diffstat (limited to 'kernel/old/include/elf.h')
-rw-r--r-- | kernel/old/include/elf.h | 235 |
1 files changed, 0 insertions, 235 deletions
diff --git a/kernel/old/include/elf.h b/kernel/old/include/elf.h deleted file mode 100644 index a43e5c3..0000000 --- a/kernel/old/include/elf.h +++ /dev/null @@ -1,235 +0,0 @@ -/** -** @file elf.h -** -** @author Warren R. Carithers -** -** @brief ELF format declarations -*/ - -#ifndef ELF_H_ -#define ELF_H_ - -#include <common.h> - -#ifndef ASM_SRC - -/* -** Start of C-only definitions -*/ - -// 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 - -// ELF magic number - first four bytes -#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 - 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 - } 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 - -// ELF classes -#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 - -// 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 - -// 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 -} 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 - -// 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 - -// 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 -} elfsecthdr_t; - -#define SZ_ELFSECTHDR sizeof(elfsecthdr_t) - -// sh_name -#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 - -// 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 - -// 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 -} 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 - -// p_flags -#define PF_E 0x1 -#define PF_W 0x2 -#define PF_R 0x4 -#define PF_MASKPROC 0xf0000000 - -/* -** Globals -*/ - -/* -** Prototypes -*/ - -#endif /* !ASM_SRC */ - -#endif |