amd64: Change the way I/O APIC's are mapped.
[dragonfly.git] / contrib / file-4 / src / readelf.h
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.
14  *  
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.
26  */
27 /*
28  * @(#)Id: readelf.h,v 1.9 2002/05/16 18:45:56 christos Exp
29  *
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
33  */
34 #ifndef __fake_elf_h__
35 #define __fake_elf_h__
36
37 #if HAVE_STDINT_H
38 #include <stdint.h>
39 #endif
40
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;
46
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;
61
62 #define EI_NIDENT       16
63
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;
80
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;
97
98 /* e_type */
99 #define ET_EXEC         2
100 #define ET_DYN          3
101 #define ET_CORE         4
102
103 /* sh_type */
104 #define SHT_SYMTAB      2
105 #define SHT_NOTE        7
106 #define SHT_DYNSYM      11
107
108 /* elf type */
109 #define ELFDATANONE     0               /* e_ident[EI_DATA] */
110 #define ELFDATA2LSB     1
111 #define ELFDATA2MSB     2
112
113 /* elf class */
114 #define ELFCLASSNONE    0
115 #define ELFCLASS32      1
116 #define ELFCLASS64      2
117
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
127
128 #define ELFMAG0         0x7f            /* EI_MAG */
129 #define ELFMAG1         'E'
130 #define ELFMAG2         'L'
131 #define ELFMAG3         'F'
132 #define ELFMAG          "\177ELF"
133
134 #define OLFMAG1         'O'
135 #define OLFMAG          "\177OLF"
136
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;
147
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;
158
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
167
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;
180
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;
193
194 #define NT_NETBSD_CORE_PROCINFO         1
195
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;
202
203 typedef struct {
204     Elf64_Word  n_namesz;
205     Elf64_Word  n_descsz;
206     Elf64_Word  n_type;
207 } Elf64_Nhdr;
208
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
217
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
227
228 /* GNU OS tags */
229 #define GNU_OS_LINUX    0
230 #define GNU_OS_HURD     1
231 #define GNU_OS_SOLARIS  2
232
233 #endif