blob: 6eab31327f38fea5867cb07efe43cda2895cf53a [file] [log] [blame]
Serban Constantinescue2104882013-09-26 11:37:10 +01001/*
2 * Copyright (C) 2013 The Android Open Source Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in
12 * the documentation and/or other materials provided with the
13 * distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29#ifndef _AARCH64_ELF_MACHDEP_H_
30#define _AARCH64_ELF_MACHDEP_H_
31
32#if defined(__AARCH64EB__)
33#define ELF64_MACHDEP_ENDIANNESS ELFDATA2MSB
34#else
35#define ELF64_MACHDEP_ENDIANNESS ELFDATA2LSB
36#endif
37
38#define ELF64_MACHDEP_ID_CASES \
39 case EM_AARCH64: \
40 break;
41
42#define ELF64_MACHDEP_ID EM_AARCH64
43
44#define ARCH_ELFSIZE 64 /* MD native binary size */
45
46/* Null relocations */
47#define R_ARM_NONE 0
48#define R_AARCH64_NONE 256
49
50/* Static Data relocations */
51#define R_AARCH64_ABS64 257
52#define R_AARCH64_ABS32 258
53#define R_AARCH64_ABS16 259
54#define R_AARCH64_PREL64 260
55#define R_AARCH64_PREL32 261
56#define R_AARCH64_PREL16 262
57
58#define R_AARCH64_MOVW_UABS_G0 263
59#define R_AARCH64_MOVW_UABS_G0_NC 264
60#define R_AARCH64_MOVW_UABS_G1 265
61#define R_AARCH64_MOVW_UABS_G1_NC 266
62#define R_AARCH64_MOVW_UABS_G2 267
63#define R_AARCH64_MOVW_UABS_G2_NC 268
64#define R_AARCH64_MOVW_UABS_G3 269
65#define R_AARCH64_MOVW_SABS_G0 270
66#define R_AARCH64_MOVW_SABS_G1 271
67#define R_AARCH64_MOVW_SABS_G2 272
68
69/* PC-relative addresses */
70#define R_AARCH64_LD_PREL_LO19 273
71#define R_AARCH64_ADR_PREL_LO21 274
72#define R_AARCH64_ADR_PREL_PG_HI21 275
73#define R_AARCH64_ADR_PREL_PG_HI21_NC 276
74#define R_AARCH64_ADD_ABS_LO12_NC 277
75#define R_AARCH64_LDST8_ABS_LO12_NC 278
76
77/* Control-flow relocations */
78#define R_AARCH64_TSTBR14 279
79#define R_AARCH64_CONDBR19 280
80#define R_AARCH64_JUMP26 282
81#define R_AARCH64_CALL26 283
82#define R_AARCH64_LDST16_ABS_LO12_NC 284
83#define R_AARCH64_LDST32_ABS_LO12_NC 285
84#define R_AARCH64_LDST64_ABS_LO12_NC 286
85#define R_AARCH64_LDST128_ABS_LO12_NC 299
86
87#define R_AARCH64_MOVW_PREL_G0 287
88#define R_AARCH64_MOVW_PREL_G0_NC 288
89#define R_AARCH64_MOVW_PREL_G1 289
90#define R_AARCH64_MOVW_PREL_G1_NC 290
91#define R_AARCH64_MOVW_PREL_G2 291
92#define R_AARCH64_MOVW_PREL_G2_NC 292
93#define R_AARCH64_MOVW_PREL_G3 293
94
95/* Dynamic relocations */
96#define R_AARCH64_COPY 1024
97#define R_AARCH64_GLOB_DAT 1025 /* Create GOT entry. */
98#define R_AARCH64_JUMP_SLOT 1026 /* Create PLT entry. */
99#define R_AARCH64_RELATIVE 1027 /* Adjust by program base. */
100#define R_AARCH64_TLS_TPREL64 1030
101#define R_AARCH64_TLS_DTPREL32 1031
Dmitriy Ivanovf4cb6312014-09-11 15:16:03 -0700102#define R_AARCH64_IRELATIVE 1032
Serban Constantinescue2104882013-09-26 11:37:10 +0100103
104#define R_TYPE(name) __CONCAT(R_AARCH64_,name)
105
106#endif /* _AARCH64_ELF_MACHDEP_H_ */