|  | // aarch64.h -- ELF definitions specific to AARCH64  -*- C++ -*- | 
|  |  | 
|  | // Copyright (C) 2014-2025 Free Software Foundation, Inc. | 
|  | // Written by Jing Yu (jingyu@google.com) | 
|  |  | 
|  | // This file is part of elfcpp. | 
|  |  | 
|  | // This program is free software; you can redistribute it and/or | 
|  | // modify it under the terms of the GNU Library General Public License | 
|  | // as published by the Free Software Foundation; either version 2, or | 
|  | // (at your option) any later version. | 
|  |  | 
|  | // In addition to the permissions in the GNU Library General Public | 
|  | // License, the Free Software Foundation gives you unlimited | 
|  | // permission to link the compiled version of this file into | 
|  | // combinations with other programs, and to distribute those | 
|  | // combinations without any restriction coming from the use of this | 
|  | // file.  (The Library Public License restrictions do apply in other | 
|  | // respects; for example, they cover modification of the file, and | 
|  | /// distribution when not linked into a combined executable.) | 
|  |  | 
|  | // This program is distributed in the hope that it will be useful, but | 
|  | // WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | // Library General Public License for more details. | 
|  |  | 
|  | // You should have received a copy of the GNU Library General Public | 
|  | // License along with this program; if not, write to the Free Software | 
|  | // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA | 
|  | // 02110-1301, USA. | 
|  |  | 
|  | #ifndef ELFCPP_AARCH64_H | 
|  | #define ELFCPP_AARCH64_H | 
|  |  | 
|  | namespace elfcpp | 
|  | { | 
|  |  | 
|  | // The relocation type information is taken from: | 
|  | // | 
|  | //   ELF for the ARM 64-bit Architecture (AArch64) | 
|  | //   Document number: ARM IHI 0056B, current through AArch64 ABI release 1.0 | 
|  | //   Date of Issue: 22nd May, 2013 | 
|  | // | 
|  |  | 
|  | enum | 
|  | { | 
|  | // Null relocation codes | 
|  | R_AARCH64_NONE = 0,		// None | 
|  | R_AARCH64_withdrawn = 256,	// Treat as R_AARCH64_NONE | 
|  |  | 
|  | // Static relocations | 
|  | R_AARCH64_ABS64 = 257,	// S + A | 
|  | R_AARCH64_ABS32 = 258,	// S + A | 
|  | R_AARCH64_ABS16 = 259,	// S + A | 
|  | R_AARCH64_PREL64 = 260,	// S + A - P | 
|  | R_AARCH64_PREL32 = 261,	// S + A - P | 
|  | R_AARCH64_PREL16 = 262,	// S + A - P | 
|  | R_AARCH64_MOVW_UABS_G0 = 263,		// S + A | 
|  | R_AARCH64_MOVW_UABS_G0_NC = 264,	// S + A | 
|  | R_AARCH64_MOVW_UABS_G1 = 265,		// S + A | 
|  | R_AARCH64_MOVW_UABS_G1_NC = 266,	// S + A | 
|  | R_AARCH64_MOVW_UABS_G2 = 267,		// S + A | 
|  | R_AARCH64_MOVW_UABS_G2_NC = 268,	// S + A | 
|  | R_AARCH64_MOVW_UABS_G3 = 269,		// S + A | 
|  | R_AARCH64_MOVW_SABS_G0 = 270,		// S + A | 
|  | R_AARCH64_MOVW_SABS_G1 = 271,		// S + A | 
|  | R_AARCH64_MOVW_SABS_G2 = 272,		// S + A | 
|  | R_AARCH64_LD_PREL_LO19 = 273,		// S + A - P | 
|  | R_AARCH64_ADR_PREL_LO21 = 274,	// S + A - P | 
|  | R_AARCH64_ADR_PREL_PG_HI21 = 275,	// Page(S+A) - Page(P) | 
|  | R_AARCH64_ADR_PREL_PG_HI21_NC = 276,	// Page(S+A) - Page(P) | 
|  | R_AARCH64_ADD_ABS_LO12_NC = 277,	// S + A | 
|  | R_AARCH64_LDST8_ABS_LO12_NC = 278,	// S + A | 
|  | R_AARCH64_TSTBR14 = 279,		// S + A - P | 
|  | R_AARCH64_CONDBR19 = 280,		// S + A - P | 
|  | R_AARCH64_JUMP26 = 282,		// S + A - P | 
|  | R_AARCH64_CALL26 = 283,		// S + A - P | 
|  | R_AARCH64_LDST16_ABS_LO12_NC = 284,	// S + A | 
|  | R_AARCH64_LDST32_ABS_LO12_NC = 285,	// S + A | 
|  | R_AARCH64_LDST64_ABS_LO12_NC = 286,	// S + A | 
|  | R_AARCH64_MOVW_PREL_G0 = 287,		// S + A - P | 
|  | R_AARCH64_MOVW_PREL_G0_NC = 288,	// S + A - P | 
|  | R_AARCH64_MOVW_PREL_G1 = 289,		// S + A - P | 
|  | R_AARCH64_MOVW_PREL_G1_NC = 290,	// S + A - P | 
|  | R_AARCH64_MOVW_PREL_G2 = 291,		// S + A - P | 
|  | R_AARCH64_MOVW_PREL_G2_NC = 292,	// S + A - P | 
|  | R_AARCH64_MOVW_PREL_G3 = 293,		// S + A - P | 
|  | R_AARCH64_LDST128_ABS_LO12_NC = 299,	// S + A | 
|  | R_AARCH64_MOVW_GOTOFF_G0 = 300,	// G(GDAT(S+A))-GOT | 
|  | R_AARCH64_MOVW_GOTOFF_G0_NC = 301,	// G(GDAT(S+A))-GOT | 
|  | R_AARCH64_MOVW_GOTOFF_G1 = 302,	// G(GDAT(S+A))-GOT | 
|  | R_AARCH64_MOVW_GOTOFF_G1_NC = 303,	// G(GDAT(S+A))-GOT | 
|  | R_AARCH64_MOVW_GOTOFF_G2 = 304,	// G(GDAT(S+A))-GOT | 
|  | R_AARCH64_MOVW_GOTOFF_G2_NC = 305,	// G(GDAT(S+A))-GOT | 
|  | R_AARCH64_MOVW_GOTOFF_G3 = 306,	// G(GDAT(S+A))-GOT | 
|  | R_AARCH64_GOTREL64 = 307,		// S + A - GOT | 
|  | R_AARCH64_GOTREL32 = 308,		// S + A - GOT | 
|  | R_AARCH64_GOT_LD_PREL19 = 309,	// G(GDAT(S+A))-P | 
|  | R_AARCH64_LD64_GOTOFF_LO15 = 310,	// G(GDAT(S+A))-GOT | 
|  | R_AARCH64_ADR_GOT_PAGE = 311,		// Page(G(GDAT(S+A)))-Page(P) | 
|  | R_AARCH64_LD64_GOT_LO12_NC = 312,	// G(GDAT(S+A)) | 
|  | R_AARCH64_LD64_GOTPAGE_LO15 = 313,	// G(GDAT(S+A))-Page(GOT) | 
|  |  | 
|  | // Relocations for thread-local storage | 
|  | R_AARCH64_TLSGD_ADR_PREL21 = 512,		// G(GTLSIDX(S,A)) - P | 
|  | R_AARCH64_TLSGD_ADR_PAGE21 = 513,		// Page(G(GTLSIDX(S,A)))-Page(P) | 
|  | R_AARCH64_TLSGD_ADD_LO12_NC = 514,		// G(GTLSICX(S,A)) | 
|  | R_AARCH64_TLSGD_MOVW_G1 = 515,		// G(GTLSIDX(S,A)) - GOT | 
|  | R_AARCH64_TLSGD_MOVW_G0_NC = 516,		// G(GTLSIDX(S,A)) - GOT | 
|  |  | 
|  | R_AARCH64_TLSLD_ADR_PREL21 = 517,		// G(GLDM(S)) - P | 
|  | R_AARCH64_TLSLD_ADR_PAGE21 = 518,		// Page(G(GLDM(S))) - Page(P) | 
|  | R_AARCH64_TLSLD_ADD_LO12_NC = 519,		// G(GLDM(S)) | 
|  | R_AARCH64_TLSLD_MOVW_G1 = 520,		// G(GLDM(S)) - GOT | 
|  | R_AARCH64_TLSLD_MOVW_G0_NC = 521,		// G(GLDM(S)) - GOT | 
|  | R_AARCH64_TLSLD_LD_PREL19 = 522,		// G(GLDM(S)) - P | 
|  | R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 523,		// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_MOVW_DTPREL_G1 = 524,		// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC = 525,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_MOVW_DTPREL_G0 = 526,		// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC = 527,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_ADD_DTPREL_HI12 = 528,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_ADD_DTPREL_LO12 = 529,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC = 530,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_LDST8_DTPREL_LO12 = 531,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC = 532,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_LDST16_DTPREL_LO12 = 533,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC = 534,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_LDST32_DTPREL_LO12 = 535,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC = 536,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_LDST64_DTPREL_LO12 = 537,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC = 538,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 = 539,	// G(GTPREL(S+A)) - GOT | 
|  | R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC = 540,	// G(GTPREL(S+A)) - GOT | 
|  | R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 = 541,	// Page(G(GTPREL(S+A)))-Page(P) | 
|  | R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC = 542,	// G(GTPREL(S+A)) | 
|  | R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 = 543,	// G(GTPREL(S+A)) - P | 
|  | R_AARCH64_TLSLE_MOVW_TPREL_G2 = 544,		// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_MOVW_TPREL_G1 = 545,		// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_MOVW_TPREL_G1_NC = 546,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_MOVW_TPREL_G0 = 547,		// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_MOVW_TPREL_G0_NC = 548,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_ADD_TPREL_HI12 = 549,		// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_ADD_TPREL_LO12 = 550,		// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_ADD_TPREL_LO12_NC = 551,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_LDST8_TPREL_LO12 = 552,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC = 553,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_LDST16_TPREL_LO12 = 554,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC = 555,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_LDST32_TPREL_LO12 = 556,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC = 557,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_LDST64_TPREL_LO12 = 558,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC = 559,	// TPREL(S+A) | 
|  | R_AARCH64_TLSDESC_LD_PREL19 = 560,	// G(GTLSDESC(S+A)) - P | 
|  | R_AARCH64_TLSDESC_ADR_PREL21 = 561,	// G(GTLSDESC(S+A)) - P | 
|  | R_AARCH64_TLSDESC_ADR_PAGE21 = 562,	// Page(G(GTLSDESC(S+A)))-Page(P) | 
|  | R_AARCH64_TLSDESC_LD64_LO12 = 563,	// G(GTLSDESC(S+A)) | 
|  | R_AARCH64_TLSDESC_ADD_LO12 = 564,	// G(GTLSDESC(S+A)) | 
|  | R_AARCH64_TLSDESC_OFF_G1 = 565,	// G(GTLSDESC(S+A)) - GOT | 
|  | R_AARCH64_TLSDESC_OFF_G0_NC = 566,	// G(GTLSDESC(S+A)) - GOT | 
|  | R_AARCH64_TLSDESC_LDR = 567,		// None | 
|  | R_AARCH64_TLSDESC_ADD = 568,		// None | 
|  | R_AARCH64_TLSDESC_CALL = 569,		// None | 
|  | R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 570,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 571,	// TPREL(S+A) | 
|  | R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 572,	// DTPREL(S+A) | 
|  | R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 573,	// DTPREL(S+A) | 
|  |  | 
|  | // Dynamic relocations | 
|  | R_AARCH64_COPY = 1024, | 
|  | R_AARCH64_GLOB_DAT = 1025,		// S + A | 
|  | R_AARCH64_JUMP_SLOT = 1026,		// S + A | 
|  | R_AARCH64_RELATIVE = 1027,		// Delta(S) + A | 
|  | // Note (shenhan): the following 2 relocs are different from elf spec from | 
|  | // arm.  In elf docs, TLS_DTPMOD64 is defined as 1029, TLS_DTPREL64 1028. | 
|  | // While actually the bfd linker (and the dynamic linker) treates TLS_DTPMOD64 | 
|  | // as 1028, TLS_DTPREL64 1029.  See binutils-gdb/include/elf/aarch64.h. | 
|  | R_AARCH64_TLS_DTPMOD64 = 1028,	// LDM(S) | 
|  | R_AARCH64_TLS_DTPREL64 = 1029,	// DTPREL(S+A) | 
|  | R_AARCH64_TLS_TPREL64 = 1030,		// TPREL(S+A) | 
|  | R_AARCH64_TLSDESC = 1031,		// TLSDESC(S+A) | 
|  | R_AARCH64_IRELATIVE = 1032,		// Indirect(Delta(S) + A) | 
|  | }; | 
|  |  | 
|  | } // End namespace elfcpp. | 
|  |  | 
|  | #endif // !defined(ELFCPP_AARCH64_H) |