[BFD, LD, AArch64, 3/3] Add --pac-plt to enable PLTs protected with PAC.
[deliverable/binutils-gdb.git] / include / elf / aarch64.h
index e3af4442a25183bfa2e023bcb67fe99306b72729..44665476265b8d20c59343dcbafc87766a5444c0 100644 (file)
@@ -1,6 +1,6 @@
 /* AArch64 ELF support for BFD.
 
-   Copyright 2009, 2010, 2011, 2012  Free Software Foundation, Inc.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GNU Binutils.
@@ -35,6 +35,9 @@
                                                entry point.  */
 #define SHF_COMDEF             0x80000000   /* Section may be multiply defined
                                                in the input to a link step.  */
+/* Processor specific dynamic array tags.  */
+#define DT_AARCH64_BTI_PLT     (DT_LOPROC + 1)
+#define DT_AARCH64_PAC_PLT     (DT_LOPROC + 3)
 
 /* Relocation types.  */
 
@@ -43,7 +46,144 @@ START_RELOC_NUMBERS (elf_aarch64_reloc_type)
 /* Null relocations.  */
 RELOC_NUMBER (R_AARCH64_NONE, 0) /* No reloc */
 
-FAKE_RELOC (R_AARCH64_static_min, 256)
+/* Basic data relocations.  */
+
+/* .word:  (S+A) */
+RELOC_NUMBER (R_AARCH64_P32_ABS32, 1)
+
+/* .half: (S+A) */
+RELOC_NUMBER (R_AARCH64_P32_ABS16, 2)
+
+/* .word: (S+A-P) */
+RELOC_NUMBER (R_AARCH64_P32_PREL32, 3)
+
+/* .half:  (S+A-P) */
+RELOC_NUMBER (R_AARCH64_P32_PREL16, 4)
+
+/* Group relocations to create a 16, 32, 48 or 64 bit
+   unsigned data or abs address inline.  */
+
+/* MOV[ZK]:   ((S+A) >>  0) & 0xffff */
+RELOC_NUMBER (R_AARCH64_P32_MOVW_UABS_G0, 5)
+
+/* MOV[ZK]:   ((S+A) >>  0) & 0xffff */
+RELOC_NUMBER (R_AARCH64_P32_MOVW_UABS_G0_NC, 6)
+
+/* MOV[ZK]:   ((S+A) >> 16) & 0xffff */
+RELOC_NUMBER (R_AARCH64_P32_MOVW_UABS_G1, 7)
+
+/* Group relocations to create high part of a 16, 32, 48 or 64 bit
+   signed data or abs address inline. Will change instruction
+   to MOVN or MOVZ depending on sign of calculated value.  */
+
+/* MOV[ZN]:   ((S+A) >>  0) & 0xffff */
+RELOC_NUMBER (R_AARCH64_P32_MOVW_SABS_G0, 8)
+
+/* Relocations to generate 19, 21 and 33 bit PC-relative load/store
+   addresses: PG(x) is (x & ~0xfff).  */
+
+/* LD-lit: ((S+A-P) >> 2) & 0x7ffff */
+RELOC_NUMBER (R_AARCH64_P32_LD_PREL_LO19, 9)
+
+/* ADR:    (S+A-P) & 0x1fffff */
+RELOC_NUMBER (R_AARCH64_P32_ADR_PREL_LO21, 10)
+
+/* ADRH:   ((PG(S+A)-PG(P)) >> 12) & 0x1fffff */
+RELOC_NUMBER (R_AARCH64_P32_ADR_PREL_PG_HI21, 11)
+
+/* ADD:    (S+A) & 0xfff */
+RELOC_NUMBER (R_AARCH64_P32_ADD_ABS_LO12_NC, 12)
+
+/* LD/ST8: (S+A) & 0xfff */
+RELOC_NUMBER (R_AARCH64_P32_LDST8_ABS_LO12_NC, 13)
+
+/* LD/ST16: (S+A) & 0xffe */
+RELOC_NUMBER (R_AARCH64_P32_LDST16_ABS_LO12_NC, 14)
+
+/* LD/ST32: (S+A) & 0xffc */
+RELOC_NUMBER (R_AARCH64_P32_LDST32_ABS_LO12_NC, 15)
+
+/* LD/ST64: (S+A) & 0xff8 */
+RELOC_NUMBER (R_AARCH64_P32_LDST64_ABS_LO12_NC, 16)
+
+/* LD/ST128: (S+A) & 0xff0 */
+RELOC_NUMBER (R_AARCH64_P32_LDST128_ABS_LO12_NC, 17)
+
+/* Relocations for control-flow instructions.  */
+
+/* TBZ/NZ: ((S+A-P) >> 2) & 0x3fff.  */
+RELOC_NUMBER (R_AARCH64_P32_TSTBR14, 18)
+
+/* B.cond: ((S+A-P) >> 2) & 0x7ffff.  */
+RELOC_NUMBER (R_AARCH64_P32_CONDBR19, 19)
+
+/* B:      ((S+A-P) >> 2) & 0x3ffffff.  */
+RELOC_NUMBER (R_AARCH64_P32_JUMP26, 20)
+
+/* BL:     ((S+A-P) >> 2) & 0x3ffffff.  */
+RELOC_NUMBER (R_AARCH64_P32_CALL26, 21)
+
+
+RELOC_NUMBER (R_AARCH64_P32_GOT_LD_PREL19, 25)
+RELOC_NUMBER (R_AARCH64_P32_ADR_GOT_PAGE, 26)
+RELOC_NUMBER (R_AARCH64_P32_LD32_GOT_LO12_NC, 27)
+RELOC_NUMBER (R_AARCH64_P32_LD32_GOTPAGE_LO14, 28)
+
+RELOC_NUMBER (R_AARCH64_P32_TLSGD_ADR_PREL21, 80)
+RELOC_NUMBER (R_AARCH64_P32_TLSGD_ADR_PAGE21, 81)
+RELOC_NUMBER (R_AARCH64_P32_TLSGD_ADD_LO12_NC, 82)
+RELOC_NUMBER (R_AARCH64_P32_TLSLD_ADR_PREL21, 83)
+RELOC_NUMBER (R_AARCH64_P32_TLSLD_ADR_PAGE21, 84)
+RELOC_NUMBER (R_AARCH64_P32_TLSLD_ADD_LO12_NC, 85)
+RELOC_NUMBER (R_AARCH64_P32_TLSLD_MOVW_DTPREL_G1, 87)
+RELOC_NUMBER (R_AARCH64_P32_TLSLD_MOVW_DTPREL_G0, 88)
+RELOC_NUMBER (R_AARCH64_P32_TLSLD_MOVW_DTPREL_G0_NC, 89)
+RELOC_NUMBER (R_AARCH64_P32_TLSLD_ADD_DTPREL_HI12, 90)
+RELOC_NUMBER (R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12, 91)
+RELOC_NUMBER (R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12_NC, 92)
+RELOC_NUMBER (R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21, 103)
+RELOC_NUMBER (R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC, 104)
+RELOC_NUMBER (R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19, 105)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_MOVW_TPREL_G1, 106)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_MOVW_TPREL_G0, 107)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC, 108)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_ADD_TPREL_HI12, 109)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_ADD_TPREL_LO12, 110)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC, 111)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_LDST8_TPREL_LO12, 112)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_LDST8_TPREL_LO12_NC, 113)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_LDST16_TPREL_LO12, 114)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_LDST16_TPREL_LO12_NC, 115)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_LDST32_TPREL_LO12, 116)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_LDST32_TPREL_LO12_NC, 117)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_LDST64_TPREL_LO12, 118)
+RELOC_NUMBER (R_AARCH64_P32_TLSLE_LDST64_TPREL_LO12_NC, 119)
+
+RELOC_NUMBER (R_AARCH64_P32_TLSDESC_LD_PREL19, 122)
+RELOC_NUMBER (R_AARCH64_P32_TLSDESC_ADR_PREL21, 123)
+RELOC_NUMBER (R_AARCH64_P32_TLSDESC_ADR_PAGE21, 124)
+RELOC_NUMBER (R_AARCH64_P32_TLSDESC_LD32_LO12_NC, 125)
+RELOC_NUMBER (R_AARCH64_P32_TLSDESC_ADD_LO12_NC, 126)
+RELOC_NUMBER (R_AARCH64_P32_TLSDESC_CALL, 127)
+
+/* Dynamic relocations */
+
+/* Copy symbol at runtime.  */
+RELOC_NUMBER (R_AARCH64_P32_COPY, 180)
+
+/* Create GOT entry.  */
+RELOC_NUMBER (R_AARCH64_P32_GLOB_DAT, 181)
+
+ /* Create PLT entry.  */
+RELOC_NUMBER (R_AARCH64_P32_JUMP_SLOT, 182)
+
+/* Adjust by program base.  */
+RELOC_NUMBER (R_AARCH64_P32_RELATIVE, 183)
+RELOC_NUMBER (R_AARCH64_P32_TLS_DTPMOD, 184)
+RELOC_NUMBER (R_AARCH64_P32_TLS_DTPREL, 185)
+RELOC_NUMBER (R_AARCH64_P32_TLS_TPREL, 186)
+RELOC_NUMBER (R_AARCH64_P32_TLSDESC, 187)
+RELOC_NUMBER (R_AARCH64_P32_IRELATIVE, 188)
 
 RELOC_NUMBER (R_AARCH64_NULL, 256) /* No reloc */
 
