]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/GenFw/elf_common.h
Sync BaseTool trunk (version r2599) into EDKII BaseTools.
[mirror_edk2.git] / BaseTools / Source / C / GenFw / elf_common.h
index 471c2650a1df0466cd50543ccd19055f6096fdab..df22472dc2247a38225ccab43a0eca3fd9978c6d 100644 (file)
@@ -1,3 +1,18 @@
+/** @file
+Ported ELF include files from FreeBSD
+
+Copyright (c) 2009 - 2010, Apple Inc. All rights reserved.<BR>
+Portions Copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution.  The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+**/
 /*-
  * Copyright (c) 1998 John D. Polstra.
  * All rights reserved.
@@ -169,6 +184,7 @@ typedef struct {
 #define EM_TINYJ       61      /* Advanced Logic Corp. TinyJ processor. */
 #define EM_X86_64      62      /* Advanced Micro Devices x86-64 */
 #define        EM_AMD64        EM_X86_64       /* Advanced Micro Devices x86-64 (compat) */
+#define EM_AARCH64     183     /* ARM 64bit Architecture */
 
 /* Non-standard or deprecated. */
 #define EM_486         6       /* Intel i486. */
@@ -529,6 +545,135 @@ typedef struct {
 #define        R_386_TLS_DTPOFF32      36      /* GOT entry containing TLS offset */
 #define        R_386_TLS_TPOFF32       37      /* GOT entry of -ve static TLS offset */
 
+/* Null relocation */
+#define        R_AARCH64_NONE                          256     /* No relocation */
+/* Static AArch64 relocations */
+ /* Static data relocations */
+#define        R_AARCH64_ABS64                         257     /* S + A */
+#define        R_AARCH64_ABS32                         258     /* S + A */
+#define        R_AARCH64_ABS16                         259     /* S + A */
+#define        R_AARCH64_PREL64                        260     /* S + A - P */
+#define        R_AARCH64_PREL32                        261     /* S + A - P */
+#define        R_AARCH64_PREL16                        262     /* S + A - P */
+ /* Group relocations to create a 16, 32, 48, or 64 bit unsigned data value or address inline */
+#define        R_AARCH64_MOVW_UABS_G0                  263     /* S + A */
+#define        R_AARCH64_MOVW_UABS_G0_NC               264     /* S + A */
+#define        R_AARCH64_MOVW_UABS_G1                  265     /* S + A */
+#define        R_AARCH64_MOVW_UABS_G1_NC               266     /* S + A */
+#define        R_AARCH64_MOVW_UABS_G2                  267     /* S + A */
+#define        R_AARCH64_MOVW_UABS_G2_NC               268     /* S + A */
+#define        R_AARCH64_MOVW_UABS_G3                  269     /* S + A */
+ /* Group relocations to create a 16, 32, 48, or 64 bit signed data or offset value inline */
+#define        R_AARCH64_MOVW_SABS_G0                  270     /* S + A */
+#define        R_AARCH64_MOVW_SABS_G1                  271     /* S + A */
+#define        R_AARCH64_MOVW_SABS_G2                  272     /* S + A */
+ /* Relocations to generate 19, 21 and 33 bit PC-relative addresses */
+#define        R_AARCH64_LD_PREL_LO19                  273     /* S + A - P */
+#define        R_AARCH64_ADR_PREL_LO21                 274     /* S + A - P */
+#define        R_AARCH64_ADR_PREL_PG_HI21              275     /* Page(S+A) - Page(P) */
+#define        R_AARCH64_ADR_PREL_PG_HI21_NC           276     /* Page(S+A) - Page(P) */
+#define        R_AARCH64_ADD_ABS_LO12_NC               277     /* S + A */
+#define        R_AARCH64_LDST8_ABS_LO12_NC             278     /* S + A */
+#define        R_AARCH64_LDST16_ABS_LO12_NC            284     /* S + A */
+#define        R_AARCH64_LDST32_ABS_LO12_NC            285     /* S + A */
+#define        R_AARCH64_LDST64_ABS_LO12_NC            286     /* S + A */
+#define        R_AARCH64_LDST128_ABS_LO12_NC           299     /* S + A */
+ /* Relocations for control-flow instructions - all offsets are a multiple of 4 */
+#define        R_AARCH64_TSTBR14                       279     /* S+A-P */
+#define        R_AARCH64_CONDBR19                      280     /* S+A-P */
+#define        R_AARCH64_JUMP26                        282     /* S+A-P */
+#define        R_AARCH64_CALL26                        283     /* S+A-P */
+ /* Group relocations to create a 16, 32, 48, or 64 bit PC-relative offset inline */
+#define        R_AARCH64_MOVW_PREL_G0                  287     /* S+A-P */
+#define        R_AARCH64_MOVW_PREL_G0_NC               288     /* S+A-P */
+#define        R_AARCH64_MOVW_PREL_G1                  289     /* S+A-P */
+#define        R_AARCH64_MOVW_PREL_G1_NC               290     /* S+A-P */
+#define        R_AARCH64_MOVW_PREL_G2                  291     /* S+A-P */
+#define        R_AARCH64_MOVW_PREL_G2_NC               292     /* S+A-P */
+#define        R_AARCH64_MOVW_PREL_G3                  293     /* S+A-P */
+ /* Group relocations to create a 16, 32, 48, or 64 bit GOT-relative offsets inline */
+#define        R_AARCH64_MOVW_GOTOFF_G0                300     /* G(S)-GOT */
+#define        R_AARCH64_MOVW_GOTOFF_G0_NC             301     /* G(S)-GOT */
+#define        R_AARCH64_MOVW_GOTOFF_G1                302     /* G(S)-GOT */
+#define        R_AARCH64_MOVW_GOTOFF_G1_NC             303     /* G(S)-GOT */
+#define        R_AARCH64_MOVW_GOTOFF_G2                304     /* G(S)-GOT */
+#define        R_AARCH64_MOVW_GOTOFF_G2_NC             305     /* G(S)-GOT */
+#define        R_AARCH64_MOVW_GOTOFF_G3                306     /* G(S)-GOT */
+ /*  GOT-relative data relocations */
+#define        R_AARCH64_GOTREL64                      307     /* S+A-GOT */
+#define        R_AARCH64_GOTREL32                      308     /* S+A-GOT */
+ /* GOT-relative instruction relocations */
+#define        R_AARCH64_GOT_LD_PREL19                 309     /* G(S)-P */
+#define        R_AARCH64_LD64_GOTOFF_LO15              310     /* G(S)-GOT */
+#define        R_AARCH64_ADR_GOT_PAGE                  311     /* Page(G(S))-Page(P) */
+#define        R_AARCH64_LD64_GOT_LO12_NC              312     /* G(S) */
+#define        R_AARCH64_LD64_GOTPAGE_LO15             313     /* G(S)-Page(GOT) */
+/* Relocations for thread-local storage */
+ /* General Dynamic TLS relocations */
+#define        R_AARCH64_TLSGD_ADR_PREL21              512     /* G(TLSIDX(S+A)) - P */
+#define        R_AARCH64_TLSGD_ADR_PAGE21              513     /* Page(G(TLSIDX(S+A))) - Page(P) */
+#define        R_AARCH64_TLSGD_ADD_LO12_NC             514     /* G(TLSIDX(S+A)) */
+#define        R_AARCH64_TLSGD_MOVW_G1                 515     /* G(TLSIDX(S+A)) - GOT */
+#define        R_AARCH64_TLSGD_MOVW_G0_NC              516     /* G(TLSIDX(S+A)) - GOT */
+ /* Local Dynamic TLS relocations */
+#define        R_AARCH64_TLSLD_ADR_PREL21              517     /* G(LDM(S))) - P */
+#define        R_AARCH64_TLSLD_ADR_PAGE21              518     /* Page(G(LDM(S)))-Page(P) */
+#define        R_AARCH64_TLSLD_ADD_LO12_NC             519     /* G(LDM(S)) */
+#define        R_AARCH64_TLSLD_MOVW_G1                 520     /* G(LDM(S)) - GOT */
+#define        R_AARCH64_TLSLD_MOVW_G0_NC              521     /* G(LDM(S)) - GOT */
+#define        R_AARCH64_TLSLD_LD_PREL19               522     /* G(LDM(S)) - P */
+#define        R_AARCH64_TLSLD_MOVW_DTPREL_G2          523     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_MOVW_DTPREL_G1          524     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC       525     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_MOVW_DTPREL_G0          526     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC       527     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_ADD_DTPREL_HI12         528     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_ADD_DTPREL_LO12         529     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC      530     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_LDST8_DTPREL_LO12       531     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC    532     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_LDST16_DTPREL_LO12      533     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC   534     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_LDST32_DTPREL_LO12      535     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC   536     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_LDST64_DTPREL_LO12      537     /* DTPREL(S+A) */
+#define        R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC   538     /* DTPREL(S+A) */
+ /* Initial Exec TLS relocations */
+#define        R_AARCH64_TLSIE_MOVW_GOTTPREL_G1        539     /* G(TPREL(S+A)) - GOT */
+#define        R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC     540     /* G(TPREL(S+A)) - GOT */
+#define        R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21     541     /* Page(G(TPREL(S+A))) - Page(P) */
+#define        R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC   542     /* G(TPREL(S+A)) */
+#define        R_AARCH64_TLSIE_LD_GOTTPREL_PREL19      543     /* G(TPREL(S+A)) - P */
+ /* Local Exec TLS relocations */
+#define        R_AARCH64_TLSLE_MOVW_TPREL_G2           544     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_MOVW_TPREL_G1           545     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_MOVW_TPREL_G1_NC        546     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_MOVW_TPREL_G0           547     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_MOVW_TPREL_G0_NC        548     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_ADD_TPREL_HI12          549     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_ADD_TPREL_LO12          550     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_ADD_TPREL_LO12_NC       551     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_LDST8_TPREL_LO12        552     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC     553     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_LDST16_TPREL_LO12       554     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC    555     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_LDST32_TPREL_LO12       556     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC    557     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_LDST64_TPREL_LO12       558     /* TPREL(S+A) */
+#define        R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC    559     /* TPREL(S+A) */
+/* Dynamic relocations */
+ /* Dynamic relocations */
+#define        R_AARCH64_COPY                          1024
+#define        R_AARCH64_GLOB_DAT                      1025    /* S + A */
+#define        R_AARCH64_JUMP_SLOT                     1026    /* S + A */
+#define        R_AARCH64_RELATIVE                      1027    /* Delta(S) + A , Delta(P) + A */
+#define        R_AARCH64_TLS_DTPREL64                  1028    /* DTPREL(S+A) */
+#define        R_AARCH64_TLS_DTPMOD64                  1029    /* LDM(S) */
+#define        R_AARCH64_TLS_TPREL64                   1030    /* TPREL(S+A) */
+#define        R_AARCH64_TLS_DTPREL32                  1031    /* DTPREL(S+A) */
+#define        R_AARCH64_TLS_DTPMOD32                  1032    /* LDM(S) */
+#define        R_AARCH64_TLS_TPREL32                   1033    /* DTPREL(S+A) */
+
 #define        R_ALPHA_NONE            0       /* No reloc */
 #define        R_ALPHA_REFLONG         1       /* Direct 32 bit */
 #define        R_ALPHA_REFQUAD         2       /* Direct 64 bit */
@@ -583,6 +728,44 @@ typedef struct {
 #define        R_ARM_GOTPC             25      /* Add PC-relative GOT table address. */
 #define        R_ARM_GOT32             26      /* Add PC-relative GOT offset. */
 #define        R_ARM_PLT32             27      /* Add PC-relative PLT offset. */
+#define R_ARM_CALL            28
+#define R_ARM_JMP24           29
+#define R_ARM_THM_MOVW_ABS_NC 47 
+#define R_ARM_THM_MOVT_ABS    48
+
+// Block of PC-relative relocations added to work around gcc putting
+// object relocations in static executables.
+#define R_ARM_THM_JUMP24        30  
+#define R_ARM_PREL31            42  
+#define R_ARM_MOVW_PREL_NC      45  
+#define R_ARM_MOVT_PREL         46
+#define R_ARM_THM_MOVW_PREL_NC  49
+#define R_ARM_THM_MOVT_PREL     50
+#define R_ARM_THM_JMP6          52
+#define R_ARM_THM_ALU_PREL_11_0 53
+#define R_ARM_THM_PC12          54
+#define R_ARM_REL32_NOI         56
+#define R_ARM_ALU_PC_G0_NC         57\r
+#define R_ARM_ALU_PC_G0                58\r
+#define R_ARM_ALU_PC_G1_NC         59\r
+#define R_ARM_ALU_PC_G1                60\r
+#define R_ARM_ALU_PC_G2         61\r
+#define R_ARM_LDR_PC_G1                62\r
+#define R_ARM_LDR_PC_G2                63\r
+#define R_ARM_LDRS_PC_G0             64\r
+#define R_ARM_LDRS_PC_G1             65\r
+#define R_ARM_LDRS_PC_G2             66\r
+#define R_ARM_LDC_PC_G0                67\r
+#define R_ARM_LDC_PC_G1                68\r
+#define R_ARM_LDC_PC_G2                69
+#define R_ARM_GOT_PREL          96
+#define R_ARM_THM_JUMP11       102
+#define R_ARM_THM_JUMP8        103
+#define R_ARM_TLS_GD32         104
+#define R_ARM_TLS_LDM32        105
+#define R_ARM_TLS_IE32         107
+
+#define R_ARM_THM_JUMP19    51
 #define        R_ARM_GNU_VTENTRY       100
 #define        R_ARM_GNU_VTINHERIT     101
 #define        R_ARM_RSBREL32          250
@@ -592,6 +775,8 @@ typedef struct {
 #define        R_ARM_RPC24             254
 #define        R_ARM_RBASE             255
 
+
+
 /*     Name                    Value      Field        Calculation */
 #define        R_IA_64_NONE            0       /* None */
 #define        R_IA_64_IMM14           0x21    /* immediate14  S + A */