1 // elfcpp_internal.h -- internals for elfcpp -*- C++ -*-
3 // This is included by elfcpp.h, the external interface, but holds
4 // information which we want to keep private.
6 #ifndef ELFCPP_INTERNAL_H
7 #define ELFCPP_INTERNAL_H
15 // The ELF file header.
20 unsigned char e_ident[EI_NIDENT];
24 typename Elf_types<size>::Elf_Addr e_entry;
25 typename Elf_types<size>::Elf_Off e_phoff;
26 typename Elf_types<size>::Elf_Off e_shoff;
36 // An ELF section header.
43 typename Elf_types<size>::Elf_WXword sh_flags;
44 typename Elf_types<size>::Elf_Addr sh_addr;
45 typename Elf_types<size>::Elf_Off sh_offset;
46 typename Elf_types<size>::Elf_WXword sh_size;
49 typename Elf_types<size>::Elf_WXword sh_addralign;
50 typename Elf_types<size>::Elf_WXword sh_entsize;
53 // An ELF segment header. We use template specialization for the
54 // 32-bit and 64-bit versions because the fields are in a different
64 Elf_types<32>::Elf_Off p_offset;
65 Elf_types<32>::Elf_Addr p_vaddr;
66 Elf_types<32>::Elf_Addr p_paddr;
78 Elf_types<64>::Elf_Off p_offset;
79 Elf_types<64>::Elf_Addr p_vaddr;
80 Elf_types<64>::Elf_Addr p_paddr;
86 // An ELF symbol table entry. We use template specialization for the
87 // 32-bit and 64-bit versions because the fields are in a different
97 Elf_types<32>::Elf_Addr st_value;
99 unsigned char st_info;
100 unsigned char st_other;
108 unsigned char st_info;
109 unsigned char st_other;
111 Elf_types<64>::Elf_Addr st_value;
115 // ELF relocation table entries.
120 typename Elf_types<size>::Elf_Addr r_offset;
121 typename Elf_types<size>::Elf_WXword r_info;
127 typename Elf_types<size>::Elf_Addr r_offset;
128 typename Elf_types<size>::Elf_WXword r_info;
129 typename Elf_types<size>::Elf_Swxword r_addend;
132 // An entry in the ELF SHT_DYNAMIC section aka PT_DYNAMIC segment.
137 typename Elf_types<size>::Elf_Swxword d_tag;
138 typename Elf_types<size>::Elf_WXword d_val;
141 // An entry in a SHT_GNU_verdef section. This structure is the same
142 // in 32-bit and 64-bit ELF files.
146 // Version number of structure (VER_DEF_*).
148 // Bit flags (VER_FLG_*).
152 // Number of auxiliary Verdaux entries.
156 // Byte offset to first Verdaux entry.
158 // Byte offset to next Verdef entry.
162 // An auxiliary entry in a SHT_GNU_verdef section. This structure is
163 // the same in 32-bit and 64-bit ELF files.
167 // Offset in string table of version name.
169 // Byte offset to next Verdaux entry.
173 // An entry in a SHT_GNU_verneed section. This structure is the same
174 // in 32-bit and 64-bit ELF files.
178 // Version number of structure (VER_NEED_*).
180 // Number of auxiliary Vernaux entries.
182 // Offset in string table of library name.
184 // Byte offset to first Vernaux entry.
186 // Byt eoffset to next Verneed entry.
190 // An auxiliary entry in a SHT_GNU_verneed section. This structure is
191 // the same in 32-bit and 64-bit ELF files.
195 // Hash of dependency name.
197 // Bit flags (VER_FLG_*).
199 // Version index used in SHT_GNU_versym entries.
201 // Offset in string table of version name.
203 // Byte offset to next Vernaux entry.
207 } // End namespace internal.
209 } // End namespace elfcpp.
211 #endif // !defined(ELFCPP_INTERNAL_H)