1 // aarch64
-reloc.def
-- AArch64 relocation definitions.
3 // Copyright (C
) 2014-2023 Free Software Foundation
, Inc.
4 // Written by Han Shen
<shenhan@google.com
> and Jing Yu
<jingyu@google.com
>.
6 // This file is part of gold.
8 // This program is free software
; you can redistribute it and
/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation
; either version
3 of the License
, or
11 // (at your option
) any later version.
13 // This program is distributed in the hope that it will be useful
,
14 // but WITHOUT ANY WARRANTY
; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program
; if not
, write to the Free Software
20 // Foundation
, Inc.
, 51 Franklin Street
- Fifth Floor
, Boston
,
21 // MA
02110-1301, USA.
25 // Insn modified by relocation
, see enum Reloc_inst
-------------------------------------------------------------------------------------------------+
26 // Symbol reference type
-----------------------------------------------------------------------------+ |
27 // Portion off X to retrieve
-------------------------------------------------------------------+ | |
28 // Checking function
, see
Note(A
)---------------------------------------+ | | |
29 // Group index
---------------------------------------------------+ | | | |
30 // Implemented
----------------------------------------------+ | | | | |
31 // Class
-------------------------------------+ | | | | | |
32 // Type
----------------------------+ | | | | | | |
33 // Name | | | | | | | |
35 ARD(NONE
, STATIC
, NONE
, Y
, -1, 0,0 , 0,0 , 0 , DATA
)
36 // Above is from Table
4-5, Null relocation codes
38 ARD(ABS64
, STATIC
, DATA
, Y
, -1, 0,0 , 0,0 , Symbol
::ABSOLUTE_REF
, DATA
)
39 ARD(ABS32
, STATIC
, DATA
, Y
, -1, 31,32 , 0,0 , Symbol
::ABSOLUTE_REF
, DATA
)
40 ARD(ABS16
, STATIC
, DATA
, Y
, -1, 15,16 , 0,0 , Symbol
::ABSOLUTE_REF
, DATA
)
41 ARD(PREL64
, STATIC
, DATA
, Y
, -1, 0,0 , 0,0 , Symbol
::RELATIVE_REF
, DATA
)
42 ARD(PREL32
, STATIC
, DATA
, Y
, -1, 31,32 , 0,0 , Symbol
::RELATIVE_REF
, DATA
)
43 ARD(PREL16
, STATIC
, DATA
, Y
, -1, 15,16 , 0,0 , Symbol
::RELATIVE_REF
, DATA
)
44 // Above is from Table
4-6, Data relocations
, 257-262.
46 ARD(MOVW_UABS_G0
, STATIC
, AARCH64
, Y
, 0, 0,16 , 0,15 , Symbol
::ABSOLUTE_REF
, MOVW
)
47 ARD(MOVW_UABS_G0_NC
, STATIC
, AARCH64
, Y
, 0, 0,0 , 0,15 , Symbol
::ABSOLUTE_REF
, MOVW
)
48 ARD(MOVW_UABS_G1
, STATIC
, AARCH64
, Y
, 0, 0,32 , 16,31 , Symbol
::ABSOLUTE_REF
, MOVW
)
49 ARD(MOVW_UABS_G1_NC
, STATIC
, AARCH64
, Y
, 0, 0,0 , 16,31 , Symbol
::ABSOLUTE_REF
, MOVW
)
50 ARD(MOVW_UABS_G2
, STATIC
, AARCH64
, Y
, 0, 0,48 , 32,47 , Symbol
::ABSOLUTE_REF
, MOVW
)
51 ARD(MOVW_UABS_G2_NC
, STATIC
, AARCH64
, Y
, 0, 0,0 , 32,47 , Symbol
::ABSOLUTE_REF
, MOVW
)
52 ARD(MOVW_UABS_G3
, STATIC
, AARCH64
, Y
, 0, 0,0 , 48,63 , Symbol
::ABSOLUTE_REF
, MOVW
)
53 // Above is from Table
4-7, Group relocations to create a
16-, 32-, 48-, or
64-bit unsigned data value or address inline.
55 ARD(MOVW_SABS_G0
, STATIC
, AARCH64
, Y
, 0, 16,16 , 0,15 , Symbol
::ABSOLUTE_REF
, MOVW
)
56 ARD(MOVW_SABS_G1
, STATIC
, AARCH64
, Y
, 0, 32,32 , 16,31 , Symbol
::ABSOLUTE_REF
, MOVW
)
57 ARD(MOVW_SABS_G2
, STATIC
, AARCH64
, Y
, 0, 48,48 , 32,47 , Symbol
::ABSOLUTE_REF
, MOVW
)
58 // Above is from Table
4-8, Group relocations to create a
16, 32, 48, or
64 bit signed data or offset value inline.
60 ARD(LD_PREL_LO19
, STATIC
, AARCH64
, Y
, -1, 20,20 , 2,20 , Symbol
::RELATIVE_REF
, LDST
)
61 ARD(ADR_PREL_LO21
, STATIC
, AARCH64
, Y
, -1, 20,20 , 0,20 , Symbol
::RELATIVE_REF
, ADR
)
62 ARD(ADR_PREL_PG_HI21
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::RELATIVE_REF
, ADRP
)
63 ARD(ADR_PREL_PG_HI21_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 12,32 , Symbol
::RELATIVE_REF
, ADRP
)
64 ARD(ADD_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::ABSOLUTE_REF
, ADD
)
65 ARD(LDST8_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::ABSOLUTE_REF
, LDST
)
66 ARD(LDST16_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN2
, 1,11 , Symbol
::ABSOLUTE_REF
, LDST
)
67 ARD(LDST32_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN4
, 2,11 , Symbol
::ABSOLUTE_REF
, LDST
)
68 ARD(LDST64_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN8
, 3,11 , Symbol
::ABSOLUTE_REF
, LDST
)
69 ARD(LDST128_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN16
, 4,11 , Symbol
::ABSOLUTE_REF
, LDST
)
70 // Above
10 relocs are from Table
4-9, Relocations to generate
19, 21 and
33 bit PC
-relative addresses.
72 ARD(ADR_GOT_PAGE
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::RELATIVE_REF
, ADRP
)
73 ARD(LD64_GOT_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN8
, 3,11 , Symbol
::ABSOLUTE_REF
, LDST
)
74 ARD(LD64_GOTPAGE_LO15
, STATIC
, AARCH64
, Y
, -1, 0,15 , 3,14 , Symbol
::RELATIVE_REF
, LDST
)
75 // Above
2 relocs are from Table
4-14, GOT
-relative instruction relocations.
(Some relocs in the table are not implemented yet.
)
77 ARD(TSTBR14
, STATIC
, CFLOW
, N
, -1, 15,15 , 2,15 , (Symbol
::FUNCTION_CALL|Symbol
::ABSOLUTE_REF
) , TBZNZ
)
78 ARD(CONDBR19
, STATIC
, CFLOW
, N
, -1, 20,20 , 2,20 , (Symbol
::FUNCTION_CALL|Symbol
::ABSOLUTE_REF
) , CONDB
)
79 ARD(CALL26
, STATIC
, CFLOW
, Y
, -1, 27,27 , 2,27 , (Symbol
::FUNCTION_CALL|Symbol
::RELATIVE_REF
) , CALL
)
80 ARD(JUMP26
, STATIC
, CFLOW
, Y
, -1, 27,27 , 2,27 , (Symbol
::FUNCTION_CALL|Symbol
::RELATIVE_REF
) , B
)
81 // Above is from Table
4-10, Relocations for control
-flow instructions
,
84 ARD(TLSGD_ADR_PAGE21
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::TLS_REF
, ADRP
)
85 ARD(TLSGD_ADD_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::TLS_REF
, ADD
)
86 // Above is from Table
4-15, General Dynamic TLS relocations
, 512-516.
88 ARD(TLSLD_ADR_PAGE21
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::TLS_REF
, ADRP
)
89 ARD(TLSLD_ADD_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::TLS_REF
, ADD
)
90 ARD(TLSLD_MOVW_DTPREL_G1
, STATIC
, AARCH64
, Y
, 1, 32,32 , 16,31 , Symbol
::TLS_REF
, ADRP
)
91 ARD(TLSLD_MOVW_DTPREL_G0_NC
, STATIC
, AARCH64
, Y
, 0, 0,0 , 0,15 , Symbol
::TLS_REF
, MOVW
)
92 ARD(TLSLD_ADD_DTPREL_HI12
, STATIC
, AARCH64
, Y
, -1, 0,24 , 12,23 , Symbol
::TLS_REF
, ADD
)
93 ARD(TLSLD_ADD_DTPREL_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::TLS_REF
, ADD
)
94 // Above is from Table
4-16, Local Dynamic TLS relocations
, 517-573.
96 ARD(TLSIE_MOVW_GOTTPREL_G1
, STATIC
, AARCH64
, N
, -1, 32,32 , 16,31 , Symbol
::TLS_REF
, MOVW
)
97 ARD(TLSIE_MOVW_GOTTPREL_G0_NC
, STATIC
, AARCH64
, N
, -1, 0,0 , 0,15 , Symbol
::TLS_REF
, MOVW
)
98 ARD(TLSIE_ADR_GOTTPREL_PAGE21
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::TLS_REF
, ADRP
)
99 ARD(TLSIE_LD64_GOTTPREL_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN8
, 3,11 , Symbol
::TLS_REF
, LDST
)
100 ARD(TLSIE_LD_GOTTPREL_PREL19
, STATIC
, AARCH64
, N
, -1, 20,20 , 2,20 , Symbol
::TLS_REF
, LD
)
101 // Above is from Table
4-17, Initial Exec TLS relocations
, 539-543.
103 ARD(TLSLE_MOVW_TPREL_G2
, STATIC
, AARCH64
, Y
, 2, 48,48 , 32,47 , Symbol
::TLS_REF
, MOVW
)
104 ARD(TLSLE_MOVW_TPREL_G1
, STATIC
, AARCH64
, Y
, 1, 32,32 , 16,31 , Symbol
::TLS_REF
, MOVW
)
105 ARD(TLSLE_MOVW_TPREL_G1_NC
, STATIC
, AARCH64
, Y
, 1, 0,0 , 16,31 , Symbol
::TLS_REF
, MOVW
)
106 ARD(TLSLE_MOVW_TPREL_G0
, STATIC
, AARCH64
, Y
, 0, 16,16 , 0,15 , Symbol
::TLS_REF
, MOVW
)
107 ARD(TLSLE_MOVW_TPREL_G0_NC
, STATIC
, AARCH64
, Y
, 0, 0,0 , 0,15 , Symbol
::TLS_REF
, MOVW
)
108 ARD(TLSLE_ADD_TPREL_HI12
, STATIC
, AARCH64
, Y
, -1, 0,24 , 12,23 , Symbol
::TLS_REF
, ADD
)
109 ARD(TLSLE_ADD_TPREL_LO12
, STATIC
, AARCH64
, Y
, -1, 0,12 , 0,11 , Symbol
::TLS_REF
, ADD
)
110 ARD(TLSLE_ADD_TPREL_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::TLS_REF
, ADD
)
111 ARD(TLSLE_LDST8_TPREL_LO12
, STATIC
, AARCH64
, Y
, -1, 0,12 , 0,11 , Symbol
::TLS_REF
, LDST
)
112 ARD(TLSLE_LDST8_TPREL_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::TLS_REF
, LDST
)
113 ARD(TLSLE_LDST16_TPREL_LO12
, STATIC
, AARCH64
, Y
, -1, 0,12 , 1,11 , Symbol
::TLS_REF
, LDST
)
114 ARD(TLSLE_LDST16_TPREL_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 1,11 , Symbol
::TLS_REF
, LDST
)
115 ARD(TLSLE_LDST32_TPREL_LO12
, STATIC
, AARCH64
, Y
, -1, 0,12 , 2,11 , Symbol
::TLS_REF
, LDST
)
116 ARD(TLSLE_LDST32_TPREL_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 2,11 , Symbol
::TLS_REF
, LDST
)
117 ARD(TLSLE_LDST64_TPREL_LO12
, STATIC
, AARCH64
, Y
, -1, 0,12 , 3,11 , Symbol
::TLS_REF
, LDST
)
118 ARD(TLSLE_LDST64_TPREL_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 3,11 , Symbol
::TLS_REF
, LDST
)
119 // Above is from Table
4-18, Local Exec TLS relocations
, 544-571.
121 ARD(TLSDESC_ADR_PAGE21
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::TLS_REF
, ADRP
)
122 ARD(TLSDESC_LD64_LO12
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN8
, 3,11 , Symbol
::TLS_REF
, LDST
)
123 ARD(TLSDESC_ADD_LO12
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::TLS_REF
, ADD
)
124 ARD(TLSDESC_CALL
, STATIC
, CFLOW
, Y
, -1, 0,0 , 0,0 , Symbol
::TLS_REF
, CALL
)
125 // Above is from Table
4-19, TLS descriptor relocations
, 560-569.
128 // A
- Checking X
, (L
,U
), if L
== 0 && U
== 0, no check. Otherwise
, L
!=0,
129 // check that
-2^L
<=X
<2^U. Also an extra alignment check could be embedded