Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / sys / elf_common.h @ 13

History | View | Annotate | Download (39.8 KB)

1
/*-
2
 * Copyright (c) 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$
27
 */
28

    
29
#ifndef _SYS_ELF_COMMON_H_
30
#define        _SYS_ELF_COMMON_H_ 1
31

    
32
/*
33
 * ELF definitions that are independent of architecture or word size.
34
 */
35

    
36
/*
37
 * Note header.  The ".note" section contains an array of notes.  Each
38
 * begins with this header, aligned to a word boundary.  Immediately
39
 * following the note header is n_namesz bytes of name, padded to the
40
 * next word boundary.  Then comes n_descsz bytes of descriptor, again
41
 * padded to a word boundary.  The values of n_namesz and n_descsz do
42
 * not include the padding.
43
 */
44

    
45
typedef struct {
46
        uint32_t        n_namesz;        /* Length of name. */
47
        uint32_t        n_descsz;        /* Length of descriptor. */
48
        uint32_t        n_type;                /* Type of this note. */
49
} Elf_Note;
50

    
51
/*
52
 * The header for GNU-style hash sections.
53
 */
54

    
55
typedef struct {
56
        uint32_t        gh_nbuckets;        /* Number of hash buckets. */
57
        uint32_t        gh_symndx;        /* First visible symbol in .dynsym. */
58
        uint32_t        gh_maskwords;        /* #maskwords used in bloom filter. */
59
        uint32_t        gh_shift2;        /* Bloom filter shift count. */
60
} Elf_GNU_Hash_Header;
61

    
62
/* Indexes into the e_ident array.  Keep synced with
63
   http://www.sco.com/developers/gabi/latest/ch4.eheader.html */