@@ -150,23 +290,87 @@ RELOC_NUMBER (R_AARCH64_LDST32_ABS_LO12_NC, 285)
 /* LD/ST64: (S+A) & 0xff8 */
 RELOC_NUMBER (R_AARCH64_LDST64_ABS_LO12_NC, 286)
 
+/* Group relocations to create a 16, 32, 48, or 64 bit PC-relative
+   offset inline.  */
+
+RELOC_NUMBER (R_AARCH64_MOVW_PREL_G0, 287)
+RELOC_NUMBER (R_AARCH64_MOVW_PREL_G0_NC, 288)
+RELOC_NUMBER (R_AARCH64_MOVW_PREL_G1, 289)
+RELOC_NUMBER (R_AARCH64_MOVW_PREL_G1_NC, 290)
+RELOC_NUMBER (R_AARCH64_MOVW_PREL_G2, 291)
+RELOC_NUMBER (R_AARCH64_MOVW_PREL_G2_NC, 292)
+RELOC_NUMBER (R_AARCH64_MOVW_PREL_G3, 293)
+
 /* LD/ST128: (S+A) & 0xff0 */
 RELOC_NUMBER (R_AARCH64_LDST128_ABS_LO12_NC, 299)
 
+/* Group relocations to create a 16, 32, 48, or 64 bit GOT-relative
+   offset inline.  */
+
+RELOC_NUMBER (R_AARCH64_MOVW_GOTOFF_G0, 300)
+RELOC_NUMBER (R_AARCH64_MOVW_GOTOFF_G0_NC, 301)
+RELOC_NUMBER (R_AARCH64_MOVW_GOTOFF_G1, 302)
+RELOC_NUMBER (R_AARCH64_MOVW_GOTOFF_G1_NC, 303)
+RELOC_NUMBER (R_AARCH64_MOVW_GOTOFF_G2, 304)
+RELOC_NUMBER (R_AARCH64_MOVW_GOTOFF_G2_NC, 305)
+RELOC_NUMBER (R_AARCH64_MOVW_GOTOFF_G3, 306)
+
+/* GOT-relative data relocations.  */
+
+RELOC_NUMBER (R_AARCH64_GOTREL64, 307)
+RELOC_NUMBER (R_AARCH64_GOTREL32, 308)
+
+/* GOT-relative instruction relocations.  */
+
 RELOC_NUMBER (R_AARCH64_GOT_LD_PREL19, 309)
