]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/file/readelf.h
This commit was generated by cvs2svn to compensate for changes in r133429,
[FreeBSD/FreeBSD.git] / contrib / file / 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  * 3. The name of the author may not be used to endorse or promote products
15  *    derived from this software without specific prior written permission.
16  *  
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
21  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 /*
30  * @(#)Id: readelf.h,v 1.9 2002/05/16 18:45:56 christos Exp
31  *
32  * Provide elf data structures for non-elf machines, allowing file
33  * non-elf hosts to determine if an elf binary is stripped.
34  * Note: cobbled from the linux header file, with modifications
35  */
36 #ifndef __fake_elf_h__
37 #define __fake_elf_h__
38
39 #if HAVE_STDINT_H
40 #include <stdint.h>
41 #endif
42
43 typedef uint32_t        Elf32_Addr;
44 typedef uint32_t        Elf32_Off;
45 typedef uint16_t        Elf32_Half;
46 typedef uint32_t        Elf32_Word;
47 typedef uint8_t         Elf32_Char;
48
49 #if SIZEOF_UINT64_T != 8
50 #define USE_ARRAY_FOR_64BIT_TYPES
51 typedef uint32_t        Elf64_Addr[2];
52 typedef uint32_t        Elf64_Off[2];
53 typedef uint32_t        Elf64_Xword[2];
54 #else
55 typedef uint64_t        Elf64_Addr;
56 typedef uint64_t        Elf64_Off;
57 typedef uint64_t        Elf64_Xword;
58 #endif
59 typedef uint16_t        Elf64_Half;
60 typedef uint32_t        Elf64_Word;
61 typedef uint8_t         Elf64_Char;
62
63 #define EI_NIDENT       16
64
65 typedef struct {
66     Elf32_Char  e_ident[EI_NIDENT];
67     Elf32_Half  e_type;
68     Elf32_Half  e_machine;
69     Elf32_Word  e_version;
70     Elf32_Addr  e_entry;  /* Entry point */
71     Elf32_Off   e_phoff;
72     Elf32_Off   e_shoff;
73     Elf32_Word  e_flags;
74     Elf32_Half  e_ehsize;
75     Elf32_Half  e_phentsize;
76     Elf32_Half  e_phnum;
77     Elf32_Half  e_shentsize;
78     Elf32_Half  e_shnum;
79     Elf32_Half  e_shstrndx;
80 } Elf32_Ehdr;
81
82 typedef struct {
83     Elf64_Char  e_ident[EI_NIDENT];
84     Elf64_Half  e_type;
85     Elf64_Half  e_machine;
86     Elf64_Word  e_version;
87     Elf64_Addr  e_entry;  /* Entry point */
88     Elf64_Off   e_phoff;
89     Elf64_Off   e_shoff;
90     Elf64_Word  e_flags;
91     Elf64_Half  e_ehsize;
92     Elf64_Half  e_phentsize;
93     Elf64_Half  e_phnum;
94     Elf64_Half  e_shentsize;
95     Elf64_Half  e_shnum;
96     Elf64_Half  e_shstrndx;
97 } Elf64_Ehdr;
98
99 /* e_type */
100 #define ET_EXEC         2
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 /* Notes used in ET_CORE */
195 #define NT_PRSTATUS     1
196 #define NT_PRFPREG      2
197 #define NT_PRPSINFO     3
198 #define NT_TASKSTRUCT   4
199
200 #define NT_NETBSD_CORE_PROCINFO         1
201
202 /* Note header in a PT_NOTE section */
203 typedef struct elf_note {
204     Elf32_Word  n_namesz;       /* Name size */
205     Elf32_Word  n_descsz;       /* Content size */
206     Elf32_Word  n_type;         /* Content type */
207 } Elf32_Nhdr;
208
209 typedef struct {
210     Elf64_Word  n_namesz;
211     Elf64_Word  n_descsz;
212     Elf64_Word  n_type;
213 } Elf64_Nhdr;
214
215 #define NT_PRSTATUS     1
216 #define NT_PRFPREG      2
217 #define NT_PRPSINFO     3
218 #define NT_PRXREG       4
219 #define NT_PLATFORM     5
220 #define NT_AUXV         6
221
222 /* Note types used in executables */
223 /* NetBSD executables (name = "NetBSD") */
224 #define NT_NETBSD_VERSION       1
225 #define NT_NETBSD_EMULATION     2
226 #define NT_FREEBSD_VERSION      1
227 #define NT_OPENBSD_VERSION      1
228 /* GNU executables (name = "GNU") */
229 #define NT_GNU_VERSION          1
230
231 /* GNU OS tags */
232 #define GNU_OS_LINUX    0
233 #define GNU_OS_HURD     1
234 #define GNU_OS_SOLARIS  2
235
236 #endif