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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [binutils-2.20.1/] [elfcpp/] [elfcpp_internal.h] - Blame information for rev 846

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 205 julius
// elfcpp_internal.h -- internals for elfcpp   -*- C++ -*-
2
 
3
// Copyright 2006, 2007, Free Software Foundation, Inc.
4
// Written by Ian Lance Taylor <iant@google.com>.
5
 
6
// This file is part of elfcpp.
7
 
8
// This program is free software; you can redistribute it and/or
9
// modify it under the terms of the GNU Library General Public License
10
// as published by the Free Software Foundation; either version 2, or
11
// (at your option) any later version.
12
 
13
// In addition to the permissions in the GNU Library General Public
14
// License, the Free Software Foundation gives you unlimited
15
// permission to link the compiled version of this file into
16
// combinations with other programs, and to distribute those
17
// combinations without any restriction coming from the use of this
18
// file.  (The Library Public License restrictions do apply in other
19
// respects; for example, they cover modification of the file, and
20
/// distribution when not linked into a combined executable.)
21
 
22
// This program is distributed in the hope that it will be useful, but
23
// WITHOUT ANY WARRANTY; without even the implied warranty of
24
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25
// Library General Public License for more details.
26
 
27
// You should have received a copy of the GNU Library General Public
28
// License along with this program; if not, write to the Free Software
29
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
30
// 02110-1301, USA.
31
 
32
// This is included by elfcpp.h, the external interface, but holds
33
// information which we want to keep private.
34
 
35
#ifndef ELFCPP_INTERNAL_H
36
#define ELFCPP_INTERNAL_H
37
 