+RELOC_NUMBER (R_AARCH64_LD64_GOTOFF_LO15, 310)
 RELOC_NUMBER (R_AARCH64_ADR_GOT_PAGE, 311)
 RELOC_NUMBER (R_AARCH64_LD64_GOT_LO12_NC, 312)
+RELOC_NUMBER (R_AARCH64_LD64_GOTPAGE_LO15, 313)
 
-FAKE_RELOC (R_AARCH64_static_max, 313)
+/* General Dynamic TLS relocations.  */
 
-FAKE_RELOC (R_AARCH64_tls_min, 512)
+RELOC_NUMBER (R_AARCH64_TLSGD_ADR_PREL21, 512)
 RELOC_NUMBER (R_AARCH64_TLSGD_ADR_PAGE21, 513)
 RELOC_NUMBER (R_AARCH64_TLSGD_ADD_LO12_NC, 514)
+RELOC_NUMBER (R_AARCH64_TLSGD_MOVW_G1, 515)
+RELOC_NUMBER (R_AARCH64_TLSGD_MOVW_G0_NC, 516)
+
+/* Local Dynamic TLS relocations.  */
+
+RELOC_NUMBER (R_AARCH64_TLSLD_ADR_PREL21, 517)
+RELOC_NUMBER (R_AARCH64_TLSLD_ADR_PAGE21, 518)
+RELOC_NUMBER (R_AARCH64_TLSLD_ADD_LO12_NC, 519)
+RELOC_NUMBER (R_AARCH64_TLSLD_MOVW_G1, 520)
+RELOC_NUMBER (R_AARCH64_TLSLD_MOVW_G0_NC, 521)
+RELOC_NUMBER (R_AARCH64_TLSLD_LD_PREL19, 522)
+RELOC_NUMBER (R_AARCH64_TLSLD_MOVW_DTPREL_G2, 523)
+RELOC_NUMBER (R_AARCH64_TLSLD_MOVW_DTPREL_G1, 524)
+RELOC_NUMBER (R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC, 525)
+RELOC_NUMBER (R_AARCH64_TLSLD_MOVW_DTPREL_G0, 526)
+RELOC_NUMBER (R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC, 527)
+RELOC_NUMBER (R_AARCH64_TLSLD_ADD_DTPREL_HI12, 528)
+RELOC_NUMBER (R_AARCH64_TLSLD_ADD_DTPREL_LO12, 529)
+RELOC_NUMBER (R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC, 530)
+RELOC_NUMBER (R_AARCH64_TLSLD_LDST8_DTPREL_LO12, 531)
+RELOC_NUMBER (R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC, 532)
+RELOC_NUMBER (R_AARCH64_TLSLD_LDST16_DTPREL_LO12, 533)
+RELOC_NUMBER (R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC, 534)
+RELOC_NUMBER (R_AARCH64_TLSLD_LDST32_DTPREL_LO12, 535)
+RELOC_NUMBER (R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC, 536)
+RELOC_NUMBER (R_AARCH64_TLSLD_LDST64_DTPREL_LO12, 537)
+RELOC_NUMBER (R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC, 538)
+
+/* Initial Exec TLS relocations.  */
+
 RELOC_NUMBER (R_AARCH64_TLSIE_MOVW_GOTTPREL_G1, 539)
 RELOC_NUMBER (R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC, 540)
 RELOC_NUMBER (R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21, 541)
 RELOC_NUMBER (R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC, 542)
 RELOC_NUMBER (R_AARCH64_TLSIE_LD_GOTTPREL_PREL19, 543)
