Parallelize in_ifaddrhead operation
[dragonfly.git] / contrib / file-4 / src / readelf.h
blob610c310c82a832a504d33a2e19d1483dd00bc7c6
1 /*
2 * Copyright (c) Christos Zoulas 2003.
3 * All Rights Reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice immediately at the beginning of the file, without modification,
10 * this list of conditions, and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
19 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
28 * @(#)Id: readelf.h,v 1.9 2002/05/16 18:45:56 christos Exp
30 * Provide elf data structures for non-elf machines, allowing file
31 * non-elf hosts to determine if an elf binary is stripped.
32 * Note: cobbled from the linux header file, with modifications
34 #ifndef __fake_elf_h__
35 #define __fake_elf_h__
37 #if HAVE_STDINT_H
38 #include <stdint.h>
39 #endif
41 typedef uint32_t Elf32_Addr;
42 typedef uint32_t Elf32_Off;
43 typedef uint16_t Elf32_Half;
44 typedef uint32_t Elf32_Word;
45 typedef uint8_t Elf32_Char;
47 #if SIZEOF_UINT64_T != 8
48 #define USE_ARRAY_FOR_64BIT_TYPES
49 typedef uint32_t Elf64_Addr[2];
50 typedef uint32_t Elf64_Off[2];
51 typedef uint32_t Elf64_Xword[2];
52 #else
53 #undef USE_ARRAY_FOR_64BIT_TYPES
54 typedef uint64_t Elf64_Addr;
55 typedef uint64_t Elf64_Off;
56 typedef uint64_t Elf64_Xword;
57 #endif
58 typedef uint16_t Elf64_Half;
59 typedef uint32_t Elf64_Word;
60 typedef uint8_t Elf64_Char;
62 #define EI_NIDENT 16
64 typedef struct {
65 Elf32_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; /* Entry point */
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;
81 typedef struct {
82 Elf64_Char e_ident[EI_NIDENT];
83 Elf64_Half e_type;
84 Elf64_Half e_machine;
85 Elf64_Word e_version;
86 Elf64_Addr e_entry; /* Entry point */
87 Elf64_Off e_phoff;
88 Elf64_Off e_shoff;
89 Elf64_Word e_flags;
90 Elf64_Half e_ehsize;
91 Elf64_Half e_phentsize;
92 Elf64_Half e_phnum;
93 Elf64_Half e_shentsize;
94 Elf64_Half e_shnum;
95 Elf64_Half e_shstrndx;
96 } Elf64_Ehdr;
98 /* e_type */
99 #define ET_EXEC 2
100 #define ET_DYN 3
101 #define ET_CORE 4
103 /* sh_type */
104 #define SHT_SYMTAB 2
105 #define SHT_NOTE 7
106 #define SHT_DYNSYM 11
108 /* elf type */
109 #define ELFDATANONE 0 /* e_ident[EI_DATA] */
110 #define ELFDATA2LSB 1
111 #define ELFDATA2MSB 2
113 /* elf class */
114 #define ELFCLASSNONE 0
115 #define ELFCLASS32 1
116 #define ELFCLASS64 2
118 /* magic number */
119 #define EI_MAG0 0 /* e_ident[] indexes */
120 #define EI_MAG1 1
121 #define EI_MAG2 2
122 #define EI_MAG3 3
123 #define EI_CLASS 4
124 #define EI_DATA 5
125 #define EI_VERSION 6
126 #define EI_PAD 7
128 #define ELFMAG0 0x7f /* EI_MAG */
129 #define ELFMAG1 'E'
130 #define ELFMAG2 'L'
131 #define ELFMAG3 'F'
132 #define ELFMAG "\177ELF"
134 #define OLFMAG1 'O'
135 #define OLFMAG "\177OLF"
137 typedef struct {
138 Elf32_Word p_type;
139 Elf32_Off p_offset;
140 Elf32_Addr p_vaddr;
141 Elf32_Addr p_paddr;
142 Elf32_Word p_filesz;
143 Elf32_Word p_memsz;
144 Elf32_Word p_flags;
145 Elf32_Word p_align;
146 } Elf32_Phdr;
148 typedef struct {
149 Elf64_Word p_type;
150 Elf64_Word p_flags;
151 Elf64_Off p_offset;
152 Elf64_Addr p_vaddr;
153 Elf64_Addr p_paddr;
154 Elf64_Xword p_filesz;
155 Elf64_Xword p_memsz;
156 Elf64_Xword p_align;
157 } Elf64_Phdr;
159 #define PT_NULL 0 /* p_type */
160 #define PT_LOAD 1
161 #define PT_DYNAMIC 2
162 #define PT_INTERP 3
163 #define PT_NOTE 4
164 #define PT_SHLIB 5
165 #define PT_PHDR 6
166 #define PT_NUM 7
168 typedef struct {
169 Elf32_Word sh_name;
170 Elf32_Word sh_type;
171 Elf32_Word sh_flags;
172 Elf32_Addr sh_addr;
173 Elf32_Off sh_offset;
174 Elf32_Word sh_size;
175 Elf32_Word sh_link;
176 Elf32_Word sh_info;
177 Elf32_Word sh_addralign;
178 Elf32_Word sh_entsize;
179 } Elf32_Shdr;
181 typedef struct {
182 Elf64_Word sh_name;
183 Elf64_Word sh_type;
184 Elf64_Off sh_flags;
185 Elf64_Addr sh_addr;
186 Elf64_Off sh_offset;
187 Elf64_Off sh_size;
188 Elf64_Word sh_link;
189 Elf64_Word sh_info;
190 Elf64_Off sh_addralign;
191 Elf64_Off sh_entsize;
192 } Elf64_Shdr;
194 #define NT_NETBSD_CORE_PROCINFO 1
196 /* Note header in a PT_NOTE section */
197 typedef struct elf_note {
198 Elf32_Word n_namesz; /* Name size */
199 Elf32_Word n_descsz; /* Content size */
200 Elf32_Word n_type; /* Content type */
201 } Elf32_Nhdr;
203 typedef struct {
204 Elf64_Word n_namesz;
205 Elf64_Word n_descsz;
206 Elf64_Word n_type;
207 } Elf64_Nhdr;
209 /* Notes used in ET_CORE */
210 #define NT_PRSTATUS 1
211 #define NT_PRFPREG 2
212 #define NT_PRPSINFO 3
213 #define NT_PRXREG 4
214 #define NT_TASKSTRUCT 4
215 #define NT_PLATFORM 5
216 #define NT_AUXV 6
218 /* Note types used in executables */
219 /* NetBSD executables (name = "NetBSD") */
220 #define NT_NETBSD_VERSION 1
221 #define NT_NETBSD_EMULATION 2
222 #define NT_FREEBSD_VERSION 1
223 #define NT_OPENBSD_VERSION 1
224 #define NT_DRAGONFLY_VERSION 1
225 /* GNU executables (name = "GNU") */
226 #define NT_GNU_VERSION 1
228 /* GNU OS tags */
229 #define GNU_OS_LINUX 0
230 #define GNU_OS_HURD 1
231 #define GNU_OS_SOLARIS 2
233 #endif