1#ifndef ELF_RELOC 2#error "ELF_RELOC must be defined" 3#endif 4 5// Based on released ABI: https://github.com/ARM-software/abi-aa, aaelf64. 6// ELF64 7// Null relocation: also 0x100 for ELF64 8ELF_RELOC(R_AARCH64_NONE, 0) 9// Data relocations 10ELF_RELOC(R_AARCH64_ABS64, 0x101) 11ELF_RELOC(R_AARCH64_ABS32, 0x102) 12ELF_RELOC(R_AARCH64_ABS16, 0x103) 13ELF_RELOC(R_AARCH64_PREL64, 0x104) 14ELF_RELOC(R_AARCH64_PREL32, 0x105) 15ELF_RELOC(R_AARCH64_PREL16, 0x106) 16// Static AArch64 relocations 17ELF_RELOC(R_AARCH64_MOVW_UABS_G0, 0x107) 18ELF_RELOC(R_AARCH64_MOVW_UABS_G0_NC, 0x108) 19ELF_RELOC(R_AARCH64_MOVW_UABS_G1, 0x109) 20ELF_RELOC(R_AARCH64_MOVW_UABS_G1_NC, 0x10a) 21ELF_RELOC(R_AARCH64_MOVW_UABS_G2, 0x10b) 22ELF_RELOC(R_AARCH64_MOVW_UABS_G2_NC, 0x10c) 23ELF_RELOC(R_AARCH64_MOVW_UABS_G3, 0x10d) 24ELF_RELOC(R_AARCH64_MOVW_SABS_G0, 0x10e) 25ELF_RELOC(R_AARCH64_MOVW_SABS_G1, 0x10f) 26ELF_RELOC(R_AARCH64_MOVW_SABS_G2, 0x110) 27ELF_RELOC(R_AARCH64_LD_PREL_LO19, 0x111) 28ELF_RELOC(R_AARCH64_ADR_PREL_LO21, 0x112) 29ELF_RELOC(R_AARCH64_ADR_PREL_PG_HI21, 0x113) 30ELF_RELOC(R_AARCH64_ADR_PREL_PG_HI21_NC, 0x114) 31ELF_RELOC(R_AARCH64_ADD_ABS_LO12_NC, 0x115) 32ELF_RELOC(R_AARCH64_LDST8_ABS_LO12_NC, 0x116) 33ELF_RELOC(R_AARCH64_TSTBR14, 0x117) 34ELF_RELOC(R_AARCH64_CONDBR19, 0x118) 35ELF_RELOC(R_AARCH64_JUMP26, 0x11a) 36ELF_RELOC(R_AARCH64_CALL26, 0x11b) 37ELF_RELOC(R_AARCH64_LDST16_ABS_LO12_NC, 0x11c) 38ELF_RELOC(R_AARCH64_LDST32_ABS_LO12_NC, 0x11d) 39ELF_RELOC(R_AARCH64_LDST64_ABS_LO12_NC, 0x11e) 40ELF_RELOC(R_AARCH64_MOVW_PREL_G0, 0x11f) 41ELF_RELOC(R_AARCH64_MOVW_PREL_G0_NC, 0x120) 42ELF_RELOC(R_AARCH64_MOVW_PREL_G1, 0x121) 43ELF_RELOC(R_AARCH64_MOVW_PREL_G1_NC, 0x122) 44ELF_RELOC(R_AARCH64_MOVW_PREL_G2, 0x123) 45ELF_RELOC(R_AARCH64_MOVW_PREL_G2_NC, 0x124) 46ELF_RELOC(R_AARCH64_MOVW_PREL_G3, 0x125) 47ELF_RELOC(R_AARCH64_LDST128_ABS_LO12_NC, 0x12b) 48ELF_RELOC(R_AARCH64_MOVW_GOTOFF_G0, 0x12c) 49ELF_RELOC(R_AARCH64_MOVW_GOTOFF_G0_NC, 0x12d) 50ELF_RELOC(R_AARCH64_MOVW_GOTOFF_G1, 0x12e) 51ELF_RELOC(R_AARCH64_MOVW_GOTOFF_G1_NC, 0x12f) 52ELF_RELOC(R_AARCH64_MOVW_GOTOFF_G2, 0x130) 53ELF_RELOC(R_AARCH64_MOVW_GOTOFF_G2_NC, 0x131) 54ELF_RELOC(R_AARCH64_MOVW_GOTOFF_G3, 0x132) 55ELF_RELOC(R_AARCH64_GOTREL64, 0x133) 56ELF_RELOC(R_AARCH64_GOTREL32, 0x134) 57ELF_RELOC(R_AARCH64_GOT_LD_PREL19, 0x135) 58ELF_RELOC(R_AARCH64_LD64_GOTOFF_LO15, 0x136) 59ELF_RELOC(R_AARCH64_ADR_GOT_PAGE, 0x137) 60ELF_RELOC(R_AARCH64_LD64_GOT_LO12_NC, 0x138) 61ELF_RELOC(R_AARCH64_LD64_GOTPAGE_LO15, 0x139) 62ELF_RELOC(R_AARCH64_PLT32, 0x13a) 63ELF_RELOC(R_AARCH64_GOTPCREL32, 0x13b) 64// General dynamic TLS relocations 65ELF_RELOC(R_AARCH64_TLSGD_ADR_PREL21, 0x200) 66ELF_RELOC(R_AARCH64_TLSGD_ADR_PAGE21, 0x201) 67ELF_RELOC(R_AARCH64_TLSGD_ADD_LO12_NC, 0x202) 68ELF_RELOC(R_AARCH64_TLSGD_MOVW_G1, 0x203) 69ELF_RELOC(R_AARCH64_TLSGD_MOVW_G0_NC, 0x204) 70// Local dynamic TLS relocations 71ELF_RELOC(R_AARCH64_TLSLD_ADR_PREL21, 0x205) 72ELF_RELOC(R_AARCH64_TLSLD_ADR_PAGE21, 0x206) 73ELF_RELOC(R_AARCH64_TLSLD_ADD_LO12_NC, 0x207) 74ELF_RELOC(R_AARCH64_TLSLD_MOVW_G1, 0x208) 75ELF_RELOC(R_AARCH64_TLSLD_MOVW_G0_NC, 0x209) 76ELF_RELOC(R_AARCH64_TLSLD_LD_PREL19, 0x20a) 77ELF_RELOC(R_AARCH64_TLSLD_MOVW_DTPREL_G2, 0x20b) 78ELF_RELOC(R_AARCH64_TLSLD_MOVW_DTPREL_G1, 0x20c) 79ELF_RELOC(R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC, 0x20d) 80ELF_RELOC(R_AARCH64_TLSLD_MOVW_DTPREL_G0, 0x20e) 81ELF_RELOC(R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC, 0x20f) 82ELF_RELOC(R_AARCH64_TLSLD_ADD_DTPREL_HI12, 0x210) 83ELF_RELOC(R_AARCH64_TLSLD_ADD_DTPREL_LO12, 0x211) 84ELF_RELOC(R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC, 0x212) 85ELF_RELOC(R_AARCH64_TLSLD_LDST8_DTPREL_LO12, 0x213) 86ELF_RELOC(R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC, 0x214) 87ELF_RELOC(R_AARCH64_TLSLD_LDST16_DTPREL_LO12, 0x215) 88ELF_RELOC(R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC, 0x216) 89ELF_RELOC(R_AARCH64_TLSLD_LDST32_DTPREL_LO12, 0x217) 90ELF_RELOC(R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC, 0x218) 91ELF_RELOC(R_AARCH64_TLSLD_LDST64_DTPREL_LO12, 0x219) 92ELF_RELOC(R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC, 0x21a) 93ELF_RELOC(R_AARCH64_TLSIE_MOVW_GOTTPREL_G1, 0x21b) 94ELF_RELOC(R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC, 0x21c) 95ELF_RELOC(R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21, 0x21d) 96ELF_RELOC(R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC, 0x21e) 97ELF_RELOC(R_AARCH64_TLSIE_LD_GOTTPREL_PREL19, 0x21f) 98// Local exec TLS relocations 99ELF_RELOC(R_AARCH64_TLSLE_MOVW_TPREL_G2, 0x220) 100ELF_RELOC(R_AARCH64_TLSLE_MOVW_TPREL_G1, 0x221) 101ELF_RELOC(R_AARCH64_TLSLE_MOVW_TPREL_G1_NC, 0x222) 102ELF_RELOC(R_AARCH64_TLSLE_MOVW_TPREL_G0, 0x223) 103ELF_RELOC(R_AARCH64_TLSLE_MOVW_TPREL_G0_NC, 0x224) 104ELF_RELOC(R_AARCH64_TLSLE_ADD_TPREL_HI12, 0x225) 105ELF_RELOC(R_AARCH64_TLSLE_ADD_TPREL_LO12, 0x226) 106ELF_RELOC(R_AARCH64_TLSLE_ADD_TPREL_LO12_NC, 0x227) 107ELF_RELOC(R_AARCH64_TLSLE_LDST8_TPREL_LO12, 0x228) 108ELF_RELOC(R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC, 0x229) 109ELF_RELOC(R_AARCH64_TLSLE_LDST16_TPREL_LO12, 0x22a) 110ELF_RELOC(R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC, 0x22b) 111ELF_RELOC(R_AARCH64_TLSLE_LDST32_TPREL_LO12, 0x22c) 112ELF_RELOC(R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC, 0x22d) 113ELF_RELOC(R_AARCH64_TLSLE_LDST64_TPREL_LO12, 0x22e) 114ELF_RELOC(R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC, 0x22f) 115// TLS descriptor relocations 116ELF_RELOC(R_AARCH64_TLSDESC_LD_PREL19, 0x230) 117ELF_RELOC(R_AARCH64_TLSDESC_ADR_PREL21, 0x231) 118ELF_RELOC(R_AARCH64_TLSDESC_ADR_PAGE21, 0x232) 119ELF_RELOC(R_AARCH64_TLSDESC_LD64_LO12, 0x233) 120ELF_RELOC(R_AARCH64_TLSDESC_ADD_LO12, 0x234) 121ELF_RELOC(R_AARCH64_TLSDESC_OFF_G1, 0x235) 122ELF_RELOC(R_AARCH64_TLSDESC_OFF_G0_NC, 0x236) 123ELF_RELOC(R_AARCH64_TLSDESC_LDR, 0x237) 124ELF_RELOC(R_AARCH64_TLSDESC_ADD, 0x238) 125ELF_RELOC(R_AARCH64_TLSDESC_CALL, 0x239) 126ELF_RELOC(R_AARCH64_TLSLE_LDST128_TPREL_LO12, 0x23a) 127ELF_RELOC(R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC, 0x23b) 128ELF_RELOC(R_AARCH64_TLSLD_LDST128_DTPREL_LO12, 0x23c) 129ELF_RELOC(R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC, 0x23d) 130// Dynamic relocations 131ELF_RELOC(R_AARCH64_COPY, 0x400) 132ELF_RELOC(R_AARCH64_GLOB_DAT, 0x401) 133ELF_RELOC(R_AARCH64_JUMP_SLOT, 0x402) 134ELF_RELOC(R_AARCH64_RELATIVE, 0x403) 135// 0x404 and 0x405 are now R_AARCH64_TLS_IMPDEF1 and R_AARCH64_TLS_IMPDEF2 136// We follow GNU and define TLS_IMPDEF1 as TLS_DTPMOD64 and TLS_IMPDEF2 as 137// TLS_DTPREL64 138ELF_RELOC(R_AARCH64_TLS_DTPMOD64, 0x404) 139ELF_RELOC(R_AARCH64_TLS_DTPREL64, 0x405) 140ELF_RELOC(R_AARCH64_TLS_TPREL64, 0x406) 141ELF_RELOC(R_AARCH64_TLSDESC, 0x407) 142ELF_RELOC(R_AARCH64_IRELATIVE, 0x408) 143// PAuthABI static and dynamic relocations: defined in pauthabielf64, 144// https://github.com/ARM-software/abi-aa 145ELF_RELOC(R_AARCH64_AUTH_ABS64, 0x244) 146ELF_RELOC(R_AARCH64_AUTH_RELATIVE, 0x411) 147ELF_RELOC(R_AARCH64_AUTH_MOVW_GOTOFF_G0, 0x8110) 148ELF_RELOC(R_AARCH64_AUTH_MOVW_GOTOFF_G0_NC, 0x8111) 149ELF_RELOC(R_AARCH64_AUTH_MOVW_GOTOFF_G1, 0x8112) 150ELF_RELOC(R_AARCH64_AUTH_MOVW_GOTOFF_G1_NC, 0x8113) 151ELF_RELOC(R_AARCH64_AUTH_MOVW_GOTOFF_G2, 0x8114) 152ELF_RELOC(R_AARCH64_AUTH_MOVW_GOTOFF_G2_NC, 0x8115) 153ELF_RELOC(R_AARCH64_AUTH_MOVW_GOTOFF_G3, 0x8116) 154ELF_RELOC(R_AARCH64_AUTH_GOT_LD_PREL19, 0x8117) 155ELF_RELOC(R_AARCH64_AUTH_LD64_GOTOFF_LO15, 0x8118) 156ELF_RELOC(R_AARCH64_AUTH_ADR_GOT_PAGE, 0x8119) 157ELF_RELOC(R_AARCH64_AUTH_LD64_GOT_LO12_NC, 0x811a) 158ELF_RELOC(R_AARCH64_AUTH_LD64_GOTPAGE_LO15, 0x811b) 159ELF_RELOC(R_AARCH64_AUTH_GOT_ADD_LO12_NC, 0x811c) 160ELF_RELOC(R_AARCH64_AUTH_GOT_ADR_PREL_LO21, 0x811d) 161ELF_RELOC(R_AARCH64_AUTH_GLOB_DAT, 0xe201) 162ELF_RELOC(R_AARCH64_AUTH_TLSDESC, 0xe202) 163ELF_RELOC(R_AARCH64_AUTH_IRELATIVE, 0xe203) 164 165// ELF32 166// ELF_RELOC(R_AARCH64_P32_NONE, 0) 167ELF_RELOC(R_AARCH64_P32_ABS32, 0x001) 168ELF_RELOC(R_AARCH64_P32_ABS16, 0x002) 169ELF_RELOC(R_AARCH64_P32_PREL32, 0x003) 170ELF_RELOC(R_AARCH64_P32_PREL16, 0x004) 171ELF_RELOC(R_AARCH64_P32_MOVW_UABS_G0, 0x005) 172ELF_RELOC(R_AARCH64_P32_MOVW_UABS_G0_NC, 0x006) 173ELF_RELOC(R_AARCH64_P32_MOVW_UABS_G1, 0x007) 174ELF_RELOC(R_AARCH64_P32_MOVW_SABS_G0, 0x008) 175ELF_RELOC(R_AARCH64_P32_LD_PREL_LO19, 0x009) 176ELF_RELOC(R_AARCH64_P32_ADR_PREL_LO21, 0x00a) 177ELF_RELOC(R_AARCH64_P32_ADR_PREL_PG_HI21, 0x00b) 178ELF_RELOC(R_AARCH64_P32_ADD_ABS_LO12_NC, 0x00c) 179ELF_RELOC(R_AARCH64_P32_LDST8_ABS_LO12_NC, 0x00d) 180ELF_RELOC(R_AARCH64_P32_LDST16_ABS_LO12_NC, 0x00e) 181ELF_RELOC(R_AARCH64_P32_LDST32_ABS_LO12_NC, 0x00f) 182ELF_RELOC(R_AARCH64_P32_LDST64_ABS_LO12_NC, 0x010) 183ELF_RELOC(R_AARCH64_P32_LDST128_ABS_LO12_NC, 0x011) 184ELF_RELOC(R_AARCH64_P32_TSTBR14, 0x012) 185ELF_RELOC(R_AARCH64_P32_CONDBR19, 0x013) 186ELF_RELOC(R_AARCH64_P32_JUMP26, 0x014) 187ELF_RELOC(R_AARCH64_P32_CALL26, 0x015) 188ELF_RELOC(R_AARCH64_P32_MOVW_PREL_G0, 0x016) 189ELF_RELOC(R_AARCH64_P32_MOVW_PREL_G0_NC, 0x017) 190ELF_RELOC(R_AARCH64_P32_MOVW_PREL_G1, 0x018) 191ELF_RELOC(R_AARCH64_P32_GOT_LD_PREL19, 0x019) 192ELF_RELOC(R_AARCH64_P32_ADR_GOT_PAGE, 0x01a) 193ELF_RELOC(R_AARCH64_P32_LD32_GOT_LO12_NC, 0x01b) 194ELF_RELOC(R_AARCH64_P32_LD32_GOTPAGE_LO14, 0x01c) 195ELF_RELOC(R_AARCH64_P32_PLT32, 0x01d) 196ELF_RELOC(R_AARCH64_P32_TLSGD_ADR_PREL21, 0x050) 197ELF_RELOC(R_AARCH64_P32_TLSGD_ADR_PAGE21, 0x051) 198ELF_RELOC(R_AARCH64_P32_TLSGD_ADD_LO12_NC, 0x052) 199ELF_RELOC(R_AARCH64_P32_TLSLD_ADR_PREL21, 0x053) 200ELF_RELOC(R_AARCH64_P32_TLSLD_ADR_PAGE21, 0x054) 201ELF_RELOC(R_AARCH64_P32_TLSLD_ADD_LO12_NC, 0x055) 202ELF_RELOC(R_AARCH64_P32_TLSLD_LD_PREL19, 0x056) 203ELF_RELOC(R_AARCH64_P32_TLSLD_MOVW_DTPREL_G1, 0x057) 204ELF_RELOC(R_AARCH64_P32_TLSLD_MOVW_DTPREL_G0, 0x058) 205ELF_RELOC(R_AARCH64_P32_TLSLD_MOVW_DTPREL_G0_NC, 0x059) 206ELF_RELOC(R_AARCH64_P32_TLSLD_ADD_DTPREL_HI12, 0x05a) 207ELF_RELOC(R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12, 0x05b) 208ELF_RELOC(R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12_NC, 0x05c) 209ELF_RELOC(R_AARCH64_P32_TLSLD_LDST8_DTPREL_LO12, 0x05d) 210ELF_RELOC(R_AARCH64_P32_TLSLD_LDST8_DTPREL_LO12_NC, 0x05e) 211ELF_RELOC(R_AARCH64_P32_TLSLD_LDST16_DTPREL_LO12, 0x05f) 212ELF_RELOC(R_AARCH64_P32_TLSLD_LDST16_DTPREL_LO12_NC, 0x060) 213ELF_RELOC(R_AARCH64_P32_TLSLD_LDST32_DTPREL_LO12, 0x061) 214ELF_RELOC(R_AARCH64_P32_TLSLD_LDST32_DTPREL_LO12_NC, 0x062) 215ELF_RELOC(R_AARCH64_P32_TLSLD_LDST64_DTPREL_LO12, 0x063) 216ELF_RELOC(R_AARCH64_P32_TLSLD_LDST64_DTPREL_LO12_NC, 0x064) 217ELF_RELOC(R_AARCH64_P32_TLSLD_LDST128_DTPREL_LO12, 0x065) 218ELF_RELOC(R_AARCH64_P32_TLSLD_LDST128_DTPREL_LO12_NC,0x066) 219ELF_RELOC(R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21, 0x067) 220ELF_RELOC(R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC, 0x068) 221ELF_RELOC(R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19, 0x069) 222ELF_RELOC(R_AARCH64_P32_TLSLE_MOVW_TPREL_G1, 0x06a) 223ELF_RELOC(R_AARCH64_P32_TLSLE_MOVW_TPREL_G0, 0x06b) 224ELF_RELOC(R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC, 0x06c) 225ELF_RELOC(R_AARCH64_P32_TLSLE_ADD_TPREL_HI12, 0x06d) 226ELF_RELOC(R_AARCH64_P32_TLSLE_ADD_TPREL_LO12, 0x06e) 227ELF_RELOC(R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC, 0x06f) 228ELF_RELOC(R_AARCH64_P32_TLSLE_LDST8_TPREL_LO12, 0x070) 229ELF_RELOC(R_AARCH64_P32_TLSLE_LDST8_TPREL_LO12_NC, 0x071) 230ELF_RELOC(R_AARCH64_P32_TLSLE_LDST16_TPREL_LO12, 0x072) 231ELF_RELOC(R_AARCH64_P32_TLSLE_LDST16_TPREL_LO12_NC, 0x073) 232ELF_RELOC(R_AARCH64_P32_TLSLE_LDST32_TPREL_LO12, 0x074) 233ELF_RELOC(R_AARCH64_P32_TLSLE_LDST32_TPREL_LO12_NC, 0x075) 234ELF_RELOC(R_AARCH64_P32_TLSLE_LDST64_TPREL_LO12, 0x076) 235ELF_RELOC(R_AARCH64_P32_TLSLE_LDST64_TPREL_LO12_NC, 0x077) 236ELF_RELOC(R_AARCH64_P32_TLSLE_LDST128_TPREL_LO12, 0x078) 237ELF_RELOC(R_AARCH64_P32_TLSLE_LDST128_TPREL_LO12_NC, 0x079) 238ELF_RELOC(R_AARCH64_P32_TLSDESC_LD_PREL19, 0x07a) 239ELF_RELOC(R_AARCH64_P32_TLSDESC_ADR_PREL21, 0x07b) 240ELF_RELOC(R_AARCH64_P32_TLSDESC_ADR_PAGE21, 0x07c) 241ELF_RELOC(R_AARCH64_P32_TLSDESC_LD32_LO12, 0x07d) 242ELF_RELOC(R_AARCH64_P32_TLSDESC_ADD_LO12, 0x07e) 243ELF_RELOC(R_AARCH64_P32_TLSDESC_CALL, 0x07f) 244// Dynamic relocations 245ELF_RELOC(R_AARCH64_P32_COPY, 0x0b4) 246ELF_RELOC(R_AARCH64_P32_GLOB_DAT, 0x0b5) 247ELF_RELOC(R_AARCH64_P32_JUMP_SLOT, 0x0b6) 248ELF_RELOC(R_AARCH64_P32_RELATIVE, 0x0b7) 249ELF_RELOC(R_AARCH64_P32_TLS_DTPREL, 0x0b8) 250ELF_RELOC(R_AARCH64_P32_TLS_DTPMOD, 0x0b9) 251ELF_RELOC(R_AARCH64_P32_TLS_TPREL, 0x0ba) 252ELF_RELOC(R_AARCH64_P32_TLSDESC, 0x0bb) 253ELF_RELOC(R_AARCH64_P32_IRELATIVE, 0x0bc) 254