1 // aarch64
-reloc.def
-- AArch64 relocation definitions.
3 // Copyright (C
) 2014 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(ABS64
, STATIC
, DATA
, Y
, -1, 0,0 , 0,0 , Symbol
::ABSOLUTE_REF
, DATA
)
36 ARD(ABS32
, STATIC
, DATA
, Y
, -1, 31,32 , 0,0 , Symbol
::ABSOLUTE_REF
, DATA
)
37 ARD(ABS16
, STATIC
, DATA
, Y
, -1, 15,16 , 0,0 , Symbol
::ABSOLUTE_REF
, DATA
)
38 ARD(PREL64
, STATIC
, DATA
, Y
, -1, 0,0 , 0,0 , Symbol
::RELATIVE_REF
, DATA
)
39 ARD(PREL32
, STATIC
, DATA
, Y
, -1, 31,32 , 0,0 , Symbol
::RELATIVE_REF
, DATA
)
40 ARD(PREL16
, STATIC
, DATA
, Y
, -1, 15,16 , 0,0 , Symbol
::RELATIVE_REF
, DATA
)
41 // Above is from Table
4-6, Data relocations
, 257-262.
43 ARD(ADR_PREL_PG_HI21
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::RELATIVE_REF
, ADRP
)
44 ARD(ADR_PREL_PG_HI21_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 12,32 , Symbol
::RELATIVE_REF
, ADRP
)
45 ARD(LDST8_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::ABSOLUTE_REF
, LDST
)
46 ARD(LDST16_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN2
, 1,11 , Symbol
::ABSOLUTE_REF
, LDST
)
47 ARD(LDST32_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN4
, 2,11 , Symbol
::ABSOLUTE_REF
, LDST
)
48 ARD(LDST64_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN8
, 3,11 , Symbol
::ABSOLUTE_REF
, LDST
)
49 ARD(LDST128_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN16
, 4,11 , Symbol
::ABSOLUTE_REF
, LDST
)
50 ARD(ADD_ABS_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::ABSOLUTE_REF
, ADD
)
51 ARD(ADR_GOT_PAGE
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::RELATIVE_REF
, ADRP
)
52 ARD(LD64_GOT_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN8
, 3,11 , Symbol
::ABSOLUTE_REF
, LDST
)
53 ARD(TSTBR14
, STATIC
, CFLOW
, N
, -1, 15,15 , 2,15 , (Symbol
::FUNCTION_CALL|Symbol
::ABSOLUTE_REF
) , TBZNZ
)
54 ARD(CONDBR19
, STATIC
, CFLOW
, N
, -1, 20,20 , 2,20 , (Symbol
::FUNCTION_CALL|Symbol
::ABSOLUTE_REF
) , CONDB
)
55 ARD(CALL26
, STATIC
, CFLOW
, Y
, -1, 27,27 , 2,27 , (Symbol
::FUNCTION_CALL|Symbol
::RELATIVE_REF
) , CALL
)
56 ARD(JUMP26
, STATIC
, CFLOW
, Y
, -1, 27,27 , 2,27 , (Symbol
::FUNCTION_CALL|Symbol
::RELATIVE_REF
) , B
)
57 // Above is from Table
4-10, Relocations for control
-flow instructions
,
60 ARD(TLSGD_ADR_PAGE21
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::ABSOLUTE_REF
, ADRP
)
61 ARD(TLSGD_ADD_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::ABSOLUTE_REF
, ADD
)
63 ARD(TLSIE_MOVW_GOTTPREL_G1
, STATIC
, AARCH64
, N
, -1, 0,0 , 16,31 , Symbol
::ABSOLUTE_REF
, MOVW
)
64 ARD(TLSIE_MOVW_GOTTPREL_G0_NC
, STATIC
, AARCH64
, N
, -1, 0,0 , 0,15 , Symbol
::ABSOLUTE_REF
, MOVW
)
65 ARD(TLSIE_ADR_GOTTPREL_PAGE21
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::ABSOLUTE_REF
, ADRP
)
66 ARD(TLSIE_LD64_GOTTPREL_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN8
, 3,11 , Symbol
::ABSOLUTE_REF
, LDST
)
67 ARD(TLSIE_LD_GOTTPREL_PREL19
, STATIC
, AARCH64
, N
, -1, 20,20 , 2,20 , Symbol
::ABSOLUTE_REF
, LD
)
68 // Above is from Table
4-17, Initial Exec TLS relocations
, 539-543.
70 ARD(TLSLE_ADD_TPREL_HI12
, STATIC
, AARCH64
, Y
, -1, 0,24 , 12,23 , Symbol
::ABSOLUTE_REF
, ADD
)
71 ARD(TLSLE_ADD_TPREL_LO12
, STATIC
, AARCH64
, Y
, -1, 0,12 , 0,11 , Symbol
::ABSOLUTE_REF
, ADD
)
72 ARD(TLSLE_ADD_TPREL_LO12_NC
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::ABSOLUTE_REF
, ADD
)
73 // Above is from Table
4-18, Local Exec TLS relocations
, 544-571.
75 ARD(TLSDESC_ADR_PAGE21
, STATIC
, AARCH64
, Y
, -1, 32,32 , 12,32 , Symbol
::RELATIVE_REF
, ADRP
)
76 ARD(TLSDESC_LD64_LO12
, STATIC
, AARCH64
, Y
, -1, 0,RL_CHECK_ALIGN8
, 3,11 , Symbol
::ABSOLUTE_REF
, LDST
)
77 ARD(TLSDESC_ADD_LO12
, STATIC
, AARCH64
, Y
, -1, 0,0 , 0,11 , Symbol
::ABSOLUTE_REF
, ADD
)
78 ARD(TLSDESC_CALL
, STATIC
, CFLOW
, Y
, -1, 0,0 , 0,0 , (Symbol
::FUNCTION_CALL|Symbol
::ABSOLUTE_REF
) , CALL
)
79 // Above is from Table
4-19, TLS descriptor relocations
, 560-569.
82 // A
- Checking X
, (L
,U
), if L
== 0 && U
== 0, no check. Otherwise
, L
!=0,
83 // check that
-2^L
<=X
<2^U. Also an extra alignment check could be embeded