1 /******************************************************************************
2 * Copyright (c) 2004, 2011 IBM Corporation
4 * This program and the accompanying materials
5 * are made available under the terms of the BSD License
6 * which accompanies this distribution, and is available at
7 * http://www.opensource.org/licenses/bsd-license.php
10 * IBM Corporation - initial implementation
11 *****************************************************************************/
22 /* ELF object file types */
23 #define ET_NONE 0 /* No file type */
24 #define ET_REL 1 /* Relocatable file */
25 #define ET_EXEC 2 /* Executable file */
26 #define ET_DYN 3 /* Shared object file */
27 #define ET_CORE 4 /* Core file */
29 /* ELF object endian */
30 #define ELFDATA2LSB 1 /* 2's complement, little endian */
31 #define ELFDATA2MSB 2 /* 2's complement, big endian */
33 /* Generic ELF header */
45 /* Section types (sh_type) */
46 #define SHT_NULL 0 /* Unused section header */
47 #define SHT_PROGBITS 1 /* Information defined by the program */
48 #define SHT_SYMTAB 2 /* Linker symbol table */
49 #define SHT_STRTAB 3 /* String table */
50 #define SHT_RELA 4 /* "Rela" type relocation entries */
51 #define SHT_HASH 5 /* Symbol hash table */
52 #define SHT_DYNAMIC 6 /* Dynamic linking tables */
53 #define SHT_NOTE 7 /* Note information */
54 #define SHT_NOBITS 8 /* Uninitialized space */
55 #define SHT_REL 9 /* "Rel" type relocation entries */
56 #define SHT_SHLIB 10 /* Reserved */
57 #define SHT_DYNSYM 11 /* Dynamic loader symbol table */
59 /* Section attributs (sh_flags) */
62 #define SHF_EXECINSTR 0x4
64 /* Segment types (p_type) */
65 #define PT_NULL 0 /* Unused entry */
66 #define PT_LOAD 1 /* Loadable segment */
67 #define PT_DYNAMIC 2 /* Dynamic linking tables */
68 #define PT_INTERP 3 /* Program interpreter path name */
69 #define PT_NOTE 4 /* Note sections */
72 int elf_load_file(void *file_addr, unsigned long *entry,
73 int (*pre_load)(void*, long),
74 void (*post_load)(void*, long));
75 int elf_load_file_to_addr(void *file_addr, void *addr, unsigned long *entry,
76 int (*pre_load)(void*, long),
77 void (*post_load)(void*, long));
79 void elf_byteswap_header32(void *file_addr);
80 void elf_byteswap_header64(void *file_addr);
82 unsigned int elf_load_segments32(void *file_addr, signed long offset,
83 int (*pre_load)(void*, long),
84 void (*post_load)(void*, long));
85 unsigned long elf_load_segments64(void *file_addr, signed long offset,
86 int (*pre_load)(void*, long),
87 void (*post_load)(void*, long));
89 long elf_get_base_addr(void *file_addr);
90 long elf_get_base_addr32(void *file_addr);
91 long elf_get_base_addr64(void *file_addr);
92 uint32_t elf_get_eflags_32(void *file_addr);
93 uint32_t elf_get_eflags_64(void *file_addr);
95 void elf_relocate64(void *file_addr, signed long offset);
97 int elf_forth_claim(void *addr, long size);
99 #endif /* __LIBELF_H */