OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [services/] [objloader/] [current/] [include/] [elf.h] - Blame information for rev 786

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.