Update to file 4.13. Put the contrib files into contrib/file-4 instead
[dragonfly.git] / contrib / file-4 / src / readelf.h
blobbc5e8e56c8f430363a38b94cce6d2005455d9dd1
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 typedef uint64_t Elf64_Addr;
54 typedef uint64_t Elf64_Off;
55 typedef uint64_t Elf64_Xword;
56 #endif
57 typedef uint16_t Elf64_Half;
58 typedef uint32_t Elf64_Word;
59 typedef uint8_t Elf64_Char;
61 #define EI_NIDENT 16
63 typedef struct {
64 Elf32_Char e_ident[EI_NIDENT];
65 Elf32_Half e_type;
66 Elf32_Half e_machine;
67 Elf32_Word e_version;
68 Elf32_Addr e_entry; /* Entry point */
69 Elf32_Off e_phoff;
70 Elf32_Off e_shoff;
71 Elf32_Word e_flags;
72 Elf32_Half e_ehsize;
73 Elf32_Half e_phentsize;
74 Elf32_Half e_phnum;
75 Elf32_Half e_shentsize;
76 Elf32_Half e_shnum;
77 Elf32_Half e_shstrndx;
78 } Elf32_Ehdr;
80 typedef struct {
81 Elf64_Char e_ident[EI_NIDENT];
82 Elf64_Half e_type;
83 Elf64_Half e_machine;
84 Elf64_Word e_version;
85 Elf64_Addr e_entry; /* Entry point */
86 Elf64_Off e_phoff;
87 Elf64_Off e_shoff;
88 Elf64_Word e_flags;
89 Elf64_Half e_ehsize;
90 Elf64_Half e_phentsize;
91 Elf64_Half e_phnum;
92 Elf64_Half e_shentsize;
93 Elf64_Half e_shnum;
94 Elf64_Half e_shstrndx;
95 } Elf64_Ehdr;
97 /* e_type */
98 #define ET_EXEC 2
99 #define ET_CORE 4
101 /* sh_type */
102 #define SHT_SYMTAB 2
103 #define SHT_NOTE 7
104 #define SHT_DYNSYM 11
106 /* elf type */
107 #define ELFDATANONE 0 /* e_ident[EI_DATA] */
108 #define ELFDATA2LSB 1
109 #define ELFDATA2MSB 2
111 /* elf class */
112 #define ELFCLASSNONE 0
113 #define ELFCLASS32 1
114 #define ELFCLASS64 2
116 /* magic number */
117 #define EI_MAG0 0 /* e_ident[] indexes */
118 #define EI_MAG1 1
119 #define EI_MAG2 2
120 #define EI_MAG3 3
121 #define EI_CLASS 4
122 #define EI_DATA 5
123 #define EI_VERSION 6
124 #define EI_PAD 7
126 #define ELFMAG0 0x7f /* EI_MAG */
127 #define ELFMAG1 'E'
128 #define ELFMAG2 'L'
129 #define ELFMAG3 'F'
130 #define ELFMAG "\177ELF"
132 #define OLFMAG1 'O'
133 #define OLFMAG "\177OLF"
135 typedef struct {
136 Elf32_Word p_type;
137 Elf32_Off p_offset;
138 Elf32_Addr p_vaddr;
139 Elf32_Addr p_paddr;
140 Elf32_Word p_filesz;
141 Elf32_Word p_memsz;
142 Elf32_Word p_flags;
143 Elf32_Word p_align;
144 } Elf32_Phdr;
146 typedef struct {
147 Elf64_Word p_type;
148 Elf64_Word p_flags;
149 Elf64_Off p_offset;
150 Elf64_Addr p_vaddr;
151 Elf64_Addr p_paddr;
152 Elf64_Xword p_filesz;
153 Elf64_Xword p_memsz;
154 Elf64_Xword p_align;
155 } Elf64_Phdr;
157 #define PT_NULL 0 /* p_type */
158 #define PT_LOAD 1
159 #define PT_DYNAMIC 2
160 #define PT_INTERP 3
161 #define PT_NOTE 4
162 #define PT_SHLIB 5
163 #define PT_PHDR 6
164 #define PT_NUM 7
166 typedef struct {
167 Elf32_Word sh_name;
168 Elf32_Word sh_type;
169 Elf32_Word sh_flags;
170 Elf32_Addr sh_addr;
171 Elf32_Off sh_offset;
172 Elf32_Word sh_size;
173 Elf32_Word sh_link;
174 Elf32_Word sh_info;
175 Elf32_Word sh_addralign;
176 Elf32_Word sh_entsize;
177 } Elf32_Shdr;
179 typedef struct {
180 Elf64_Word sh_name;
181 Elf64_Word sh_type;
182 Elf64_Off sh_flags;
183 Elf64_Addr sh_addr;
184 Elf64_Off sh_offset;
185 Elf64_Off sh_size;
186 Elf64_Word sh_link;
187 Elf64_Word sh_info;
188 Elf64_Off sh_addralign;
189 Elf64_Off sh_entsize;
190 } Elf64_Shdr;
192 /* Notes used in ET_CORE */
193 #define NT_PRSTATUS 1
194 #define NT_PRFPREG 2
195 #define NT_PRPSINFO 3
196 #define NT_TASKSTRUCT 4
198 #define NT_NETBSD_CORE_PROCINFO 1
200 /* Note header in a PT_NOTE section */
201 typedef struct elf_note {
202 Elf32_Word n_namesz; /* Name size */
203 Elf32_Word n_descsz; /* Content size */
204 Elf32_Word n_type; /* Content type */
205 } Elf32_Nhdr;
207 typedef struct {
208 Elf64_Word n_namesz;
209 Elf64_Word n_descsz;
210 Elf64_Word n_type;
211 } Elf64_Nhdr;
213 #define NT_PRSTATUS 1
214 #define NT_PRFPREG 2
215 #define NT_PRPSINFO 3
216 #define NT_PRXREG 4
217 #define NT_PLATFORM 5
218 #define NT_AUXV 6
220 /* Note types used in executables */
221 /* NetBSD executables (name = "NetBSD") */
222 #define NT_NETBSD_VERSION 1
223 #define NT_NETBSD_EMULATION 2
224 #define NT_FREEBSD_VERSION 1
225 #define NT_OPENBSD_VERSION 1
226 /* GNU executables (name = "GNU") */
227 #define NT_GNU_VERSION 1
229 /* GNU OS tags */
230 #define GNU_OS_LINUX 0
231 #define GNU_OS_HURD 1
232 #define GNU_OS_SOLARIS 2
234 #endif