]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/x86/include/elf.h
Remove spurious newline
[FreeBSD/FreeBSD.git] / sys / x86 / include / elf.h
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 1996-1997 John D. Polstra.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  *
28  * $FreeBSD$
29  */
30
31 #ifndef _MACHINE_ELF_H_
32 #define _MACHINE_ELF_H_ 1
33
34 #if defined(__i386__) || defined(_MACHINE_ELF_WANT_32BIT)
35
36 /*
37  * ELF definitions for the i386 architecture.
38  */
39
40 #include <sys/elf32.h>  /* Definitions common to all 32 bit architectures. */
41 #if defined(__ELF_WORD_SIZE) && __ELF_WORD_SIZE == 64
42 #include <sys/elf64.h>  /* Definitions common to all 64 bit architectures. */
43 #endif
44
45 #ifndef __ELF_WORD_SIZE
46 #define __ELF_WORD_SIZE 32      /* Used by <sys/elf_generic.h> */
47 #endif
48
49 #include <sys/elf_generic.h>
50
51 #define ELF_ARCH        EM_386
52
53 #define ELF_MACHINE_OK(x) ((x) == EM_386 || (x) == EM_486)
54
55 /*
56  * Auxiliary vector entries for passing information to the interpreter.
57  *
58  * The i386 supplement to the SVR4 ABI specification names this "auxv_t",
59  * but POSIX lays claim to all symbols ending with "_t".
60  */
61
62 typedef struct {        /* Auxiliary vector entry on initial stack */
63         int     a_type;                 /* Entry type. */
64         union {
65                 long    a_val;          /* Integer value. */
66                 void    *a_ptr;         /* Address. */
67                 void    (*a_fcn)(void); /* Function pointer (not used). */
68         } a_un;
69 } Elf32_Auxinfo;
70
71 #if __ELF_WORD_SIZE == 64
72 /* Fake for amd64 loader support */
73 typedef struct {
74         int fake;
75 } Elf64_Auxinfo;
76 #endif
77
78 __ElfType(Auxinfo);
79
80 /*
81  * Relocation types.
82  */
83
84 #define R_386_COUNT     38      /* Count of defined relocation types. */
85
86 /* Define "machine" characteristics */
87 #define ELF_TARG_CLASS  ELFCLASS32
88 #define ELF_TARG_DATA   ELFDATA2LSB
89 #define ELF_TARG_MACH   EM_386
90 #define ELF_TARG_VER    1
91
92 #define ET_DYN_LOAD_ADDR 0x01001000
93
94 #elif defined(__amd64__)
95
96 /*
97  * ELF definitions for the AMD64 architecture.
98  */
99
100 #ifndef __ELF_WORD_SIZE
101 #define __ELF_WORD_SIZE 64      /* Used by <sys/elf_generic.h> */
102 #endif
103 #include <sys/elf32.h>  /* Definitions common to all 32 bit architectures. */
104 #include <sys/elf64.h>  /* Definitions common to all 64 bit architectures. */
105 #include <sys/elf_generic.h>
106
107 #define ELF_ARCH        EM_X86_64
108 #define ELF_ARCH32      EM_386
109
110 #define ELF_MACHINE_OK(x) ((x) == EM_X86_64)
111
112 /*
113  * Auxiliary vector entries for passing information to the interpreter.
114  *
115  * The i386 supplement to the SVR4 ABI specification names this "auxv_t",
116  * but POSIX lays claim to all symbols ending with "_t".
117  */
118 typedef struct {        /* Auxiliary vector entry on initial stack */
119         int     a_type;                 /* Entry type. */
120         union {
121                 int     a_val;          /* Integer value. */
122         } a_un;
123 } Elf32_Auxinfo;
124
125
126 typedef struct {        /* Auxiliary vector entry on initial stack */
127         long    a_type;                 /* Entry type. */
128         union {
129                 long    a_val;          /* Integer value. */
130                 void    *a_ptr;         /* Address. */
131                 void    (*a_fcn)(void); /* Function pointer (not used). */
132         } a_un;
133 } Elf64_Auxinfo;
134
135 __ElfType(Auxinfo);
136
137 /*
138  * Relocation types.
139  */
140
141 #define R_X86_64_COUNT  24      /* Count of defined relocation types. */
142
143 /* Define "machine" characteristics */
144 #if __ELF_WORD_SIZE == 32
145 #define ELF_TARG_CLASS  ELFCLASS32
146 #else
147 #define ELF_TARG_CLASS  ELFCLASS64
148 #endif
149 #define ELF_TARG_DATA   ELFDATA2LSB
150 #define ELF_TARG_MACH   EM_X86_64
151 #define ELF_TARG_VER    1
152
153 #if __ELF_WORD_SIZE == 32
154 #define ET_DYN_LOAD_ADDR 0x01001000
155 #else
156 #define ET_DYN_LOAD_ADDR 0x01021000
157 #endif
158
159 #endif /* __i386__, __amd64__ */
160
161 #endif /* !_MACHINE_ELF_H_ */