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