1551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//===- AArch64RelocationFunction.h ----------------------------------------===//
2551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//
3551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//                     The MCLinker Project
4551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//
5551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// This file is distributed under the University of Illinois Open Source
6551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// License. See LICENSE.TXT for details.
7551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//
8551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//===----------------------------------------------------------------------===//
9551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
10551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#define DECL_AARCH64_APPLY_RELOC_FUNC(Name) \
11551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesstatic AArch64Relocator::Result Name (Relocation& pEntry, AArch64Relocator& pParent);
12551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
13551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#define DECL_AARCH64_APPLY_RELOC_FUNCS \
14551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(none) \
15551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(abs) \
16551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(rel) \
17551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(call) \
18551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(condbr) \
19551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(adr_prel_pg_hi21) \
20551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(add_abs_lo12) \
21551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(adr_got_page) \
22551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(ld64_got_lo12) \
23551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(ldst_abs_lo12) \
24551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesDECL_AARCH64_APPLY_RELOC_FUNC(unsupport)
25551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
26551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#define DECL_AARCH64_APPLY_RELOC_FUNC_PTRS(ValueType, MappedType) \
27551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x0,   MappedType(&none, "R_AARCH64_NULL")), \
28551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x100, MappedType(&none, "R_AARCH64_NONE")), \
29551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x101, MappedType(&abs, "R_AARCH64_ABS64", 64)), \
30551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x102, MappedType(&abs, "R_AARCH64_ABS32", 32)), \
31551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x103, MappedType(&abs, "R_AARCH64_ABS16", 16)), \
32551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x104, MappedType(&rel, "R_AARCH64_PREL64", 64)), \
33551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x105, MappedType(&rel, "R_AARCH64_PREL32", 32)), \
34551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x106, MappedType(&rel, "R_AARCH64_PREL16", 16)), \
35551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x107, MappedType(&unsupport, "R_AARCH64_MOVW_UABS_G0")), \
36551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x108, MappedType(&unsupport, "R_AARCH64_MOVW_UABS_G0_NC")), \
37551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x109, MappedType(&unsupport, "R_AARCH64_MOVW_UABS_G1")), \
38551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x10a, MappedType(&unsupport, "R_AARCH64_MOVW_UABS_G1_NC")), \
39551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x10b, MappedType(&unsupport, "R_AARCH64_MOVW_UABS_G2")), \
40551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x10c, MappedType(&unsupport, "R_AARCH64_MOVW_UABS_G2_NC")), \
41551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x10d, MappedType(&unsupport, "R_AARCH64_MOVW_UABS_G3")), \
42551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x10e, MappedType(&unsupport, "R_AARCH64_MOVW_SABS_G0")), \
43551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x10f, MappedType(&unsupport, "R_AARCH64_MOVW_SABS_G1")), \
44551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x110, MappedType(&unsupport, "R_AARCH64_MOVW_SABS_G2")), \
45551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x111, MappedType(&unsupport, "R_AARCH64_LD_PREL_LO19")), \
46551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x112, MappedType(&unsupport, "R_AARCH64_ADR_PREL_LO21")), \
47551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x113, MappedType(&adr_prel_pg_hi21, "R_AARCH64_ADR_PREL_PG_HI21", 32)), \
48551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x114, MappedType(&adr_prel_pg_hi21, "R_AARCH64_ADR_PREL_PG_HI21_NC", 32)), \
49551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x115, MappedType(&add_abs_lo12, "R_AARCH64_ADD_ABS_LO12_NC", 32)), \
50551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x116, MappedType(&ldst_abs_lo12, "R_AARCH64_LDST8_ABS_LO12_NC", 32)), \
51551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x117, MappedType(&unsupport, "R_AARCH64_TSTBR14")), \
52551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x118, MappedType(&condbr, "R_AARCH64_CONDBR19", 32)), \
53551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x11a, MappedType(&call, "R_AARCH64_JUMP26", 32)), \
54551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x11b, MappedType(&call, "R_AARCH64_CALL26", 32)), \
55551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x11c, MappedType(&ldst_abs_lo12, "R_AARCH64_LDST16_ABS_LO12_NC", 32)), \
56551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x11d, MappedType(&ldst_abs_lo12, "R_AARCH64_LDST32_ABS_LO12_NC", 32)), \
57551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x11e, MappedType(&ldst_abs_lo12, "R_AARCH64_LDST64_ABS_LO12_NC", 32)), \
58551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x12b, MappedType(&ldst_abs_lo12, "R_AARCH64_LDST128_ABS_LO12_NC", 32)), \
59551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x137, MappedType(&adr_got_page, "R_AARCH64_ADR_GOT_PAGE", 32)), \
60551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x138, MappedType(&ld64_got_lo12, "R_AARCH64_LD64_GOT_LO12_NC", 32)), \
61551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x20b, MappedType(&unsupport, "R_AARCH64_TLSLD_MOVW_DTPREL_G2")), \
62551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x20c, MappedType(&unsupport, "R_AARCH64_TLSLD_MOVW_DTPREL_G1")), \
63551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x20d, MappedType(&unsupport, "R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC")), \
64551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x20e, MappedType(&unsupport, "R_AARCH64_TLSLD_MOVW_DTPREL_G0")), \
65551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x20f, MappedType(&unsupport, "R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC")), \
66551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x210, MappedType(&unsupport, "R_AARCH64_TLSLD_ADD_DTPREL_HI12")), \
67551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x211, MappedType(&unsupport, "R_AARCH64_TLSLD_ADD_DTPREL_LO12")), \
68551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x212, MappedType(&unsupport, "R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC")), \
69551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x213, MappedType(&unsupport, "R_AARCH64_TLSLD_LDST8_DTPREL_LO12")), \
70551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x214, MappedType(&unsupport, "R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC")), \
71551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x215, MappedType(&unsupport, "R_AARCH64_TLSLD_LDST16_DTPREL_LO12")), \
72551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x216, MappedType(&unsupport, "R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC")), \
73551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x217, MappedType(&unsupport, "R_AARCH64_TLSLD_LDST32_DTPREL_LO12")), \
74551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x218, MappedType(&unsupport, "R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC")), \
75551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x219, MappedType(&unsupport, "R_AARCH64_TLSLD_LDST64_DTPREL_LO12")), \
76551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x21a, MappedType(&unsupport, "R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC")), \
77551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x21b, MappedType(&unsupport, "R_AARCH64_TLSIE_MOVW_GOTTPREL_G1")), \
78551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x21c, MappedType(&unsupport, "R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC")), \
79551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x21d, MappedType(&unsupport, "R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21")), \
80551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x21e, MappedType(&unsupport, "R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC")), \
81551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x21f, MappedType(&unsupport, "R_AARCH64_TLSIE_LD_GOTTPREL_PREL19")), \
82551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x220, MappedType(&unsupport, "R_AARCH64_TLSLE_MOVW_TPREL_G2")), \
83551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x221, MappedType(&unsupport, "R_AARCH64_TLSLE_MOVW_TPREL_G1")), \
84551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x222, MappedType(&unsupport, "R_AARCH64_TLSLE_MOVW_TPREL_G1_NC")), \
85551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x223, MappedType(&unsupport, "R_AARCH64_TLSLE_MOVW_TPREL_G0")), \
86551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x224, MappedType(&unsupport, "R_AARCH64_TLSLE_MOVW_TPREL_G0_NC")), \
87551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x225, MappedType(&unsupport, "R_AARCH64_TLSLE_ADD_TPREL_HI12")), \
88551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x226, MappedType(&unsupport, "R_AARCH64_TLSLE_ADD_TPREL_LO12")), \
89551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x227, MappedType(&unsupport, "R_AARCH64_TLSLE_ADD_TPREL_LO12_NC")), \
90551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x228, MappedType(&unsupport, "R_AARCH64_TLSLE_LDST8_TPREL_LO12")), \
91551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x229, MappedType(&unsupport, "R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC")), \
92551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x22a, MappedType(&unsupport, "R_AARCH64_TLSLE_LDST16_TPREL_LO12")), \
93551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x22b, MappedType(&unsupport, "R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC")), \
94551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x22c, MappedType(&unsupport, "R_AARCH64_TLSLE_LDST32_TPREL_LO12")), \
95551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x22d, MappedType(&unsupport, "R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC")), \
96551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x22e, MappedType(&unsupport, "R_AARCH64_TLSLE_LDST64_TPREL_LO12")), \
97551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x22f, MappedType(&unsupport, "R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC")), \
98551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x232, MappedType(&unsupport, "R_AARCH64_TLSDESC_ADR_PAGE")), \
99551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x233, MappedType(&unsupport, "R_AARCH64_TLSDESC_LD64_LO12_NC")), \
100551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x234, MappedType(&unsupport, "R_AARCH64_TLSDESC_ADD_LO12_NC")), \
101551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType(0x239, MappedType(&unsupport, "R_AARCH64_TLSDESC_CALL")), \
102551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType( 1024, MappedType(&unsupport, "R_AARCH64_COPY")), \
103551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType( 1025, MappedType(&unsupport, "R_AARCH64_GLOB_DAT")), \
104551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType( 1026, MappedType(&unsupport, "R_AARCH64_JUMP_SLOT")), \
105551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType( 1027, MappedType(&unsupport, "R_AARCH64_RELATIVE")), \
106551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType( 1028, MappedType(&unsupport, "R_AARCH64_TLS_DTPREL64")), \
107551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType( 1029, MappedType(&unsupport, "R_AARCH64_TLS_DTPMOD64")), \
108551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType( 1030, MappedType(&unsupport, "R_AARCH64_TLS_TPREL64")), \
109551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType( 1031, MappedType(&unsupport, "R_AARCH64_TLSDESC")), \
110551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  ValueType( 1032, MappedType(&unsupport, "R_AARCH64_IRELATIVE"))
111