Changes in kernel/generic/include/lib/elf.h [666f492:c0699467] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/lib/elf.h
r666f492 rc0699467 36 36 #define KERN_ELF_H_ 37 37 38 #include <typedefs.h> 39 #include <abi/elf.h> 38 40 #include <arch/elf.h> 39 #include <typedefs.h>40 41 /**42 * current ELF version43 */44 #define EV_CURRENT 145 46 /**47 * ELF types48 */49 #define ET_NONE 0 /* No type */50 #define ET_REL 1 /* Relocatable file */51 #define ET_EXEC 2 /* Executable */52 #define ET_DYN 3 /* Shared object */53 #define ET_CORE 4 /* Core */54 #define ET_LOPROC 0xff00 /* Processor specific */55 #define ET_HIPROC 0xffff /* Processor specific */56 57 /**58 * ELF machine types59 */60 #define EM_NO 0 /* No machine */61 #define EM_SPARC 2 /* SPARC */62 #define EM_386 3 /* i386 */63 #define EM_MIPS 8 /* MIPS RS3000 */64 #define EM_MIPS_RS3_LE 10 /* MIPS RS3000 LE */65 #define EM_PPC 20 /* PPC32 */66 #define EM_PPC64 21 /* PPC64 */67 #define EM_ARM 40 /* ARM */68 #define EM_SPARCV9 43 /* SPARC64 */69 #define EM_IA_64 50 /* IA-64 */70 #define EM_X86_64 62 /* AMD64/EMT64 */71 72 /**73 * ELF identification indexes74 */75 #define EI_MAG0 076 #define EI_MAG1 177 #define EI_MAG2 278 #define EI_MAG3 379 #define EI_CLASS 4 /* File class */80 #define EI_DATA 5 /* Data encoding */81 #define EI_VERSION 6 /* File version */82 #define EI_OSABI 783 #define EI_ABIVERSION 884 #define EI_PAD 9 /* Start of padding bytes */85 #define EI_NIDENT 16 /* ELF identification table size */86 87 /**88 * ELF magic number89 */90 #define ELFMAG0 0x7f91 #define ELFMAG1 'E'92 #define ELFMAG2 'L'93 #define ELFMAG3 'F'94 95 /**96 * ELF file classes97 */98 #define ELFCLASSNONE 099 #define ELFCLASS32 1100 #define ELFCLASS64 2101 102 /**103 * ELF data encoding types104 */105 #define ELFDATANONE 0106 #define ELFDATA2LSB 1 /* Least significant byte first (little endian) */107 #define ELFDATA2MSB 2 /* Most signigicant byte first (big endian) */108 109 /**110 * ELF error return codes111 */112 #define EE_OK 0 /* No error */113 #define EE_INVALID 1 /* Invalid ELF image */114 #define EE_MEMORY 2 /* Cannot allocate address space */115 #define EE_INCOMPATIBLE 3 /* ELF image is not compatible with current architecture */116 #define EE_UNSUPPORTED 4 /* Non-supported ELF (e.g. dynamic ELFs) */117 #define EE_LOADER 5 /* The image is actually a program loader */118 #define EE_IRRECOVERABLE 6119 120 /**121 * ELF section types122 */123 #define SHT_NULL 0124 #define SHT_PROGBITS 1125 #define SHT_SYMTAB 2126 #define SHT_STRTAB 3127 #define SHT_RELA 4128 #define SHT_HASH 5129 #define SHT_DYNAMIC 6130 #define SHT_NOTE 7131 #define SHT_NOBITS 8132 #define SHT_REL 9133 #define SHT_SHLIB 10134 #define SHT_DYNSYM 11135 #define SHT_LOOS 0x60000000136 #define SHT_HIOS 0x6fffffff137 #define SHT_LOPROC 0x70000000138 #define SHT_HIPROC 0x7fffffff139 #define SHT_LOUSER 0x80000000140 #define SHT_HIUSER 0xffffffff141 142 /**143 * ELF section flags144 */145 #define SHF_WRITE 0x1146 #define SHF_ALLOC 0x2147 #define SHF_EXECINSTR 0x4148 #define SHF_TLS 0x400149 #define SHF_MASKPROC 0xf0000000150 151 /**152 * Symbol binding153 */154 #define STB_LOCAL 0155 #define STB_GLOBAL 1156 #define STB_WEAK 2157 #define STB_LOPROC 13158 #define STB_HIPROC 15159 160 /**161 * Symbol types162 */163 #define STT_NOTYPE 0164 #define STT_OBJECT 1165 #define STT_FUNC 2166 #define STT_SECTION 3167 #define STT_FILE 4168 #define STT_LOPROC 13169 #define STT_HIPROC 15170 171 /**172 * Program segment types173 */174 #define PT_NULL 0175 #define PT_LOAD 1176 #define PT_DYNAMIC 2177 #define PT_INTERP 3178 #define PT_NOTE 4179 #define PT_SHLIB 5180 #define PT_PHDR 6181 #define PT_LOPROC 0x70000000182 #define PT_HIPROC 0x7fffffff183 184 /**185 * Program segment attributes.186 */187 #define PF_X 1188 #define PF_W 2189 #define PF_R 4190 191 /**192 * ELF data types193 *194 * These types are found to be identical in both 32-bit and 64-bit195 * ELF object file specifications. They are the only types used196 * in ELF header.197 *198 */199 typedef uint64_t elf_xword;200 typedef int64_t elf_sxword;201 typedef uint32_t elf_word;202 typedef int32_t elf_sword;203 typedef uint16_t elf_half;204 205 /**206 * 32-bit ELF data types.207 *208 * These types are specific for 32-bit format.209 *210 */211 typedef uint32_t elf32_addr;212 typedef uint32_t elf32_off;213 214 /**215 * 64-bit ELF data types.216 *217 * These types are specific for 64-bit format.218 *219 */220 typedef uint64_t elf64_addr;221 typedef uint64_t elf64_off;222 223 /** ELF header */224 struct elf32_header {225 uint8_t e_ident[EI_NIDENT];226 elf_half e_type;227 elf_half e_machine;228 elf_word e_version;229 elf32_addr e_entry;230 elf32_off e_phoff;231 elf32_off e_shoff;232 elf_word e_flags;233 elf_half e_ehsize;234 elf_half e_phentsize;235 elf_half e_phnum;236 elf_half e_shentsize;237 elf_half e_shnum;238 elf_half e_shstrndx;239 };240 241 struct elf64_header {242 uint8_t e_ident[EI_NIDENT];243 elf_half e_type;244 elf_half e_machine;245 elf_word e_version;246 elf64_addr e_entry;247 elf64_off e_phoff;248 elf64_off e_shoff;249 elf_word e_flags;250 elf_half e_ehsize;251 elf_half e_phentsize;252 elf_half e_phnum;253 elf_half e_shentsize;254 elf_half e_shnum;255 elf_half e_shstrndx;256 };257 258 /**259 * ELF segment header.260 * Segments headers are also known as program headers.261 */262 struct elf32_segment_header {263 elf_word p_type;264 elf32_off p_offset;265 elf32_addr p_vaddr;266 elf32_addr p_paddr;267 elf_word p_filesz;268 elf_word p_memsz;269 elf_word p_flags;270 elf_word p_align;271 };272 273 struct elf64_segment_header {274 elf_word p_type;275 elf_word p_flags;276 elf64_off p_offset;277 elf64_addr p_vaddr;278 elf64_addr p_paddr;279 elf_xword p_filesz;280 elf_xword p_memsz;281 elf_xword p_align;282 };283 284 /**285 * ELF section header286 */287 struct elf32_section_header {288 elf_word sh_name;289 elf_word sh_type;290 elf_word sh_flags;291 elf32_addr sh_addr;292 elf32_off sh_offset;293 elf_word sh_size;294 elf_word sh_link;295 elf_word sh_info;296 elf_word sh_addralign;297 elf_word sh_entsize;298 };299 300 struct elf64_section_header {301 elf_word sh_name;302 elf_word sh_type;303 elf_xword sh_flags;304 elf64_addr sh_addr;305 elf64_off sh_offset;306 elf_xword sh_size;307 elf_word sh_link;308 elf_word sh_info;309 elf_xword sh_addralign;310 elf_xword sh_entsize;311 };312 313 /**314 * ELF symbol table entry315 */316 struct elf32_symbol {317 elf_word st_name;318 elf32_addr st_value;319 elf_word st_size;320 uint8_t st_info;321 uint8_t st_other;322 elf_half st_shndx;323 };324 325 struct elf64_symbol {326 elf_word st_name;327 uint8_t st_info;328 uint8_t st_other;329 elf_half st_shndx;330 elf64_addr st_value;331 elf_xword st_size;332 };333 334 #ifdef __32_BITS__335 typedef struct elf32_header elf_header_t;336 typedef struct elf32_segment_header elf_segment_header_t;337 typedef struct elf32_section_header elf_section_header_t;338 typedef struct elf32_symbol elf_symbol_t;339 #endif340 341 #ifdef __64_BITS__342 typedef struct elf64_header elf_header_t;343 typedef struct elf64_segment_header elf_segment_header_t;344 typedef struct elf64_section_header elf_section_header_t;345 typedef struct elf64_symbol elf_symbol_t;346 #endif347 348 extern const char *elf_error(unsigned int rc);349 41 350 42 /** Interpreter string used to recognize the program loader */
Note:
See TracChangeset
for help on using the changeset viewer.