38
namespace elfcpp
39
{
40
 
41
namespace internal
42
{
43
 
44
// The ELF file header.
45
 
46
template<int size>
47
struct Ehdr_data
48
{
49
  unsigned char e_ident[EI_NIDENT];
50
  Elf_Half e_type;
51
  Elf_Half e_machine;
52
  Elf_Word e_version;
53
  typename Elf_types<size>::Elf_Addr e_entry;
54
  typename Elf_types<size>::Elf_Off e_phoff;
55
  typename Elf_types<size>::Elf_Off e_shoff;
56
  Elf_Word e_flags;
57
  Elf_Half e_ehsize;
58
  Elf_Half e_phentsize;
59
  Elf_Half e_phnum;
60
  Elf_Half e_shentsize;
61
  Elf_Half e_shnum;
62
  Elf_Half e_shstrndx;
63
};
64
 
65
// An ELF section header.
66
 
67
template<int size>
68
struct Shdr_data
69
{
70
  Elf_Word sh_name;
71
  Elf_Word sh_type;
72
  typename Elf_types<size>::Elf_WXword sh_flags;
73
  typename Elf_types<size>::Elf_Addr sh_addr;
74
  typename Elf_types<size>::Elf_Off sh_offset;
75
  typename Elf_types<size>::Elf_WXword sh_size;
76
  Elf_Word sh_link;
77
  Elf_Word sh_info;
78
  typename Elf_types<size>::Elf_WXword sh_addralign;
79
  typename Elf_types<size>::Elf_WXword sh_entsize;
80
};
81
 
82
// An ELF segment header.  We use template specialization for the
83
// 32-bit and 64-bit versions because the fields are in a different
84
// order.
85
 
86
template<int size>
87
struct Phdr_data;
88
 
89
template<>
90
struct Phdr_data<32>
91
{
92
  Elf_Word p_type;
93
  Elf_types<32>::Elf_Off p_offset;
94
  Elf_types<32>::Elf_Addr p_vaddr;
95
  Elf_types<32>::Elf_Addr p_paddr;
96
  Elf_Word p_filesz;
97
  Elf_Word p_memsz;
98
  Elf_Word p_flags;
99
  Elf_Word p_align;
100
};
101
 
102
template<>
103
struct Phdr_data<64>
104
{
105
  Elf_Word p_type;
106
  Elf_Word p_flags;
107
  Elf_types<64>::Elf_Off p_offset;
108
  Elf_types<64>::Elf_Addr p_vaddr;
109
  Elf_types<64>::Elf_Addr p_paddr;
110
  Elf_Xword p_filesz;
111
  Elf_Xword p_memsz;
112
  Elf_Xword p_align;
113
};
114
 
115
// An ELF symbol table entry.  We use template specialization for the
116
// 32-bit and 64-bit versions because the fields are in a different
117
// order.
118
 
119
template<int size>
120
struct Sym_data;
121
 
122
template<>
123
struct Sym_data<32>
124
{
125
  Elf_Word st_name;
126
  Elf_types<32>::Elf_Addr st_value;
127
  Elf_Word st_size;
128
  unsigned char st_info;
129
  unsigned char st_other;
130
  Elf_Half st_shndx;
131
};
132
 
133
template<>
134
struct Sym_data<64>
135
{
136
  Elf_Word st_name;
137
  unsigned char st_info;
138
  unsigned char st_other;
139
  Elf_Half st_shndx;
140
  Elf_types<64>::Elf_Addr st_value;
141
  Elf_Xword st_size;
142
};
143
 
144
// ELF relocation table entries.
145
 
146
template<int size>
147
struct Rel_data
148
{
149
  typename Elf_types<size>::Elf_Addr r_offset;
150
  typename Elf_types<size>::Elf_WXword r_info;
151
};
152
 
153
template<int size>
154
struct Rela_data
155
{
156
  typename Elf_types<size>::Elf_Addr r_offset;
157
  typename Elf_types<size>::Elf_WXword r_info;
158
  typename Elf_types<size>::Elf_Swxword r_addend;
159
};
160
 
161
// An entry in the ELF SHT_DYNAMIC section aka PT_DYNAMIC segment.
162
 
163
template<int size>
164
struct Dyn_data
165
{
166
  typename Elf_types<size>::Elf_Swxword d_tag;
167
  typename Elf_types<size>::Elf_WXword d_val;
168
};
169
 
170
// An entry in a SHT_GNU_verdef section.  This structure is the same
171
// in 32-bit and 64-bit ELF files.
172
 
173
struct Verdef_data
174
{
175
  // Version number of structure (VER_DEF_*).
176
  Elf_Half vd_version;
177
  // Bit flags (VER_FLG_*).
178
  Elf_Half vd_flags;
179
  // Version index.
180
  Elf_Half vd_ndx;
181
  // Number of auxiliary Verdaux entries.
182
  Elf_Half vd_cnt;
183
  // Hash of name.
184
  Elf_Word vd_hash;
185
  // Byte offset to first Verdaux entry.
186
  Elf_Word vd_aux;
187
  // Byte offset to next Verdef entry.
188
  Elf_Word vd_next;
189
};
190
 
191
// An auxiliary entry in a SHT_GNU_verdef section.  This structure is
192
// the same in 32-bit and 64-bit ELF files.
193
 
194
struct Verdaux_data
195
{
196
  // Offset in string table of version name.
197
  Elf_Word vda_name;
198
  // Byte offset to next Verdaux entry.
199
  Elf_Word vda_next;
200
};
201
 
202
// An entry in a SHT_GNU_verneed section.  This structure is the same
203
// in 32-bit and 64-bit ELF files.
204
 
205
struct Verneed_data
206
{
207
  // Version number of structure (VER_NEED_*).
208
  Elf_Half vn_version;
209
  // Number of auxiliary Vernaux entries.
210
  Elf_Half vn_cnt;
211
  // Offset in string table of library name.
212
  Elf_Word vn_file;
213
  // Byte offset to first Vernaux entry.
214
  Elf_Word vn_aux;
215
  // Byt eoffset to next Verneed entry.
216
  Elf_Word vn_next;
217
};
218
 
219
// An auxiliary entry in a SHT_GNU_verneed section.  This structure is
220
// the same in 32-bit and 64-bit ELF files.
221
 
222
struct Vernaux_data
223
{
224
  // Hash of dependency name.
225
  Elf_Word vna_hash;
226
  // Bit flags (VER_FLG_*).
227
  Elf_Half vna_flags;
228
  // Version index used in SHT_GNU_versym entries.
229
  Elf_Half vna_other;
230
  // Offset in string table of version name.
231
  Elf_Word vna_name;
232
  // Byte offset to next Vernaux entry.
233
  Elf_Word vna_next;
234
};
235
 
236
} // End namespace internal.
237
 
238
} // End namespace elfcpp.
239
 
240
#endif // !defined(ELFCPP_INTERNAL_H)

powered by: WebSVN 2.1.0

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