Mercurial > ecos
comparison packages/services/objloader/current/include/elf.h @ 2011:662e1b34b811
Added OBJLOADER package.
| author | nickg |
|---|---|
| date | Thu, 07 Jul 2005 10:55:12 +0000 |
| parents | |
| children | 6fd46febe457 |
comparison
equal
deleted
inserted
replaced
| 2010:2379473fdc8d | 2011:662e1b34b811 |
|---|---|
| 1 #ifndef __ELF_H__ | |
| 2 #define __ELF_H__ | |
| 3 | |
| 4 /* ================================================================= | |
| 5 * | |
| 6 * elf.f | |
| 7 * | |
| 8 * ================================================================= | |
| 9 * ####ECOSGPLCOPYRIGHTBEGIN#### | |
| 10 * ------------------------------------------- | |
| 11 * This file is part of eCos, the Embedded Configurable Operating | |
| 12 * System. | |
| 13 * Copyright (C) 2005 eCosCentric Ltd. | |
| 14 * | |
| 15 * eCos is free software; you can redistribute it and/or modify it | |
| 16 * under the terms of the GNU General Public License as published by | |
| 17 * the Free Software Foundation; either version 2 or (at your option) | |
| 18 * any later version. | |
| 19 * | |
| 20 * eCos is distributed in the hope that it will be useful, but | |
| 21 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 23 * General Public License for more details. | |
| 24 * | |
| 25 * You should have received a copy of the GNU General Public License | |
| 26 * along with eCos; if not, write to the Free Software Foundation, | |
| 27 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | |
| 28 * | |
| 29 * As a special exception, if other files instantiate templates or | |
| 30 * use macros or inline functions from this file, or you compile this | |
| 31 * file and link it with other works to produce a work based on this | |
| 32 * file, this file does not by itself cause the resulting work to be | |
| 33 * covered by the GNU General Public License. However the source code | |
| 34 * for this file must still be made available in accordance with | |
| 35 * section (3) of the GNU General Public License. | |
| 36 * | |
| 37 * This exception does not invalidate any other reasons why a work | |
| 38 * based on this file might be covered by the GNU General Public | |
| 39 * License. | |
| 40 * | |
| 41 * ------------------------------------------- | |
| 42 * ####ECOSGPLCOPYRIGHTEND#### | |
| 43 * ================================================================= | |
| 44 * #####DESCRIPTIONBEGIN#### | |
| 45 * | |
| 46 * Author(s): atonizzo@lycos.com | |
| 47 * Date: 2005-05-13 | |
| 48 * Purpose: | |
| 49 * Description: | |
| 50 * | |
| 51 * ####DESCRIPTIONEND#### | |
| 52 * | |
| 53 * ================================================================= | |
| 54 */ | |
| 55 | |
| 56 typedef cyg_uint32 Elf32_Addr; | |
| 57 typedef cyg_uint16 Elf32_Half; | |
| 58 typedef cyg_uint32 Elf32_Off; | |
| 59 typedef cyg_int32 Elf32_Sword; | |
| 60 typedef cyg_uint32 Elf32_Word; | |
| 61 | |
| 62 #define EI_NIDENT 16 | |
| 63 typedef struct | |
| 64 { | |
| 65 unsigned char e_ident[EI_NIDENT]; | |
| 66 Elf32_Half e_type; | |
| 67 Elf32_Half e_machine; | |
| 68 Elf32_Word e_version; | |
| 69 Elf32_Addr e_entry; | |
| 70 Elf32_Off e_phoff; | |
| 71 Elf32_Off e_shoff; | |
| 72 Elf32_Word e_flags; | |
| 73 Elf32_Half e_ehsize; | |
| 74 Elf32_Half e_phentsize; | |
| 75 Elf32_Half e_phnum; | |
| 76 Elf32_Half e_shentsize; | |
| 77 Elf32_Half e_shnum; | |
| 78 Elf32_Half e_shstrndx; | |
| 79 } Elf32_Ehdr; | |
| 80 | |
| 81 // The ELFCLASS* macros are the defined values of e_ident[EI_CLASS]. | |
| 82 #define ELFCLASSNONE 0 // Invalid class. | |
| 83 #define ELFCLASS32 1 // 32-bit objects. | |
| 84 #define ELFCLASS64 2 // 64-bit objects. | |
| 85 | |
| 86 // The ELFDATA* macros are the allowed values of e_ident[EI_DATA]. | |
| 87 #define ELFDATA2LSB 1 // Little Endian | |
| 88 #define ELFDATA2MSB 2 // Big Endian. | |
| 89 | |
| 90 // The ET_* macros define the values of the e_type field of the ElfXX_Ehdr | |
| 91 // structure. | |
| 92 #define ET_NONE 0 // No file type. | |
| 93 #define ET_REL 1 // Relocatable file. | |
| 94 #define ET_EXEC 2 // Executable file. | |
| 95 #define ET_DYN 3 // Shared object file. | |
| 96 #define ET_CORE 4 // Core file. | |
| 97 #define ET_LOPROC 0xff00 // Processor-specific. | |
| 98 | |
| 99 // The ELFMAG* macros are the values of e_ident[EI_MAG0-4] | |
| 100 #define ELFMAG0 0x7f // magic number, byte 0 | |
| 101 #define ELFMAG1 'E' // magic number, byte 1 | |
| 102 #define ELFMAG2 'L' // magic number, byte 2 | |
| 103 #define ELFMAG3 'F' // magic number, byte 3 | |
| 104 #define ELFMAG "\177ELF" // magic string | |
| 105 #define SELFMAG 4 // magic string length | |
| 106 | |
| 107 #define EI_MAG0 0 | |
| 108 #define EI_MAG1 1 | |
| 109 #define EI_MAG2 2 | |
| 110 #define EI_MAG3 3 | |
| 111 #define EI_CLASS 4 | |
| 112 #define EI_DATA 5 | |
| 113 #define EI_VERSION 6 | |
| 114 #define EI_PAD 7 | |
| 115 | |
| 116 typedef struct | |
| 117 { | |
| 118 Elf32_Word sh_name; // section name. | |
| 119 Elf32_Word sh_type; // SHT_... | |
| 120 Elf32_Word sh_flags; // SHF_... | |
| 121 Elf32_Addr sh_addr; // virtual address | |
| 122 Elf32_Off sh_offset; // file offset | |
| 123 Elf32_Word sh_size; // section size | |
| 124 Elf32_Word sh_link; // misc info | |
| 125 Elf32_Word sh_info; // misc info | |
| 126 Elf32_Word sh_addralign; // memory alignment | |
| 127 Elf32_Word sh_entsize; // entry size if table. | |
| 128 } Elf32_Shdr; | |
| 129 | |
| 130 // Symbols table entry. | |
| 131 typedef struct | |
| 132 { | |
| 133 Elf32_Word st_name; // Symbol name (string tbl index). | |
| 134 Elf32_Addr st_value; // Symbol value. | |
| 135 Elf32_Word st_size; // Symbol size. | |
| 136 unsigned char st_info; // Symbol type and binding. | |
| 137 unsigned char st_other; // Symbol visibility. | |
| 138 Elf32_Half st_shndx; // Section index. | |
| 139 } Elf32_Sym; | |
| 140 | |
| 141 typedef struct | |
| 142 { | |
| 143 Elf32_Addr r_offset; | |
| 144 Elf32_Word r_info; | |
| 145 } Elf32_Rel; | |
| 146 | |
| 147 typedef struct | |
| 148 { | |
| 149 Elf32_Addr r_offset; | |
| 150 Elf32_Word r_info; | |
| 151 Elf32_Sword r_addend; | |
| 152 } Elf32_Rela; | |
| 153 | |
| 154 | |
| 155 #define SHT_NULL 0 | |
| 156 #define SHT_PROGBITS 1 | |
| 157 #define SHT_SYMTAB 2 | |
| 158 #define SHT_STRTAB 3 | |
| 159 #define SHT_RELA 4 | |
| 160 #define SHT_HASH 5 | |
| 161 #define SHT_DYNAMIC 6 | |
| 162 #define SHT_NOTE 7 | |
| 163 #define SHT_NOBITS 8 | |
| 164 #define SHT_REL 9 | |
| 165 #define SHT_SHLIB 10 | |
| 166 #define SHT_DYNSYM 11 | |
| 167 | |
| 168 #define SHN_UNDEF 0 | |
| 169 #define SHN_LORESERVE 0xff00 | |
| 170 #define SHN_LOPROC 0xff00 | |
| 171 #define SHN_HIPROC 0xff1f | |
| 172 #define SHN_ABS 0xfff1 | |
| 173 #define SHN_COMMON 0xfff2 | |
| 174 #define SHN_HIRESERVE 0xffff | |
| 175 | |
| 176 #define STT_NOTYPE 0 | |
| 177 #define STT_OBJECT 1 | |
| 178 #define STT_FUNC 2 | |
| 179 #define STT_SECTION 3 | |
| 180 #define STT_FILE 4 | |
| 181 #define STT_LOPROC 13 | |
| 182 #define STT_HIPROC 15 | |
| 183 | |
| 184 #define STB_LOCAL 0 | |
| 185 #define STB_GLOBAL 1 | |
| 186 #define STB_WEAK 2 | |
| 187 #define STB_LOPROC 13 | |
| 188 #define STB_HIPROC 15 | |
| 189 | |
| 190 // The ELF_STRING_xxx macros are names of common sections | |
| 191 #define ELF_STRING_bss ".bss" | |
| 192 #define ELF_STRING_hbss ".hbss" | |
| 193 #define ELF_STRING_sbss ".sbss" | |
| 194 #define ELF_STRING_tbss ".tbss" | |
| 195 #define ELF_STRING_data ".data" | |
| 196 #define ELF_STRING_hdata ".hdata" | |
| 197 #define ELF_STRING_sdata ".sdata" | |
| 198 #define ELF_STRING_sdata2 ".sdata2" | |
| 199 #define ELF_STRING_fini ".fini" | |
| 200 #define ELF_STRING_init ".init" | |
| 201 #define ELF_STRING_interp ".interp" | |
| 202 #define ELF_STRING_rodata ".rodata" | |
| 203 #define ELF_STRING_text ".text" | |
| 204 #define ELF_STRING_comment ".comment" | |
| 205 #define ELF_STRING_dynamic ".dynamic" | |
| 206 #define ELF_STRING_dynstr ".dynstr" | |
| 207 #define ELF_STRING_dynsym ".dynsym" | |
| 208 #define ELF_STRING_dlt ".dlt" | |
| 209 #define ELF_STRING_note ".note" | |
| 210 #define ELF_STRING_opd ".opd" | |
| 211 #define ELF_STRING_plt ".plt" | |
| 212 #define ELF_STRING_bss_rela ".rela.bss" | |
| 213 #define ELF_STRING_hbss_rela ".rela.hbss" | |
| 214 #define ELF_STRING_data_rela ".rela.data" | |
| 215 #define ELF_STRING_dlt_rela ".rela.dlt" | |
| 216 #define ELF_STRING_plt_rela ".rela.plt" | |
| 217 #define ELF_STRING_sdata_rela ".rela.sdata" | |
| 218 #define ELF_STRING_strtab ".strtab" | |
| 219 #define ELF_STRING_symtab ".symtab" | |
| 220 #define ELF_STRING_hash ".hash" | |
| 221 #define ELF_STRING_shstrtab ".shstrtab" | |
| 222 #define ELF_STRING_shsymtab ".shsymtab" | |
| 223 #define ELF_STRING_rela ".rela" | |
| 224 #define ELF_STRING_rel ".rel" | |
| 225 | |
| 226 #define ELF32_R_SYM(i) ((i)>>8) | |
| 227 #define ELF32_R_TYPE(i) ((unsigned char)(i)) | |
| 228 | |
| 229 #define ELF32_ST_BIND(i) ((i)>>4) | |
| 230 #define ELF32_ST_TYPE(i) ((i)&0x0F) | |
| 231 | |
| 232 | |
| 233 #endif | |
| 234 |
