ReactOS
0.4.16-dev-122-g325d74c
elf64.h
Go to the documentation of this file.
1
/*-
2
* Copyright (c) 1996-1998 John D. Polstra.
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, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
*
14
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24
* SUCH DAMAGE.
25
*
26
* $FreeBSD: src/sys/sys/elf64.h,v 1.10 2002/05/30 08:32:18 dfr Exp $
27
*/
28
29
#ifndef _SYS_ELF64_H_
30
#define _SYS_ELF64_H_ 1
31
32
/*
33
* ELF definitions common to all 64-bit architectures.
34
*/
35
36
typedef
ULONG64
Elf64_Addr
;
37
typedef
ULONG32
Elf64_Half
;
38
typedef
ULONG64
Elf64_Off
;
39
typedef
LONG64
Elf64_Sword
;
40
typedef
ULONG64
Elf64_Word
;
41
typedef
ULONG64
Elf64_Size
;
42
typedef
USHORT
Elf64_Quarter
;
43
44
/*
45
* Types of dynamic symbol hash table bucket and chain elements.
46
*
47
* This is inconsistent among 64 bit architectures, so a machine dependent
48
* typedef is required.
49
*/
50
51
#ifdef _ALPHA_
52
typedef
Elf64_Off
Elf64_Hashelt
;
53
#else
54
typedef
Elf64_Half
Elf64_Hashelt
;
55
#endif
56
57
/*
58
* ELF header.
59
*/
60
61
typedef
struct
{
62
unsigned
char
e_ident[
EI_NIDENT
];
/* File identification. */
63
Elf64_Quarter
e_type
;
/* File type. */
64
Elf64_Quarter
e_machine
;
/* Machine architecture. */
65
Elf64_Half
e_version
;
/* ELF format version. */
66
Elf64_Addr
e_entry
;
/* Entry point. */
67
Elf64_Off
e_phoff
;
/* Program header file offset. */
68
Elf64_Off
e_shoff
;
/* Section header file offset. */
69
Elf64_Half
e_flags
;
/* Architecture-specific flags. */
70
Elf64_Quarter
e_ehsize
;
/* Size of ELF header in bytes. */
71
Elf64_Quarter
e_phentsize
;
/* Size of program header entry. */
72
Elf64_Quarter
e_phnum
;
/* Number of program header entries. */
73
Elf64_Quarter
e_shentsize
;
/* Size of section header entry. */
74
Elf64_Quarter
e_shnum
;
/* Number of section header entries. */
75
Elf64_Quarter
e_shstrndx
;
/* Section name strings section. */
76
}
Elf64_Ehdr
;
77
78
/*
79
* Section header.
80
*/
81
82
typedef
struct
{
83
Elf64_Half
sh_name
;
/* Section name (index into the
84
section header string table). */
85
Elf64_Half
sh_type
;
/* Section type. */
86
Elf64_Size
sh_flags
;
/* Section flags. */
87
Elf64_Addr
sh_addr
;
/* Address in memory image. */
88
Elf64_Off
sh_offset
;
/* Offset in file. */
89
Elf64_Size
sh_size
;
/* Size in bytes. */
90
Elf64_Half
sh_link
;
/* Index of a related section. */
91
Elf64_Half
sh_info
;
/* Depends on section type. */
92
Elf64_Size
sh_addralign
;
/* Alignment in bytes. */
93
Elf64_Size
sh_entsize
;
/* Size of each entry in section. */
94
}
Elf64_Shdr
;
95
96
/*
97
* Program header.
98
*/
99
100
typedef
struct
{
101
Elf64_Half
p_type
;
/* Entry type. */
102
Elf64_Half
p_flags
;
/* Access permission flags. */
103
Elf64_Off
p_offset
;
/* File offset of contents. */
104
Elf64_Addr
p_vaddr
;
/* Virtual address in memory image. */
105
Elf64_Addr
p_paddr
;
/* Physical address (not used). */
106
Elf64_Size
p_filesz
;
/* Size of contents in file. */
107
Elf64_Size
p_memsz
;
/* Size of contents in memory. */
108
Elf64_Size
p_align
;
/* Alignment in memory and file. */
109
}
Elf64_Phdr
;
110
111
/*
112
* Dynamic structure. The ".dynamic" section contains an array of them.
113
*/
114
115
typedef
struct
{
116
Elf64_Size
d_tag
;
/* Entry type. */
117
union
{
118
Elf64_Size
d_val
;
/* Integer value. */
119
Elf64_Addr
d_ptr
;
/* Address value. */
120
} d_un;
121
}
Elf64_Dyn
;
122
123
/*
124
* Relocation entries.
125
*/
126
127
/* Relocations that don't need an addend field. */
128
typedef
struct
{
129
Elf64_Addr
r_offset
;
/* Location to be relocated. */
130
Elf64_Size
r_info
;
/* Relocation type and symbol index. */
131
}
Elf64_Rel
;
132
133
/* Relocations that need an addend field. */
134
typedef
struct
{
135
Elf64_Addr
r_offset
;
/* Location to be relocated. */
136
Elf64_Size
r_info
;
/* Relocation type and symbol index. */
137
Elf64_Off
r_addend
;
/* Addend. */
138
}
Elf64_Rela
;
139
140
/* Macros for accessing the fields of r_info. */
141
#define ELF64_R_SYM(info) ((info) >> 32)
142
#define ELF64_R_TYPE(info) ((unsigned char)(info))
143
144
/* Macro for constructing r_info from field values. */
145
#define ELF64_R_INFO(sym, type) (((sym) << 32) + (unsigned char)(type))
146
147
/*
148
* Symbol table entries.
149
*/
150
151
typedef
struct
{
152
Elf64_Half
st_name
;
/* String table index of name. */
153
unsigned
char
st_info
;
/* Type and binding information. */
154
unsigned
char
st_other
;
/* Reserved (not used). */
155
Elf64_Quarter
st_shndx
;
/* Section index of symbol. */
156
Elf64_Addr
st_value
;
/* Symbol value. */
157
Elf64_Size
st_size
;
/* Size of associated object. */
158
}
Elf64_Sym
;
159
160
/* Macros for accessing the fields of st_info. */
161
#define ELF64_ST_BIND(info) ((info) >> 4)
162
#define ELF64_ST_TYPE(info) ((info) & 0xf)
163
164
/* Macro for constructing st_info from field values. */
165
#define ELF64_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
166
167
#endif
/* !_SYS_ELF64_H_ */
ULONG32
unsigned int ULONG32
Definition:
basetsd.h:123
Elf64_Sword
LONG64 Elf64_Sword
Definition:
elf64.h:39
Elf64_Quarter
USHORT Elf64_Quarter
Definition:
elf64.h:42
Elf64_Addr
ULONG64 Elf64_Addr
Definition:
elf64.h:36
Elf64_Off
ULONG64 Elf64_Off
Definition:
elf64.h:38
Elf64_Hashelt
Elf64_Half Elf64_Hashelt
Definition:
elf64.h:54
Elf64_Size
ULONG64 Elf64_Size
Definition:
elf64.h:41
Elf64_Word
ULONG64 Elf64_Word
Definition:
elf64.h:40
Elf64_Half
ULONG32 Elf64_Half
Definition:
elf64.h:37
ULONG64
unsigned __int64 ULONG64
Definition:
imports.h:198
USHORT
unsigned short USHORT
Definition:
pedump.c:61
EI_NIDENT
#define EI_NIDENT
Definition:
common.h:64
Elf64_Dyn
Definition:
elf64.h:115
Elf64_Dyn::d_val
Elf64_Size d_val
Definition:
elf64.h:118
Elf64_Dyn::d_ptr
Elf64_Addr d_ptr
Definition:
elf64.h:119
Elf64_Dyn::d_tag
Elf64_Size d_tag
Definition:
elf64.h:116
Elf64_Ehdr
Definition:
elf64.h:61
Elf64_Ehdr::e_version
Elf64_Half e_version
Definition:
elf64.h:65
Elf64_Ehdr::e_shstrndx
Elf64_Quarter e_shstrndx
Definition:
elf64.h:75
Elf64_Ehdr::e_flags
Elf64_Half e_flags
Definition:
elf64.h:69
Elf64_Ehdr::e_shnum
Elf64_Quarter e_shnum
Definition:
elf64.h:74
Elf64_Ehdr::e_shoff
Elf64_Off e_shoff
Definition:
elf64.h:68
Elf64_Ehdr::e_shentsize
Elf64_Quarter e_shentsize
Definition:
elf64.h:73
Elf64_Ehdr::e_entry
Elf64_Addr e_entry
Definition:
elf64.h:66
Elf64_Ehdr::e_type
Elf64_Quarter e_type
Definition:
elf64.h:63
Elf64_Ehdr::e_phoff
Elf64_Off e_phoff
Definition:
elf64.h:67
Elf64_Ehdr::e_machine
Elf64_Quarter e_machine
Definition:
elf64.h:64
Elf64_Ehdr::e_phentsize
Elf64_Quarter e_phentsize
Definition:
elf64.h:71
Elf64_Ehdr::e_ehsize
Elf64_Quarter e_ehsize
Definition:
elf64.h:70
Elf64_Ehdr::e_phnum
Elf64_Quarter e_phnum
Definition:
elf64.h:72
Elf64_Phdr
Definition:
elf64.h:100
Elf64_Phdr::p_memsz
Elf64_Size p_memsz
Definition:
elf64.h:107
Elf64_Phdr::p_type
Elf64_Half p_type
Definition:
elf64.h:101
Elf64_Phdr::p_vaddr
Elf64_Addr p_vaddr
Definition:
elf64.h:104
Elf64_Phdr::p_flags
Elf64_Half p_flags
Definition:
elf64.h:102
Elf64_Phdr::p_paddr
Elf64_Addr p_paddr
Definition:
elf64.h:105
Elf64_Phdr::p_align
Elf64_Size p_align
Definition:
elf64.h:108
Elf64_Phdr::p_offset
Elf64_Off p_offset
Definition:
elf64.h:103
Elf64_Phdr::p_filesz
Elf64_Size p_filesz
Definition:
elf64.h:106
Elf64_Rel
Definition:
elf64.h:128
Elf64_Rel::r_info
Elf64_Size r_info
Definition:
elf64.h:130
Elf64_Rel::r_offset
Elf64_Addr r_offset
Definition:
elf64.h:129
Elf64_Rela
Definition:
elf64.h:134
Elf64_Rela::r_offset
Elf64_Addr r_offset
Definition:
elf64.h:135
Elf64_Rela::r_addend
Elf64_Off r_addend
Definition:
elf64.h:137
Elf64_Rela::r_info
Elf64_Size r_info
Definition:
elf64.h:136
Elf64_Shdr
Definition:
elf64.h:82
Elf64_Shdr::sh_entsize
Elf64_Size sh_entsize
Definition:
elf64.h:93
Elf64_Shdr::sh_name
Elf64_Half sh_name
Definition:
elf64.h:83
Elf64_Shdr::sh_info
Elf64_Half sh_info
Definition:
elf64.h:91
Elf64_Shdr::sh_addralign
Elf64_Size sh_addralign
Definition:
elf64.h:92
Elf64_Shdr::sh_size
Elf64_Size sh_size
Definition:
elf64.h:89
Elf64_Shdr::sh_type
Elf64_Half sh_type
Definition:
elf64.h:85
Elf64_Shdr::sh_link
Elf64_Half sh_link
Definition:
elf64.h:90
Elf64_Shdr::sh_addr
Elf64_Addr sh_addr
Definition:
elf64.h:87
Elf64_Shdr::sh_offset
Elf64_Off sh_offset
Definition:
elf64.h:88
Elf64_Shdr::sh_flags
Elf64_Size sh_flags
Definition:
elf64.h:86
Elf64_Sym
Definition:
elf64.h:151
Elf64_Sym::st_shndx
Elf64_Quarter st_shndx
Definition:
elf64.h:155
Elf64_Sym::st_name
Elf64_Half st_name
Definition:
elf64.h:152
Elf64_Sym::st_size
Elf64_Size st_size
Definition:
elf64.h:157
Elf64_Sym::st_value
Elf64_Addr st_value
Definition:
elf64.h:156
Elf64_Sym::st_info
unsigned char st_info
Definition:
elf64.h:153
Elf64_Sym::st_other
unsigned char st_other
Definition:
elf64.h:154
LONG64
int64_t LONG64
Definition:
typedefs.h:68
sdk
include
reactos
elf
elf64.h
Generated on Sat Oct 12 2024 06:12:14 for ReactOS by
1.9.6