+
+/* Local Exec TLS relocations.  */
+
 RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G2, 544)
 RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G1, 545)
 RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G1_NC, 546)
@@ -175,23 +379,34 @@ RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G0_NC, 548)
 RELOC_NUMBER (R_AARCH64_TLSLE_ADD_TPREL_HI12, 549)
 RELOC_NUMBER (R_AARCH64_TLSLE_ADD_TPREL_LO12, 550)
 RELOC_NUMBER (R_AARCH64_TLSLE_ADD_TPREL_LO12_NC, 551)
-FAKE_RELOC (R_AARCH64_tls_max, 552)
-
-FAKE_RELOC (R_AARCH64_tlsdesc_min, 560)
-RELOC_NUMBER (R_AARCH64_TLSDESC_LD64_PREL19, 560)
+RELOC_NUMBER (R_AARCH64_TLSLE_LDST8_TPREL_LO12, 552)
+RELOC_NUMBER (R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC, 553)
+RELOC_NUMBER (R_AARCH64_TLSLE_LDST16_TPREL_LO12, 554)
+RELOC_NUMBER (R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC, 555)
+RELOC_NUMBER (R_AARCH64_TLSLE_LDST32_TPREL_LO12, 556)
+RELOC_NUMBER (R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC, 557)
+RELOC_NUMBER (R_AARCH64_TLSLE_LDST64_TPREL_LO12, 558)
+RELOC_NUMBER (R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC, 559)
+
+/* TLS descriptor relocations.  */
+
+RELOC_NUMBER (R_AARCH64_TLSDESC_LD_PREL19, 560)
 RELOC_NUMBER (R_AARCH64_TLSDESC_ADR_PREL21, 561)
