121 lines
4.5 KiB
C
121 lines
4.5 KiB
C
/* elfI86.h - i86-specific ELF loader header */
|
|
|
|
/*
|
|
* Copyright (c) 2001, 2004-2005, 2009 Wind River Systems, Inc.
|
|
*
|
|
* The right to copy, distribute or otherwise make use of this software may be
|
|
* licensed only pursuant to the terms of an applicable Wind River license
|
|
* agreement.
|
|
*/
|
|
|
|
/*
|
|
modification history
|
|
--------------------
|
|
01e,14dec09,pgh Add EM_ARCH_MACHINE_x macro definition.
|
|
01d,05jun09,v_r Added ELF64 support (from Professional Services EMT64 Data
|
|
Access project).
|
|
01c,25jul05,v_r Updated copyright.
|
|
01b,27feb04,pad Renamed relocation type R_386_JUMP_SLOT as R_386_JMP_SLOT as
|
|
per ABI.
|
|
01a,12sep01,pad Backported from TAE 3.1 to T2.2 with necessary adaptations
|
|
(base version: elfI86.h@@/main/tor3_x/1).
|
|
*/
|
|
|
|
#ifndef __INCelfI86h
|
|
#define __INCelfI86h
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* The following macros define the ELF machine type values that can be loaded
|
|
* into an i86 CPU.
|
|
*/
|
|
|
|
#define EM_ARCH_MACHINE_1 EM_386
|
|
#define EM_ARCH_MACHINE_2 EM_486
|
|
#define EM_ARCH_MACHINE_3 EM_X86_64
|
|
|
|
#ifdef _WRS_CONFIG_LP64
|
|
#define EM_ARCH_MACHINE EM_X86_64
|
|
#else /* _WRS_CONFIG_LP64 */
|
|
#define EM_ARCH_MACHINE EM_386
|
|
#define EM_ARCH_MACH_ALT EM_486 /* not used */
|
|
#endif /* !_WRS_CONFIG_LP64 */
|
|
|
|
/*
|
|
* Relocation Type Definitions
|
|
* The only ones that appear in vxWorks archives are "1" and "2"
|
|
*/
|
|
|
|
#define R_386_NONE 0 /* No reloc */
|
|
#define R_386_32 1 /* Direct 32 bit */
|
|
#define R_386_PC32 2 /* PC relative 32 bit */
|
|
#define R_386_GOT32 3 /* 32 bit GOT entry */
|
|
#define R_386_PLT32 4 /* 32 bit PLT address */
|
|
#define R_386_COPY 5 /* Copy symbol at runtime */
|
|
#define R_386_GLOB_DAT 6 /* Create GOT entry */
|
|
#define R_386_JMP_SLOT 7 /* Create PLT entry */
|
|
#define R_386_RELATIVE 8 /* Adjust by program base */
|
|
#define R_386_GOTOFF 9 /* 32 bit offset to GOT */
|
|
#define R_386_GOTPC 10 /* 32 bit PC relative offset to GOT */
|
|
|
|
/* These 16-bit and 8-bit relocs should never show up */
|
|
|
|
#define R_386_16 20
|
|
#define R_386_PC16 21
|
|
#define R_386_8 22
|
|
#define R_386_PC8 23
|
|
#define R_386_max 24
|
|
|
|
/* These are GNU extensions to enable C++ vtable garbage collection. */
|
|
|
|
#define R_386_GNU_VTINHERIT 250
|
|
#define R_386_GNU_VTENTRY 251
|
|
|
|
/* AMD x86-64 relocations. */
|
|
|
|
#define R_X86_64_NONE 0 /* No reloc */
|
|
#define R_X86_64_64 1 /* Direct 64 bit */
|
|
#define R_X86_64_PC32 2 /* PC relative 32 bit signed */
|
|
#define R_X86_64_GOT32 3 /* 32 bit GOT entry */
|
|
#define R_X86_64_PLT32 4 /* 32 bit PLT address */
|
|
#define R_X86_64_COPY 5 /* Copy symbol at runtime */
|
|
#define R_X86_64_GLOB_DAT 6 /* Create GOT entry */
|
|
#define R_X86_64_JUMP_SLOT 7 /* Create PLT entry */
|
|
#define R_X86_64_RELATIVE 8 /* Adjust by program base */
|
|
#define R_X86_64_GOTPCREL 9 /* 32 bit signed PC relative
|
|
offset to GOT */
|
|
#define R_X86_64_32 10 /* Direct 32 bit zero extended */
|
|
#define R_X86_64_32S 11 /* Direct 32 bit sign extended */
|
|
#define R_X86_64_16 12 /* Direct 16 bit zero extended */
|
|
#define R_X86_64_PC16 13 /* 16 bit sign extended pc relative */
|
|
#define R_X86_64_8 14 /* Direct 8 bit sign extended */
|
|
#define R_X86_64_PC8 15 /* 8 bit sign extended pc relative */
|
|
#define R_X86_64_DTPMOD64 16 /* ID of module containing symbol */
|
|
#define R_X86_64_DTPOFF64 17 /* Offset in module's TLS block */
|
|
#define R_X86_64_TPOFF64 18 /* Offset in initial TLS block */
|
|
#define R_X86_64_TLSGD 19 /* 32 bit signed PC relative offset
|
|
to two GOT entries for GD symbol */
|
|
#define R_X86_64_TLSLD 20 /* 32 bit signed PC relative offset
|
|
to two GOT entries for LD symbol */
|
|
#define R_X86_64_DTPOFF32 21 /* Offset in TLS block */
|
|
#define R_X86_64_GOTTPOFF 22 /* 32 bit signed PC relative offset
|
|
to GOT entry for IE symbol */
|
|
#define R_X86_64_TPOFF32 23 /* Offset in initial TLS block */
|
|
#define R_X86_64_PC64 24 /* PC-relative 64 bits */
|
|
#define R_X86_64_GOTOFF64 25
|
|
#define R_X86_64_GOTPC32 26
|
|
#define R_X86_64_SIZE32 32
|
|
#define R_X86_64_SIZE64 33
|
|
#define R_X86_64_GOTPC32_TLSDESC 34
|
|
#define R_X86_64_TLSDESC_CALL 35
|
|
#define R_X86_64_TLSDESC 36
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __INCelfI86h */
|