64
#define        EI_MAG0                0        /* Magic number, byte 0. */
65
#define        EI_MAG1                1        /* Magic number, byte 1. */
66
#define        EI_MAG2                2        /* Magic number, byte 2. */
67
#define        EI_MAG3                3        /* Magic number, byte 3. */
68
#define        EI_CLASS        4        /* Class of machine. */
69
#define        EI_DATA                5        /* Data format. */
70
#define        EI_VERSION        6        /* ELF format version. */
71
#define        EI_OSABI        7        /* Operating system / ABI identification */
72
#define        EI_ABIVERSION        8        /* ABI version */
73
#define        OLD_EI_BRAND        8        /* Start of architecture identification. */
74
#define        EI_PAD                9        /* Start of padding (per SVR4 ABI). */
75
#define        EI_NIDENT        16        /* Size of e_ident array. */
76

    
77
/* Values for the magic number bytes. */
78
#define        ELFMAG0                0x7f
79
#define        ELFMAG1                'E'
80
#define        ELFMAG2                'L'
81
#define        ELFMAG3                'F'
82
#define        ELFMAG                "\177ELF"        /* magic string */
83
#define        SELFMAG                4                /* magic string size */
84

    
85
/* Values for e_ident[EI_VERSION] and e_version. */
86
#define        EV_NONE                0
87
#define        EV_CURRENT        1
88

    
89
/* Values for e_ident[EI_CLASS]. */
90
#define        ELFCLASSNONE        0        /* Unknown class. */
91
#define        ELFCLASS32        1        /* 32-bit architecture. */
92
#define        ELFCLASS64        2        /* 64-bit architecture. */
93

    
94
/* Values for e_ident[EI_DATA]. */
95
#define        ELFDATANONE        0        /* Unknown data format. */
96
#define        ELFDATA2LSB        1        /* 2's complement little-endian. */
97
#define        ELFDATA2MSB        2        /* 2's complement big-endian. */
98

    
99
/* Values for e_ident[EI_OSABI]. */
100
#define        ELFOSABI_NONE                0        /* UNIX System V ABI */
101
#define        ELFOSABI_HPUX                1        /* HP-UX operating system */
102
#define        ELFOSABI_NETBSD                2        /* NetBSD */
103
#define        ELFOSABI_LINUX                3        /* GNU/Linux */
104
#define        ELFOSABI_HURD                4        /* GNU/Hurd */
105
#define        ELFOSABI_86OPEN                5        /* 86Open common IA32 ABI */
106
#define        ELFOSABI_SOLARIS        6        /* Solaris */
107
#define        ELFOSABI_AIX                7        /* AIX */
108
#define        ELFOSABI_IRIX                8        /* IRIX */
109
#define        ELFOSABI_FREEBSD        9        /* FreeBSD */
110
#define        ELFOSABI_TRU64                10        /* TRU64 UNIX */
111
#define        ELFOSABI_MODESTO        11        /* Novell Modesto */
112
#define        ELFOSABI_OPENBSD        12        /* OpenBSD */
113
#define        ELFOSABI_OPENVMS        13        /* Open VMS */
114
#define        ELFOSABI_NSK                14        /* HP Non-Stop Kernel */
115
#define        ELFOSABI_AROS                15        /* Amiga Research OS */
116
#define        ELFOSABI_ARM                97        /* ARM */
117
#define        ELFOSABI_STANDALONE        255        /* Standalone (embedded) application */
118

    
119
#define        ELFOSABI_SYSV                ELFOSABI_NONE        /* symbol used in old spec */
120
#define        ELFOSABI_MONTEREY        ELFOSABI_AIX        /* Monterey */
121

    
122
/* e_ident */
123
#define        IS_ELF(ehdr)        ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \
124
                         (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \
125
                         (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \
126
                         (ehdr).e_ident[EI_MAG3] == ELFMAG3)
127

    
128
/* Values for e_type. */
129
#define        ET_NONE                0        /* Unknown type. */
130
#define        ET_REL                1        /* Relocatable. */
131
#define        ET_EXEC                2        /* Executable. */
132
#define        ET_DYN                3        /* Shared object. */
133
#define        ET_CORE                4        /* Core file. */
134
#define        ET_LOOS                0xfe00        /* First operating system specific. */
135
#define        ET_HIOS                0xfeff        /* Last operating system-specific. */
136
#define        ET_LOPROC        0xff00        /* First processor-specific. */
137
#define        ET_HIPROC        0xffff        /* Last processor-specific. */
138

    
139
/* Values for e_machine. */
140
#define        EM_NONE                0        /* Unknown machine. */
141
#define        EM_M32                1        /* AT&T WE32100. */
142
#define        EM_SPARC        2        /* Sun SPARC. */
143
#define        EM_386                3        /* Intel i386. */
144
#define        EM_68K                4        /* Motorola 68000. */
145
#define        EM_88K                5        /* Motorola 88000. */
146
#define        EM_860                7        /* Intel i860. */
147
#define        EM_MIPS                8        /* MIPS R3000 Big-Endian only. */
148
#define        EM_S370                9        /* IBM System/370. */
149
#define        EM_MIPS_RS3_LE        10        /* MIPS R3000 Little-Endian. */
150
#define        EM_PARISC        15        /* HP PA-RISC. */
151
#define        EM_VPP500        17        /* Fujitsu VPP500. */
152
#define        EM_SPARC32PLUS        18        /* SPARC v8plus. */
153
#define        EM_960                19        /* Intel 80960. */
154
#define        EM_PPC                20        /* PowerPC 32-bit. */
155
#define        EM_PPC64        21        /* PowerPC 64-bit. */
156
#define        EM_S390                22        /* IBM System/390. */
157
#define        EM_V800                36        /* NEC V800. */
158
#define        EM_FR20                37        /* Fujitsu FR20. */
159
#define        EM_RH32                38        /* TRW RH-32. */
160
#define        EM_RCE                39        /* Motorola RCE. */
161
#define        EM_ARM                40        /* ARM. */
162
#define        EM_SH                42        /* Hitachi SH. */
163
#define        EM_SPARCV9        43        /* SPARC v9 64-bit. */
164
#define        EM_TRICORE        44        /* Siemens TriCore embedded processor. */
165
#define        EM_ARC                45        /* Argonaut RISC Core. */
166
#define        EM_H8_300        46        /* Hitachi H8/300. */
167
#define        EM_H8_300H        47        /* Hitachi H8/300H. */
168
#define        EM_H8S                48        /* Hitachi H8S. */
169
#define        EM_H8_500        49        /* Hitachi H8/500. */
170
#define        EM_IA_64        50        /* Intel IA-64 Processor. */
171
#define        EM_MIPS_X        51        /* Stanford MIPS-X. */
172
#define        EM_COLDFIRE        52        /* Motorola ColdFire. */
173
#define        EM_68HC12        53        /* Motorola M68HC12. */
174
#define        EM_MMA                54        /* Fujitsu MMA. */
175
#define        EM_PCP                55        /* Siemens PCP. */
176
#define        EM_NCPU                56        /* Sony nCPU. */
177
#define        EM_NDR1                57        /* Denso NDR1 microprocessor. */
178
#define        EM_STARCORE        58        /* Motorola Star*Core processor. */
179
#define        EM_ME16                59        /* Toyota ME16 processor. */
180
#define        EM_ST100        60        /* STMicroelectronics ST100 processor. */
181
#define        EM_TINYJ        61        /* Advanced Logic Corp. TinyJ processor. */
182
#define        EM_X86_64        62        /* Advanced Micro Devices x86-64 */
183
#define        EM_AMD64        EM_X86_64        /* Advanced Micro Devices x86-64 (compat) */
184
#define        EM_PDSP                63        /* Sony DSP Processor. */
185
#define        EM_FX66                66        /* Siemens FX66 microcontroller. */
186
#define        EM_ST9PLUS        67        /* STMicroelectronics ST9+ 8/16
187
                                   microcontroller. */
188
#define        EM_ST7                68        /* STmicroelectronics ST7 8-bit
189
                                   microcontroller. */
190
#define        EM_68HC16        69        /* Motorola MC68HC16 microcontroller. */
191
#define        EM_68HC11        70        /* Motorola MC68HC11 microcontroller. */
192
#define        EM_68HC08        71        /* Motorola MC68HC08 microcontroller. */
193
#define        EM_68HC05        72        /* Motorola MC68HC05 microcontroller. */
194
#define        EM_SVX                73        /* Silicon Graphics SVx. */
195
#define        EM_ST19                74        /* STMicroelectronics ST19 8-bit mc. */
196
#define        EM_VAX                75        /* Digital VAX. */
197
#define        EM_CRIS                76        /* Axis Communications 32-bit embedded
198
                                   processor. */
199
#define        EM_JAVELIN        77        /* Infineon Technologies 32-bit embedded
200
                                   processor. */
201
#define        EM_FIREPATH        78        /* Element 14 64-bit DSP Processor. */
202
#define        EM_ZSP                79        /* LSI Logic 16-bit DSP Processor. */
203
#define        EM_MMIX                80        /* Donald Knuth's educational 64-bit proc. */
204
#define        EM_HUANY        81        /* Harvard University machine-independent
205
                                   object files. */
206
#define        EM_PRISM        82        /* SiTera Prism. */
207
#define        EM_AVR                83        /* Atmel AVR 8-bit microcontroller. */
208
#define        EM_FR30                84        /* Fujitsu FR30. */
209
#define        EM_D10V                85        /* Mitsubishi D10V. */
210
#define        EM_D30V                86        /* Mitsubishi D30V. */
211
#define        EM_V850                87        /* NEC v850. */
212
#define        EM_M32R                88        /* Mitsubishi M32R. */
213
#define        EM_MN10300        89        /* Matsushita MN10300. */
214
#define        EM_MN10200        90        /* Matsushita MN10200. */
215
#define        EM_PJ                91        /* picoJava. */
216
#define        EM_OPENRISC        92        /* OpenRISC 32-bit embedded processor. */
217
#define        EM_ARC_A5        93        /* ARC Cores Tangent-A5. */
218
#define        EM_XTENSA        94        /* Tensilica Xtensa Architecture. */
219
#define        EM_VIDEOCORE        95        /* Alphamosaic VideoCore processor. */
220
#define        EM_TMM_GPP        96        /* Thompson Multimedia General Purpose
221
                                   Processor. */
222
#define        EM_NS32K        97        /* National Semiconductor 32000 series. */
223
#define        EM_TPC                98        /* Tenor Network TPC processor. */
224
#define        EM_SNP1K        99        /* Trebia SNP 1000 processor. */
225
#define        EM_ST200        100        /* STMicroelectronics ST200 microcontroller. */
226
#define        EM_IP2K                101        /* Ubicom IP2xxx microcontroller family. */
227
#define        EM_MAX                102        /* MAX Processor. */
228
#define        EM_CR                103        /* National Semiconductor CompactRISC
229
                                   microprocessor. */
230
#define        EM_F2MC16        104        /* Fujitsu F2MC16. */
231
#define        EM_MSP430        105        /* Texas Instruments embedded microcontroller
232
                                   msp430. */
233
#define        EM_BLACKFIN        106        /* Analog Devices Blackfin (DSP) processor. */
234
#define        EM_SE_C33        107        /* S1C33 Family of Seiko Epson processors. */
235
#define        EM_SEP                108        /* Sharp embedded microprocessor. */
236
#define        EM_ARCA                109        /* Arca RISC Microprocessor. */
237
#define        EM_UNICORE        110        /* Microprocessor series from PKU-Unity Ltd.
238
                                   and MPRC of Peking University */
239

    
240
/* Non-standard or deprecated. */
241
#define        EM_486                6        /* Intel i486. */
242
#define        EM_MIPS_RS4_BE        10        /* MIPS R4000 Big-Endian */
243
#define        EM_ALPHA_STD        41        /* Digital Alpha (standard value). */
244
#define        EM_ALPHA        0x9026        /* Alpha (written in the absence of an ABI) */
245

    
246
/* Special section indexes. */
247
#define        SHN_UNDEF             0                /* Undefined, missing, irrelevant. */
248
#define        SHN_LORESERVE        0xff00                /* First of reserved range. */
249
#define        SHN_LOPROC        0xff00                /* First processor-specific. */
250
#define        SHN_HIPROC        0xff1f                /* Last processor-specific. */
251
#define        SHN_LOOS        0xff20                /* First operating system-specific. */
252
#define        SHN_HIOS        0xff3f                /* Last operating system-specific. */
253
#define        SHN_ABS                0xfff1                /* Absolute values. */
254
#define        SHN_COMMON        0xfff2                /* Common data. */
255
#define        SHN_XINDEX        0xffff                /* Escape -- index stored elsewhere. */
256
#define        SHN_HIRESERVE        0xffff                /* Last of reserved range. */
257

    
258
/* sh_type */
259
#define        SHT_NULL                0        /* inactive */
260
#define        SHT_PROGBITS                1        /* program defined information */
261
#define        SHT_SYMTAB                2        /* symbol table section */
262
#define        SHT_STRTAB                3        /* string table section */
263
#define        SHT_RELA                4        /* relocation section with addends */
264
#define        SHT_HASH                5        /* symbol hash table section */
265
#define        SHT_DYNAMIC                6        /* dynamic section */
266
#define        SHT_NOTE                7        /* note section */
267
#define        SHT_NOBITS                8        /* no space section */
268
#define        SHT_REL                        9        /* relocation section - no addends */
269
#define        SHT_SHLIB                10        /* reserved - purpose unknown */
270
#define        SHT_DYNSYM                11        /* dynamic symbol table section */
271
#define        SHT_INIT_ARRAY                14        /* Initialization function pointers. */
272
#define        SHT_FINI_ARRAY                15        /* Termination function pointers. */
273
#define        SHT_PREINIT_ARRAY        16        /* Pre-initialization function ptrs. */
274
#define        SHT_GROUP                17        /* Section group. */
275
#define        SHT_SYMTAB_SHNDX        18        /* Section indexes (see SHN_XINDEX). */
276
#define        SHT_LOOS                0x60000000        /* First of OS specific semantics */
277
#define        SHT_LOSUNW                0x6ffffff4
278
#define        SHT_SUNW_dof                0x6ffffff4
279
#define        SHT_SUNW_cap                0x6ffffff5
280
#define        SHT_SUNW_SIGNATURE        0x6ffffff6
281
#define        SHT_GNU_HASH                0x6ffffff6
282
#define        SHT_SUNW_ANNOTATE        0x6ffffff7
283
#define        SHT_SUNW_DEBUGSTR        0x6ffffff8
284
#define        SHT_SUNW_DEBUG                0x6ffffff9
285
#define        SHT_SUNW_move                0x6ffffffa
286
#define        SHT_SUNW_COMDAT                0x6ffffffb
287
#define        SHT_SUNW_syminfo        0x6ffffffc
288
#define        SHT_SUNW_verdef                0x6ffffffd
289
#define        SHT_GNU_verdef                0x6ffffffd        /* Symbol versions provided */
290
#define        SHT_SUNW_verneed        0x6ffffffe
291
#define        SHT_GNU_verneed                0x6ffffffe        /* Symbol versions required */
292
#define        SHT_SUNW_versym                0x6fffffff
293
#define        SHT_GNU_versym                0x6fffffff        /* Symbol version table */
294
#define        SHT_HISUNW                0x6fffffff
295
#define        SHT_HIOS                0x6fffffff        /* Last of OS specific semantics */
296
#define        SHT_LOPROC                0x70000000        /* reserved range for processor */
297
#define        SHT_AMD64_UNWIND        0x70000001        /* unwind information */
298
#define        SHT_HIPROC                0x7fffffff        /* specific section header types */
299
#define        SHT_LOUSER                0x80000000        /* reserved range for application */
300
#define        SHT_HIUSER                0xffffffff        /* specific indexes */
301

    
302
/* Flags for sh_flags. */
303
#define        SHF_WRITE                0x1        /* Section contains writable data. */
304
#define        SHF_ALLOC                0x2        /* Section occupies memory. */
305
#define        SHF_EXECINSTR                0x4        /* Section contains instructions. */
306
#define        SHF_MERGE                0x10        /* Section may be merged. */
307
#define        SHF_STRINGS                0x20        /* Section contains strings. */
308
#define        SHF_INFO_LINK                0x40        /* sh_info holds section index. */
309
#define        SHF_LINK_ORDER                0x80        /* Special ordering requirements. */
310
#define        SHF_OS_NONCONFORMING        0x100        /* OS-specific processing required. */
311
#define        SHF_GROUP                0x200        /* Member of section group. */
312
#define        SHF_TLS                        0x400        /* Section contains TLS data. */
313
#define        SHF_MASKOS        0x0ff00000        /* OS-specific semantics. */
314
#define        SHF_MASKPROC        0xf0000000        /* Processor-specific semantics. */
315

    
316
/* Values for p_type. */
317
#define        PT_NULL                0        /* Unused entry. */
318
#define        PT_LOAD                1        /* Loadable segment. */
319
#define        PT_DYNAMIC        2        /* Dynamic linking information segment. */
320
#define        PT_INTERP        3        /* Pathname of interpreter. */
321
#define        PT_NOTE                4        /* Auxiliary information. */
322
#define        PT_SHLIB        5        /* Reserved (not used). */
323
#define        PT_PHDR                6        /* Location of program header itself. */
324
#define        PT_TLS                7        /* Thread local storage segment */
325
#define        PT_LOOS                0x60000000        /* First OS-specific. */
326
#define        PT_SUNW_UNWIND        0x6464e550        /* amd64 UNWIND program header */
327
#define        PT_GNU_EH_FRAME        0x6474e550
328
#define        PT_LOSUNW        0x6ffffffa
329
#define        PT_SUNWBSS        0x6ffffffa        /* Sun Specific segment */
330
#define        PT_SUNWSTACK        0x6ffffffb        /* describes the stack segment */
331
#define        PT_SUNWDTRACE        0x6ffffffc        /* private */
332
#define        PT_SUNWCAP        0x6ffffffd        /* hard/soft capabilities segment */
333
#define        PT_HISUNW        0x6fffffff
334
#define        PT_HIOS                0x6fffffff        /* Last OS-specific. */
335
#define        PT_LOPROC        0x70000000        /* First processor-specific type. */
336
#define        PT_HIPROC        0x7fffffff        /* Last processor-specific type. */
337

    
338
/* Values for p_flags. */
339
#define        PF_X                0x1                /* Executable. */
340
#define        PF_W                0x2                /* Writable. */
341
#define        PF_R                0x4                /* Readable. */
342
#define        PF_MASKOS        0x0ff00000        /* Operating system-specific. */
343
#define        PF_MASKPROC        0xf0000000        /* Processor-specific. */
344

    
345
/* Extended program header index. */
346
#define        PN_XNUM                0xffff
347

    
348
/* Values for d_tag. */
349
#define        DT_NULL                0        /* Terminating entry. */
350
#define        DT_NEEDED        1        /* String table offset of a needed shared
351
                                   library. */
352
#define        DT_PLTRELSZ        2        /* Total size in bytes of PLT relocations. */
353
#define        DT_PLTGOT        3        /* Processor-dependent address. */
354
#define        DT_HASH                4        /* Address of symbol hash table. */
355
#define        DT_STRTAB        5        /* Address of string table. */
356
#define        DT_SYMTAB        6        /* Address of symbol table. */
357
#define        DT_RELA                7        /* Address of ElfNN_Rela relocations. */
358
#define        DT_RELASZ        8        /* Total size of ElfNN_Rela relocations. */
359
#define        DT_RELAENT        9        /* Size of each ElfNN_Rela relocation entry. */
360
#define        DT_STRSZ        10        /* Size of string table. */
361
#define        DT_SYMENT        11        /* Size of each symbol table entry. */
362
#define        DT_INIT                12        /* Address of initialization function. */
363
#define        DT_FINI                13        /* Address of finalization function. */
364
#define        DT_SONAME        14        /* String table offset of shared object
365
                                   name. */
366
#define        DT_RPATH        15        /* String table offset of library path. [sup] */
367
#define        DT_SYMBOLIC        16        /* Indicates "symbolic" linking. [sup] */
368
#define        DT_REL                17        /* Address of ElfNN_Rel relocations. */
369
#define        DT_RELSZ        18        /* Total size of ElfNN_Rel relocations. */
370
#define        DT_RELENT        19        /* Size of each ElfNN_Rel relocation. */
371
#define        DT_PLTREL        20        /* Type of relocation used for PLT. */
372
#define        DT_DEBUG        21        /* Reserved (not used). */
373
#define        DT_TEXTREL        22        /* Indicates there may be relocations in
374
                                   non-writable segments. [sup] */
375
#define        DT_JMPREL        23        /* Address of PLT relocations. */
376
#define        DT_BIND_NOW        24        /* [sup] */
377
#define        DT_INIT_ARRAY        25        /* Address of the array of pointers to
378
                                   initialization functions */
379
#define        DT_FINI_ARRAY        26        /* Address of the array of pointers to
380
                                   termination functions */
381
#define        DT_INIT_ARRAYSZ        27        /* Size in bytes of the array of
382
                                   initialization functions. */
383
#define        DT_FINI_ARRAYSZ        28        /* Size in bytes of the array of
384
                                   terminationfunctions. */
385
#define        DT_RUNPATH        29        /* String table offset of a null-terminated
386
                                   library search path string. */
387
#define        DT_FLAGS        30        /* Object specific flag values. */
388
#define        DT_ENCODING        32        /* Values greater than or equal to DT_ENCODING
389
                                   and less than DT_LOOS follow the rules for
390
                                   the interpretation of the d_un union
391
                                   as follows: even == 'd_ptr', even == 'd_val'
392
                                   or none */
393
#define        DT_PREINIT_ARRAY 32        /* Address of the array of pointers to
394
                                   pre-initialization functions. */
395
#define        DT_PREINIT_ARRAYSZ 33        /* Size in bytes of the array of
396
                                   pre-initialization functions. */
397
#define        DT_MAXPOSTAGS        34        /* number of positive tags */
398
#define        DT_LOOS                0x6000000d        /* First OS-specific */
399
#define        DT_SUNW_AUXILIARY        0x6000000d        /* symbol auxiliary name */
400
#define        DT_SUNW_RTLDINF                0x6000000e        /* ld.so.1 info (private) */
401
#define        DT_SUNW_FILTER                0x6000000f        /* symbol filter name */
402
#define        DT_SUNW_CAP                0x60000010        /* hardware/software */
403
#define        DT_HIOS                0x6ffff000        /* Last OS-specific */
404

    
405
/*
406
 * DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
407
 * Dyn.d_un.d_val field of the Elf*_Dyn structure.
408
 */
409
#define        DT_VALRNGLO        0x6ffffd00
410
#define        DT_CHECKSUM        0x6ffffdf8        /* elf checksum */
411
#define        DT_PLTPADSZ        0x6ffffdf9        /* pltpadding size */
412
#define        DT_MOVEENT        0x6ffffdfa        /* move table entry size */
413
#define        DT_MOVESZ        0x6ffffdfb        /* move table size */
414
#define        DT_FEATURE_1        0x6ffffdfc        /* feature holder */
415
#define        DT_POSFLAG_1        0x6ffffdfd        /* flags for DT_* entries, effecting */
416
                                        /*        the following DT_* entry. */
417
                                        /*        See DF_P1_* definitions */
418
#define        DT_SYMINSZ        0x6ffffdfe        /* syminfo table size (in bytes) */
419
#define        DT_SYMINENT        0x6ffffdff        /* syminfo entry size (in bytes) */
420
#define        DT_VALRNGHI        0x6ffffdff
421

    
422
/*
423
 * DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
424
 * Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
425
 *
426
 * If any adjustment is made to the ELF object after it has been
427
 * built, these entries will need to be adjusted.
428
 */
429
#define        DT_ADDRRNGLO        0x6ffffe00
430
#define        DT_GNU_HASH        0x6ffffef5        /* GNU-style hash table */
431
#define        DT_CONFIG        0x6ffffefa        /* configuration information */
432
#define        DT_DEPAUDIT        0x6ffffefb        /* dependency auditing */
433
#define        DT_AUDIT        0x6ffffefc        /* object auditing */
434
#define        DT_PLTPAD        0x6ffffefd        /* pltpadding (sparcv9) */
435
#define        DT_MOVETAB        0x6ffffefe        /* move table */
436
#define        DT_SYMINFO        0x6ffffeff        /* syminfo table */
437
#define        DT_ADDRRNGHI        0x6ffffeff
438

    
439
#define        DT_VERSYM        0x6ffffff0        /* Address of versym section. */
440
#define        DT_RELACOUNT        0x6ffffff9        /* number of RELATIVE relocations */
441
#define        DT_RELCOUNT        0x6ffffffa        /* number of RELATIVE relocations */
442
#define        DT_FLAGS_1        0x6ffffffb        /* state flags - see DF_1_* defs */
443
#define        DT_VERDEF        0x6ffffffc        /* Address of verdef section. */
444
#define        DT_VERDEFNUM        0x6ffffffd        /* Number of elems in verdef section */
445
#define        DT_VERNEED        0x6ffffffe        /* Address of verneed section. */
446
#define        DT_VERNEEDNUM        0x6fffffff        /* Number of elems in verneed section */
447

    
448
#define        DT_LOPROC        0x70000000        /* First processor-specific type. */
449
#define        DT_DEPRECATED_SPARC_REGISTER        0x7000001
450
#define        DT_AUXILIARY        0x7ffffffd        /* shared library auxiliary name */
451
#define        DT_USED                0x7ffffffe        /* ignored - same as needed */
452
#define        DT_FILTER        0x7fffffff        /* shared library filter name */
453
#define        DT_HIPROC        0x7fffffff        /* Last processor-specific type. */
454

    
455
/* Values for DT_FLAGS */
456
#define        DF_ORIGIN        0x0001        /* Indicates that the object being loaded may
457
                                   make reference to the $ORIGIN substitution
458
                                   string */
459
#define        DF_SYMBOLIC        0x0002        /* Indicates "symbolic" linking. */
460
#define        DF_TEXTREL        0x0004        /* Indicates there may be relocations in
461
                                   non-writable segments. */
462
#define        DF_BIND_NOW        0x0008        /* Indicates that the dynamic linker should
463
                                   process all relocations for the object
464
                                   containing this entry before transferring
465
                                   control to the program. */
466
#define        DF_STATIC_TLS        0x0010        /* Indicates that the shared object or
467
                                   executable contains code using a static
468
                                   thread-local storage scheme. */
469

    
470
/* Values for DT_FLAGS_1 */
471
#define        DF_1_BIND_NOW        0x00000001        /* Same as DF_BIND_NOW */
472
#define        DF_1_GLOBAL        0x00000002        /* Set the RTLD_GLOBAL for object */
473
#define        DF_1_NODELETE        0x00000008        /* Set the RTLD_NODELETE for object */
474
#define        DF_1_NOOPEN     0x00000040        /* Do not allow loading on dlopen() */
475
#define        DF_1_ORIGIN        0x00000080        /* Process $ORIGIN */
476

    
477
/* Values for n_type.  Used in core files. */
478
#define        NT_PRSTATUS        1        /* Process status. */
479
#define        NT_FPREGSET        2        /* Floating point registers. */
480
#define        NT_PRPSINFO        3        /* Process state info. */
481

    
482
/* Symbol Binding - ELFNN_ST_BIND - st_info */
483
#define        STB_LOCAL        0        /* Local symbol */
484
#define        STB_GLOBAL        1        /* Global symbol */
485
#define        STB_WEAK        2        /* like global - lower precedence */
486
#define        STB_LOOS        10        /* Reserved range for operating system */
487
#define        STB_HIOS        12        /*   specific semantics. */
488
#define        STB_LOPROC        13        /* reserved range for processor */
489
#define        STB_HIPROC        15        /*   specific semantics. */
490

    
491
/* Symbol type - ELFNN_ST_TYPE - st_info */
492
#define        STT_NOTYPE        0        /* Unspecified type. */
493
#define        STT_OBJECT        1        /* Data object. */
494
#define        STT_FUNC        2        /* Function. */
495
#define        STT_SECTION        3        /* Section. */
496
#define        STT_FILE        4        /* Source file. */
497
#define        STT_COMMON        5        /* Uninitialized common block. */
498
#define        STT_TLS                6        /* TLS object. */
499
#define        STT_NUM                7
500
#define        STT_LOOS        10        /* Reserved range for operating system */
501
#define        STT_HIOS        12        /*   specific semantics. */
502
#define        STT_LOPROC        13        /* reserved range for processor */
503
#define        STT_HIPROC        15        /*   specific semantics. */
504

    
505
/* Symbol visibility - ELFNN_ST_VISIBILITY - st_other */
506
#define        STV_DEFAULT        0x0        /* Default visibility (see binding). */
507
#define        STV_INTERNAL        0x1        /* Special meaning in relocatable objects. */
508
#define        STV_HIDDEN        0x2        /* Not visible. */
509
#define        STV_PROTECTED        0x3        /* Visible but not preemptible. */
510
#define        STV_EXPORTED        0x4
511
#define        STV_SINGLETON        0x5
512
#define        STV_ELIMINATE        0x6
513

    
514
/* Special symbol table indexes. */
515
#define        STN_UNDEF        0        /* Undefined symbol index. */
516

    
517
/* Symbol versioning flags. */
518
#define        VER_DEF_CURRENT        1
519
#define        VER_DEF_IDX(x)        VER_NDX(x)
520

    
521
#define        VER_FLG_BASE        0x01
522
#define        VER_FLG_WEAK        0x02
523

    
524
#define        VER_NEED_CURRENT        1
525
#define        VER_NEED_WEAK        (1u << 15)
526
#define        VER_NEED_HIDDEN        VER_NDX_HIDDEN
527
#define        VER_NEED_IDX(x)        VER_NDX(x)
528

    
529
#define        VER_NDX_LOCAL        0
530
#define        VER_NDX_GLOBAL        1
531
#define        VER_NDX_GIVEN        2
532

    
533
#define        VER_NDX_HIDDEN        (1u << 15)
534
#define        VER_NDX(x)        ((x) & ~(1u << 15))
535

    
536
#define        CA_SUNW_NULL        0
537
#define        CA_SUNW_HW_1        1                /* first hardware capabilities entry */
538
#define        CA_SUNW_SF_1        2                /* first software capabilities entry */
539

    
540
/*
541
 * Syminfo flag values
542
 */
543
#define        SYMINFO_FLG_DIRECT        0x0001        /* symbol ref has direct association */
544
                                        /*        to object containing defn. */
545
#define        SYMINFO_FLG_PASSTHRU        0x0002        /* ignored - see SYMINFO_FLG_FILTER */
546
#define        SYMINFO_FLG_COPY        0x0004        /* symbol is a copy-reloc */
547
#define        SYMINFO_FLG_LAZYLOAD        0x0008        /* object containing defn should be */
548
                                        /*        lazily-loaded */
549
#define        SYMINFO_FLG_DIRECTBIND        0x0010        /* ref should be bound directly to */
550
                                        /*        object containing defn. */
551
#define        SYMINFO_FLG_NOEXTDIRECT        0x0020        /* don't let an external reference */
552
                                        /*        directly bind to this symbol */
553
#define        SYMINFO_FLG_FILTER        0x0002        /* symbol ref is associated to a */
554
#define        SYMINFO_FLG_AUXILIARY        0x0040        /*         standard or auxiliary filter */
555

    
556
/*
557
 * Syminfo.si_boundto values.
558
 */
559
#define        SYMINFO_BT_SELF                0xffff        /* symbol bound to self */
560
#define        SYMINFO_BT_PARENT        0xfffe        /* symbol bound to parent */
561
#define        SYMINFO_BT_NONE                0xfffd        /* no special symbol binding */
562
#define        SYMINFO_BT_EXTERN        0xfffc        /* symbol defined as external */
563
#define        SYMINFO_BT_LOWRESERVE        0xff00        /* beginning of reserved entries */
564

    
565
/*
566
 * Syminfo version values.
567
 */
568
#define        SYMINFO_NONE                0        /* Syminfo version */
569
#define        SYMINFO_CURRENT                1
570
#define        SYMINFO_NUM                2
571

    
572
/*
573
 * Relocation types.
574
 *
575
 * All machine architectures are defined here to allow tools on one to
576
 * handle others.
577
 */
578

    
579
#define        R_386_NONE                0        /* No relocation. */
580
#define        R_386_32                1        /* Add symbol value. */
581
#define        R_386_PC32                2        /* Add PC-relative symbol value. */
582
#define        R_386_GOT32                3        /* Add PC-relative GOT offset. */
583
#define        R_386_PLT32                4        /* Add PC-relative PLT offset. */
584
#define        R_386_COPY                5        /* Copy data from shared object. */
585
#define        R_386_GLOB_DAT                6        /* Set GOT entry to data address. */
586
#define        R_386_JMP_SLOT                7        /* Set GOT entry to code address. */
587
#define        R_386_RELATIVE                8        /* Add load address of shared object. */
588
#define        R_386_GOTOFF                9        /* Add GOT-relative symbol address. */
589
#define        R_386_GOTPC                10        /* Add PC-relative GOT table address. */
590
#define        R_386_TLS_TPOFF                14        /* Negative offset in static TLS block */
591
#define        R_386_TLS_IE                15        /* Absolute address of GOT for -ve static TLS */
592
#define        R_386_TLS_GOTIE                16        /* GOT entry for negative static TLS block */
593
#define        R_386_TLS_LE                17        /* Negative offset relative to static TLS */
594
#define        R_386_TLS_GD                18        /* 32 bit offset to GOT (index,off) pair */
595
#define        R_386_TLS_LDM                19        /* 32 bit offset to GOT (index,zero) pair */
596
#define        R_386_TLS_GD_32                24        /* 32 bit offset to GOT (index,off) pair */
597
#define        R_386_TLS_GD_PUSH        25        /* pushl instruction for Sun ABI GD sequence */
598
#define        R_386_TLS_GD_CALL        26        /* call instruction for Sun ABI GD sequence */
599
#define        R_386_TLS_GD_POP        27        /* popl instruction for Sun ABI GD sequence */
600
#define        R_386_TLS_LDM_32        28        /* 32 bit offset to GOT (index,zero) pair */
601
#define        R_386_TLS_LDM_PUSH        29        /* pushl instruction for Sun ABI LD sequence */
602
#define        R_386_TLS_LDM_CALL        30        /* call instruction for Sun ABI LD sequence */
603
#define        R_386_TLS_LDM_POP        31        /* popl instruction for Sun ABI LD sequence */
604
#define        R_386_TLS_LDO_32        32        /* 32 bit offset from start of TLS block */
605
#define        R_386_TLS_IE_32                33        /* 32 bit offset to GOT static TLS offset entry */
606
#define        R_386_TLS_LE_32                34        /* 32 bit offset within static TLS block */
607
#define        R_386_TLS_DTPMOD32        35        /* GOT entry containing TLS index */
608
#define        R_386_TLS_DTPOFF32        36        /* GOT entry containing TLS offset */
609
#define        R_386_TLS_TPOFF32        37        /* GOT entry of -ve static TLS offset */
610

    
611
#define        R_ARM_NONE                0        /* No relocation. */
612
#define        R_ARM_PC24                1
613
#define        R_ARM_ABS32                2
614
#define        R_ARM_REL32                3
615
#define        R_ARM_PC13                4
616
#define        R_ARM_ABS16                5
617
#define        R_ARM_ABS12                6
618
#define        R_ARM_THM_ABS5                7
619
#define        R_ARM_ABS8                8
620
#define        R_ARM_SBREL32                9
621
#define        R_ARM_THM_PC22                10
622
#define        R_ARM_THM_PC8                11
623
#define        R_ARM_AMP_VCALL9        12
624
#define        R_ARM_SWI24                13
625
#define        R_ARM_THM_SWI8                14
626
#define        R_ARM_XPC25                15
627
#define        R_ARM_THM_XPC22                16
628
#define        R_ARM_COPY                20        /* Copy data from shared object. */
629
#define        R_ARM_GLOB_DAT                21        /* Set GOT entry to data address. */
630
#define        R_ARM_JUMP_SLOT                22        /* Set GOT entry to code address. */
631
#define        R_ARM_RELATIVE                23        /* Add load address of shared object. */
632
#define        R_ARM_GOTOFF                24        /* Add GOT-relative symbol address. */
633
#define        R_ARM_GOTPC                25        /* Add PC-relative GOT table address. */
634
#define        R_ARM_GOT32                26        /* Add PC-relative GOT offset. */
635
#define        R_ARM_PLT32                27        /* Add PC-relative PLT offset. */
636
#define        R_ARM_GNU_VTENTRY        100
637
#define        R_ARM_GNU_VTINHERIT        101
638
#define        R_ARM_RSBREL32                250
639
#define        R_ARM_THM_RPC22                251
640
#define        R_ARM_RREL32                252
641
#define        R_ARM_RABS32                253
642
#define        R_ARM_RPC24                254
643
#define        R_ARM_RBASE                255
644

    
645
/*        Name                        Value           Field        Calculation */
646
#define        R_IA_64_NONE                0        /* None */
647
#define        R_IA_64_IMM14                0x21        /* immediate14        S + A */
648
#define        R_IA_64_IMM22                0x22        /* immediate22        S + A */
649
#define        R_IA_64_IMM64                0x23        /* immediate64        S + A */
650
#define        R_IA_64_DIR32MSB        0x24        /* word32 MSB        S + A */
651
#define        R_IA_64_DIR32LSB        0x25        /* word32 LSB        S + A */
652
#define        R_IA_64_DIR64MSB        0x26        /* word64 MSB        S + A */
653
#define        R_IA_64_DIR64LSB        0x27        /* word64 LSB        S + A */
654
#define        R_IA_64_GPREL22                0x2a        /* immediate22        @gprel(S + A) */
655
#define        R_IA_64_GPREL64I        0x2b        /* immediate64        @gprel(S + A) */
656
#define        R_IA_64_GPREL32MSB        0x2c        /* word32 MSB        @gprel(S + A) */
657
#define        R_IA_64_GPREL32LSB        0x2d        /* word32 LSB        @gprel(S + A) */
658
#define        R_IA_64_GPREL64MSB        0x2e        /* word64 MSB        @gprel(S + A) */
659
#define        R_IA_64_GPREL64LSB        0x2f        /* word64 LSB        @gprel(S + A) */
660
#define        R_IA_64_LTOFF22                0x32        /* immediate22        @ltoff(S + A) */
661
#define        R_IA_64_LTOFF64I        0x33        /* immediate64        @ltoff(S + A) */
662
#define        R_IA_64_PLTOFF22        0x3a        /* immediate22        @pltoff(S + A) */
663
#define        R_IA_64_PLTOFF64I        0x3b        /* immediate64        @pltoff(S + A) */
664
#define        R_IA_64_PLTOFF64MSB        0x3e        /* word64 MSB        @pltoff(S + A) */
665
#define        R_IA_64_PLTOFF64LSB        0x3f        /* word64 LSB        @pltoff(S + A) */
666
#define        R_IA_64_FPTR64I                0x43        /* immediate64        @fptr(S + A) */
667
#define        R_IA_64_FPTR32MSB        0x44        /* word32 MSB        @fptr(S + A) */
668
#define        R_IA_64_FPTR32LSB        0x45        /* word32 LSB        @fptr(S + A) */
669
#define        R_IA_64_FPTR64MSB        0x46        /* word64 MSB        @fptr(S + A) */
670
#define        R_IA_64_FPTR64LSB        0x47        /* word64 LSB        @fptr(S + A) */
671
#define        R_IA_64_PCREL60B        0x48        /* immediate60 form1 S + A - P */
672
#define        R_IA_64_PCREL21B        0x49        /* immediate21 form1 S + A - P */
673
#define        R_IA_64_PCREL21M        0x4a        /* immediate21 form2 S + A - P */
674
#define        R_IA_64_PCREL21F        0x4b        /* immediate21 form3 S + A - P */
675
#define        R_IA_64_PCREL32MSB        0x4c        /* word32 MSB        S + A - P */
676
#define        R_IA_64_PCREL32LSB        0x4d        /* word32 LSB        S + A - P */
677
#define        R_IA_64_PCREL64MSB        0x4e        /* word64 MSB        S + A - P */
678
#define        R_IA_64_PCREL64LSB        0x4f        /* word64 LSB        S + A - P */
679
#define        R_IA_64_LTOFF_FPTR22        0x52        /* immediate22        @ltoff(@fptr(S + A)) */
680
#define        R_IA_64_LTOFF_FPTR64I        0x53        /* immediate64        @ltoff(@fptr(S + A)) */
681
#define        R_IA_64_LTOFF_FPTR32MSB        0x54        /* word32 MSB        @ltoff(@fptr(S + A)) */
682
#define        R_IA_64_LTOFF_FPTR32LSB        0x55        /* word32 LSB        @ltoff(@fptr(S + A)) */
683
#define        R_IA_64_LTOFF_FPTR64MSB        0x56        /* word64 MSB        @ltoff(@fptr(S + A)) */
684
#define        R_IA_64_LTOFF_FPTR64LSB        0x57        /* word64 LSB        @ltoff(@fptr(S + A)) */
685
#define        R_IA_64_SEGREL32MSB        0x5c        /* word32 MSB        @segrel(S + A) */
686
#define        R_IA_64_SEGREL32LSB        0x5d        /* word32 LSB        @segrel(S + A) */
687
#define        R_IA_64_SEGREL64MSB        0x5e        /* word64 MSB        @segrel(S + A) */
688
#define        R_IA_64_SEGREL64LSB        0x5f        /* word64 LSB        @segrel(S + A) */
689
#define        R_IA_64_SECREL32MSB        0x64        /* word32 MSB        @secrel(S + A) */
690
#define        R_IA_64_SECREL32LSB        0x65        /* word32 LSB        @secrel(S + A) */
691
#define        R_IA_64_SECREL64MSB        0x66        /* word64 MSB        @secrel(S + A) */
692
#define        R_IA_64_SECREL64LSB        0x67        /* word64 LSB        @secrel(S + A) */
693
#define        R_IA_64_REL32MSB        0x6c        /* word32 MSB        BD + A */
694
#define        R_IA_64_REL32LSB        0x6d        /* word32 LSB        BD + A */
695
#define        R_IA_64_REL64MSB        0x6e        /* word64 MSB        BD + A */
696
#define        R_IA_64_REL64LSB        0x6f        /* word64 LSB        BD + A */
697
#define        R_IA_64_LTV32MSB        0x74        /* word32 MSB        S + A */
698
#define        R_IA_64_LTV32LSB        0x75        /* word32 LSB        S + A */
699
#define        R_IA_64_LTV64MSB        0x76        /* word64 MSB        S + A */
700
#define        R_IA_64_LTV64LSB        0x77        /* word64 LSB        S + A */
701
#define        R_IA_64_PCREL21BI        0x79        /* immediate21 form1 S + A - P */
702
#define        R_IA_64_PCREL22                0x7a        /* immediate22        S + A - P */
703
#define        R_IA_64_PCREL64I        0x7b        /* immediate64        S + A - P */
704
#define        R_IA_64_IPLTMSB                0x80        /* function descriptor MSB special */
705
#define        R_IA_64_IPLTLSB                0x81        /* function descriptor LSB speciaal */
706
#define        R_IA_64_SUB                0x85        /* immediate64        A - S */
707
#define        R_IA_64_LTOFF22X        0x86        /* immediate22        special */
708
#define        R_IA_64_LDXMOV                0x87        /* immediate22        special */
709
#define        R_IA_64_TPREL14                0x91        /* imm14        @tprel(S + A) */
710
#define        R_IA_64_TPREL22                0x92        /* imm22        @tprel(S + A) */
711
#define        R_IA_64_TPREL64I        0x93        /* imm64        @tprel(S + A) */
712
#define        R_IA_64_TPREL64MSB        0x96        /* word64 MSB        @tprel(S + A) */
713
#define        R_IA_64_TPREL64LSB        0x97        /* word64 LSB        @tprel(S + A) */
714
#define        R_IA_64_LTOFF_TPREL22        0x9a        /* imm22        @ltoff(@tprel(S+A)) */
715
#define        R_IA_64_DTPMOD64MSB        0xa6        /* word64 MSB        @dtpmod(S + A) */
716
#define        R_IA_64_DTPMOD64LSB        0xa7        /* word64 LSB        @dtpmod(S + A) */
717
#define        R_IA_64_LTOFF_DTPMOD22        0xaa        /* imm22        @ltoff(@dtpmod(S+A)) */
718
#define        R_IA_64_DTPREL14        0xb1        /* imm14        @dtprel(S + A) */
719
#define        R_IA_64_DTPREL22        0xb2        /* imm22        @dtprel(S + A) */
720
#define        R_IA_64_DTPREL64I        0xb3        /* imm64        @dtprel(S + A) */
721
#define        R_IA_64_DTPREL32MSB        0xb4        /* word32 MSB        @dtprel(S + A) */
722
#define        R_IA_64_DTPREL32LSB        0xb5        /* word32 LSB        @dtprel(S + A) */
723
#define        R_IA_64_DTPREL64MSB        0xb6        /* word64 MSB        @dtprel(S + A) */
724
#define        R_IA_64_DTPREL64LSB        0xb7        /* word64 LSB        @dtprel(S + A) */
725
#define        R_IA_64_LTOFF_DTPREL22        0xba        /* imm22        @ltoff(@dtprel(S+A)) */
726

    
727
#define        R_MIPS_NONE        0        /* No reloc */
728
#define        R_MIPS_16        1        /* Direct 16 bit */
729
#define        R_MIPS_32        2        /* Direct 32 bit */
730
#define        R_MIPS_REL32        3        /* PC relative 32 bit */
731
#define        R_MIPS_26        4        /* Direct 26 bit shifted */
732
#define        R_MIPS_HI16        5        /* High 16 bit */
733
#define        R_MIPS_LO16        6        /* Low 16 bit */
734
#define        R_MIPS_GPREL16        7        /* GP relative 16 bit */
735
#define        R_MIPS_LITERAL        8        /* 16 bit literal entry */
736
#define        R_MIPS_GOT16        9        /* 16 bit GOT entry */
737
#define        R_MIPS_PC16        10        /* PC relative 16 bit */
738
#define        R_MIPS_CALL16        11        /* 16 bit GOT entry for function */
739
#define        R_MIPS_GPREL32        12        /* GP relative 32 bit */
740
#define        R_MIPS_GOTHI16        21        /* GOT HI 16 bit */
741
#define        R_MIPS_GOTLO16        22        /* GOT LO 16 bit */
742
#define        R_MIPS_CALLHI16 30        /* upper 16 bit GOT entry for function */
743
#define        R_MIPS_CALLLO16 31        /* lower 16 bit GOT entry for function */
744

    
745
#define        R_PPC_NONE                0        /* No relocation. */
746
#define        R_PPC_ADDR32                1
747
#define        R_PPC_ADDR24                2
748
#define        R_PPC_ADDR16                3
749
#define        R_PPC_ADDR16_LO                4
750
#define        R_PPC_ADDR16_HI                5
751
#define        R_PPC_ADDR16_HA                6
752
#define        R_PPC_ADDR14                7
753
#define        R_PPC_ADDR14_BRTAKEN        8
754
#define        R_PPC_ADDR14_BRNTAKEN        9
755
#define        R_PPC_REL24                10
756
#define        R_PPC_REL14                11
757
#define        R_PPC_REL14_BRTAKEN        12
758
#define        R_PPC_REL14_BRNTAKEN        13
759
#define        R_PPC_GOT16                14
760
#define        R_PPC_GOT16_LO                15
761
#define        R_PPC_GOT16_HI                16
762
#define        R_PPC_GOT16_HA                17
763
#define        R_PPC_PLTREL24                18
764
#define        R_PPC_COPY                19
765
#define        R_PPC_GLOB_DAT                20
766
#define        R_PPC_JMP_SLOT                21
767
#define        R_PPC_RELATIVE                22
768
#define        R_PPC_LOCAL24PC                23
769
#define        R_PPC_UADDR32                24
770
#define        R_PPC_UADDR16                25
771
#define        R_PPC_REL32                26
772
#define        R_PPC_PLT32                27
773
#define        R_PPC_PLTREL32                28
774
#define        R_PPC_PLT16_LO                29
775
#define        R_PPC_PLT16_HI                30
776
#define        R_PPC_PLT16_HA                31
777
#define        R_PPC_SDAREL16                32
778
#define        R_PPC_SECTOFF                33
779
#define        R_PPC_SECTOFF_LO        34
780
#define        R_PPC_SECTOFF_HI        35
781
#define        R_PPC_SECTOFF_HA        36
782

    
783
/*
784
 * 64-bit relocations
785
 */
786
#define        R_PPC64_ADDR64                38
787
#define        R_PPC64_ADDR16_HIGHER        39
788
#define        R_PPC64_ADDR16_HIGHERA        40
789
#define        R_PPC64_ADDR16_HIGHEST        41
790
#define        R_PPC64_ADDR16_HIGHESTA        42
791
#define        R_PPC64_UADDR64                43
792
#define        R_PPC64_REL64                44
793
#define        R_PPC64_PLT64                45
794
#define        R_PPC64_PLTREL64        46
795
#define        R_PPC64_TOC16                47
796
#define        R_PPC64_TOC16_LO        48
797
#define        R_PPC64_TOC16_HI        49
798
#define        R_PPC64_TOC16_HA        50
799
#define        R_PPC64_TOC                51
800
#define        R_PPC64_DTPMOD64        68
801
#define        R_PPC64_TPREL64                73
802
#define        R_PPC64_DTPREL64        78
803

    
804
/*
805
 * TLS relocations
806
 */
807
#define        R_PPC_TLS                67
808
#define        R_PPC_DTPMOD32                68
809
#define        R_PPC_TPREL16                69
810
#define        R_PPC_TPREL16_LO        70
811
#define        R_PPC_TPREL16_HI        71
812
#define        R_PPC_TPREL16_HA        72
813
#define        R_PPC_TPREL32                73
814
#define        R_PPC_DTPREL16                74
815
#define        R_PPC_DTPREL16_LO        75
816
#define        R_PPC_DTPREL16_HI        76
817
#define        R_PPC_DTPREL16_HA        77
818
#define        R_PPC_DTPREL32                78
819
#define        R_PPC_GOT_TLSGD16        79
820
#define        R_PPC_GOT_TLSGD16_LO        80
821
#define        R_PPC_GOT_TLSGD16_HI        81
822
#define        R_PPC_GOT_TLSGD16_HA        82
823
#define        R_PPC_GOT_TLSLD16        83
824
#define        R_PPC_GOT_TLSLD16_LO        84
825
#define        R_PPC_GOT_TLSLD16_HI        85
826
#define        R_PPC_GOT_TLSLD16_HA        86
827
#define        R_PPC_GOT_TPREL16        87
828
#define        R_PPC_GOT_TPREL16_LO        88
829
#define        R_PPC_GOT_TPREL16_HI        89
830
#define        R_PPC_GOT_TPREL16_HA        90
831

    
832
/*
833
 * The remaining relocs are from the Embedded ELF ABI, and are not in the
834
 *  SVR4 ELF ABI.
835
 */
836

    
837
#define        R_PPC_EMB_NADDR32        101
838
#define        R_PPC_EMB_NADDR16        102
839
#define        R_PPC_EMB_NADDR16_LO        103
840
#define        R_PPC_EMB_NADDR16_HI        104
841
#define        R_PPC_EMB_NADDR16_HA        105
842
#define        R_PPC_EMB_SDAI16        106
843
#define        R_PPC_EMB_SDA2I16        107
844
#define        R_PPC_EMB_SDA2REL        108
845
#define        R_PPC_EMB_SDA21                109
846
#define        R_PPC_EMB_MRKREF        110
847
#define        R_PPC_EMB_RELSEC16        111
848
#define        R_PPC_EMB_RELST_LO        112
849
#define        R_PPC_EMB_RELST_HI        113
850
#define        R_PPC_EMB_RELST_HA        114
851
#define        R_PPC_EMB_BIT_FLD        115
852
#define        R_PPC_EMB_RELSDA        116
853

    
854
#define        R_SPARC_NONE                0
855
#define        R_SPARC_8                1
856
#define        R_SPARC_16                2
857
#define        R_SPARC_32                3
858
#define        R_SPARC_DISP8                4
859
#define        R_SPARC_DISP16                5
860
#define        R_SPARC_DISP32                6
861
#define        R_SPARC_WDISP30                7
862
#define        R_SPARC_WDISP22                8
863
#define        R_SPARC_HI22                9
864
#define        R_SPARC_22                10
865
#define        R_SPARC_13                11
866
#define        R_SPARC_LO10                12
867
#define        R_SPARC_GOT10                13
868
#define        R_SPARC_GOT13                14
869
#define        R_SPARC_GOT22                15
870
#define        R_SPARC_PC10                16
871
#define        R_SPARC_PC22                17
872
#define        R_SPARC_WPLT30                18
873
#define        R_SPARC_COPY                19
874
#define        R_SPARC_GLOB_DAT        20
875
#define        R_SPARC_JMP_SLOT        21
876
#define        R_SPARC_RELATIVE        22
877
#define        R_SPARC_UA32                23
878
#define        R_SPARC_PLT32                24
879
#define        R_SPARC_HIPLT22                25
880
#define        R_SPARC_LOPLT10                26
881
#define        R_SPARC_PCPLT32                27
882
#define        R_SPARC_PCPLT22                28
883
#define        R_SPARC_PCPLT10                29
884
#define        R_SPARC_10                30
885
#define        R_SPARC_11                31
886
#define        R_SPARC_64                32
887
#define        R_SPARC_OLO10                33
888
#define        R_SPARC_HH22                34
889
#define        R_SPARC_HM10                35
890
#define        R_SPARC_LM22                36
891
#define        R_SPARC_PC_HH22                37
892
#define        R_SPARC_PC_HM10                38
893
#define        R_SPARC_PC_LM22                39
894
#define        R_SPARC_WDISP16                40
895
#define        R_SPARC_WDISP19                41
896
#define        R_SPARC_GLOB_JMP        42
897
#define        R_SPARC_7                43
898
#define        R_SPARC_5                44
899
#define        R_SPARC_6                45
900
#define        R_SPARC_DISP64                46
901
#define        R_SPARC_PLT64                47
902
#define        R_SPARC_HIX22                48
903
#define        R_SPARC_LOX10                49
904
#define        R_SPARC_H44                50
905
#define        R_SPARC_M44                51
906
#define        R_SPARC_L44                52
907
#define        R_SPARC_REGISTER        53
908
#define        R_SPARC_UA64                54
909
#define        R_SPARC_UA16                55
910
#define        R_SPARC_TLS_GD_HI22        56
911
#define        R_SPARC_TLS_GD_LO10        57
912
#define        R_SPARC_TLS_GD_ADD        58
913
#define        R_SPARC_TLS_GD_CALL        59
914
#define        R_SPARC_TLS_LDM_HI22        60
915
#define        R_SPARC_TLS_LDM_LO10        61
916
#define        R_SPARC_TLS_LDM_ADD        62
917
#define        R_SPARC_TLS_LDM_CALL        63
918
#define        R_SPARC_TLS_LDO_HIX22        64
919
#define        R_SPARC_TLS_LDO_LOX10        65
920
#define        R_SPARC_TLS_LDO_ADD        66
921
#define        R_SPARC_TLS_IE_HI22        67
922
#define        R_SPARC_TLS_IE_LO10        68
923
#define        R_SPARC_TLS_IE_LD        69
924
#define        R_SPARC_TLS_IE_LDX        70
925
#define        R_SPARC_TLS_IE_ADD        71
926
#define        R_SPARC_TLS_LE_HIX22        72
927
#define        R_SPARC_TLS_LE_LOX10        73
928
#define        R_SPARC_TLS_DTPMOD32        74
929
#define        R_SPARC_TLS_DTPMOD64        75
930
#define        R_SPARC_TLS_DTPOFF32        76
931
#define        R_SPARC_TLS_DTPOFF64        77
932
#define        R_SPARC_TLS_TPOFF32        78
933
#define        R_SPARC_TLS_TPOFF64        79
934

    
935
#define        R_X86_64_NONE                0        /* No relocation. */
936
#define        R_X86_64_64                1        /* Add 64 bit symbol value. */
937
#define        R_X86_64_PC32                2        /* PC-relative 32 bit signed sym value. */
938
#define        R_X86_64_GOT32                3        /* PC-relative 32 bit GOT offset. */
939
#define        R_X86_64_PLT32                4        /* PC-relative 32 bit PLT offset. */
940
#define        R_X86_64_COPY                5        /* Copy data from shared object. */
941
#define        R_X86_64_GLOB_DAT        6        /* Set GOT entry to data address. */
942
#define        R_X86_64_JMP_SLOT        7        /* Set GOT entry to code address. */
943
#define        R_X86_64_RELATIVE        8        /* Add load address of shared object. */
944
#define        R_X86_64_GOTPCREL        9        /* Add 32 bit signed pcrel offset to GOT. */
945
#define        R_X86_64_32                10        /* Add 32 bit zero extended symbol value */
946
#define        R_X86_64_32S                11        /* Add 32 bit sign extended symbol value */
947
#define        R_X86_64_16                12        /* Add 16 bit zero extended symbol value */
948
#define        R_X86_64_PC16                13        /* Add 16 bit signed extended pc relative symbol value */
949
#define        R_X86_64_8                14        /* Add 8 bit zero extended symbol value */
950
#define        R_X86_64_PC8                15        /* Add 8 bit signed extended pc relative symbol value */
951
#define        R_X86_64_DTPMOD64        16        /* ID of module containing symbol */
952
#define        R_X86_64_DTPOFF64        17        /* Offset in TLS block */
953
#define        R_X86_64_TPOFF64        18        /* Offset in static TLS block */
954
#define        R_X86_64_TLSGD                19        /* PC relative offset to GD GOT entry */
955
#define        R_X86_64_TLSLD                20        /* PC relative offset to LD GOT entry */
956
#define        R_X86_64_DTPOFF32        21        /* Offset in TLS block */
957
#define        R_X86_64_GOTTPOFF        22        /* PC relative offset to IE GOT entry */
958
#define        R_X86_64_TPOFF32        23        /* Offset in static TLS block */
959

    
960

    
961
#endif /* !_SYS_ELF_COMMON_H_ */