-RELOC_NUMBER (R_AARCH64_TLSDESC_ADR_PAGE, 562)
-RELOC_NUMBER (R_AARCH64_TLSDESC_LD64_LO12_NC, 563)
-RELOC_NUMBER (R_AARCH64_TLSDESC_ADD_LO12_NC, 564)
+RELOC_NUMBER (R_AARCH64_TLSDESC_ADR_PAGE21, 562)
+RELOC_NUMBER (R_AARCH64_TLSDESC_LD64_LO12, 563)
+RELOC_NUMBER (R_AARCH64_TLSDESC_ADD_LO12, 564)
 RELOC_NUMBER (R_AARCH64_TLSDESC_OFF_G1, 565)
 RELOC_NUMBER (R_AARCH64_TLSDESC_OFF_G0_NC, 566)
 RELOC_NUMBER (R_AARCH64_TLSDESC_LDR, 567)
 RELOC_NUMBER (R_AARCH64_TLSDESC_ADD, 568)
 RELOC_NUMBER (R_AARCH64_TLSDESC_CALL, 569)
-FAKE_RELOC (R_AARCH64_tlsdesc_max, 570)
+
+RELOC_NUMBER (R_AARCH64_TLSLE_LDST128_TPREL_LO12, 570)
+RELOC_NUMBER (R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC, 571)
+RELOC_NUMBER (R_AARCH64_TLSLD_LDST128_DTPREL_LO12, 572)
+RELOC_NUMBER (R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC, 573)
 
 /* Dynamic relocations */
-FAKE_RELOC (R_AARCH64_dyn_min, 1024)
 
 /* Copy symbol at runtime.  */
 RELOC_NUMBER (R_AARCH64_COPY, 1024)
@@ -207,8 +422,16 @@ RELOC_NUMBER (R_AARCH64_RELATIVE, 1027)
 RELOC_NUMBER (R_AARCH64_TLS_DTPMOD64, 1028)
 RELOC_NUMBER (R_AARCH64_TLS_DTPREL64, 1029)
 RELOC_NUMBER (R_AARCH64_TLS_TPREL64, 1030)
+/* Aliasing relocs are guarded by RELOC_MACROS_GEN_FUNC
+   so that readelf.c won't generate duplicated case
+   statements.  */
+#ifndef RELOC_MACROS_GEN_FUNC
+RELOC_NUMBER (R_AARCH64_TLS_DTPMOD, 1028)
+RELOC_NUMBER (R_AARCH64_TLS_DTPREL, 1029)
+RELOC_NUMBER (R_AARCH64_TLS_TPREL, 1030)
+#endif
 RELOC_NUMBER (R_AARCH64_TLSDESC, 1031)
-FAKE_RELOC (R_AARCH64_dyn_max, 1032)
+RELOC_NUMBER (R_AARCH64_IRELATIVE, 1032)
 
 END_RELOC_NUMBERS (R_AARCH64_end)
 
This page took 0.029407 seconds and 4 git commands to generate.