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