From af713d3ba7330f15675e8de5df08e42e0c2209f3 Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Mon, 11 Aug 2014 10:10:27 +0000 Subject: [PATCH] AArch64: add support for dynamic-loader relocations LLD needs them, and it's good to be able to print them properly when our object dumpers encounter them. Patch by Daniel Stewart. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215352 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/ELF.h | 15 ++++++++++++++- lib/Object/ELF.cpp | 11 +++++++++++ test/tools/llvm-readobj/Inputs/relocs.obj.elf-aarch64 | Bin 2832 -> 3144 bytes test/tools/llvm-readobj/Inputs/relocs.py | 11 +++++++++++ test/tools/llvm-readobj/reloc-types.test | 11 +++++++++++ 5 files changed, 47 insertions(+), 1 deletion(-) diff --git a/include/llvm/Support/ELF.h b/include/llvm/Support/ELF.h index 5b137a41356..a51a0513529 100644 --- a/include/llvm/Support/ELF.h +++ b/include/llvm/Support/ELF.h @@ -655,6 +655,9 @@ enum { R_AARCH64_LDST128_ABS_LO12_NC = 0x12b, + R_AARCH64_GOTREL64 = 0x133, + R_AARCH64_GOTREL32 = 0x134, + R_AARCH64_ADR_GOT_PAGE = 0x137, R_AARCH64_LD64_GOT_LO12_NC = 0x138, @@ -702,7 +705,17 @@ enum { R_AARCH64_TLSDESC_LD64_LO12_NC = 0x233, R_AARCH64_TLSDESC_ADD_LO12_NC = 0x234, - R_AARCH64_TLSDESC_CALL = 0x239 + R_AARCH64_TLSDESC_CALL = 0x239, + + R_AARCH64_COPY = 0x400, + R_AARCH64_GLOB_DAT = 0x401, + R_AARCH64_JUMP_SLOT = 0x402, + R_AARCH64_RELATIVE = 0x403, + R_AARCH64_TLS_DTPREL64 = 0x404, + R_AARCH64_TLS_DTPMOD64 = 0x405, + R_AARCH64_TLS_TPREL64 = 0x406, + R_AARCH64_TLSDESC = 0x407, + R_AARCH64_IRELATIVE = 0x408 }; // ARM Specific e_flags diff --git a/lib/Object/ELF.cpp b/lib/Object/ELF.cpp index d999106ba98..11099bd8bc6 100644 --- a/lib/Object/ELF.cpp +++ b/lib/Object/ELF.cpp @@ -223,6 +223,8 @@ StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type) { LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_LDST32_ABS_LO12_NC); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_LDST64_ABS_LO12_NC); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_LDST128_ABS_LO12_NC); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_GOTREL64); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_GOTREL32); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_ADR_GOT_PAGE); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_LD64_GOT_LO12_NC); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_TLSLD_MOVW_DTPREL_G2); @@ -266,6 +268,15 @@ StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type) { LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_TLSDESC_LD64_LO12_NC); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_TLSDESC_ADD_LO12_NC); LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_TLSDESC_CALL); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_COPY); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_GLOB_DAT); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_JUMP_SLOT); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_RELATIVE); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_TLS_DTPREL64); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_TLS_DTPMOD64); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_TLS_TPREL64); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_TLSDESC); + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_AARCH64_IRELATIVE); default: break; } diff --git a/test/tools/llvm-readobj/Inputs/relocs.obj.elf-aarch64 b/test/tools/llvm-readobj/Inputs/relocs.obj.elf-aarch64 index d39e60c8eec31b435d1b7ecf48a98fb7b2958a43..a1034cb77f55893dfc3ecea8af7b8b5fb3220d74 100644 GIT binary patch literal 3144 zcmeIzEo_rP9LMpeFKf$Q+pT+H-Ns-A1}&wqCX8gFVvvc6iHQjWUAClROUPQ$B_vEB z5Qqu{0)apv5C{?w2n3=6K?nkYm_Q&92m}Jb^Iw0LJ^Q8#ko=S8?ml<-+&wS%@11MQ z*TbQZ=OX02^bT82J+BqO@&T8s1Q)x1KjTC4BW zE9-vEmAl&q?Tt#ka`=Y+t`_sB+bgy*7-cn90`K1_DtCo-)2y#5+>f_Mx^)umrZ=WC z=a+Vkh}y1bVqNE4tJm+aYyRo{REN2?mRtXlH3GqH&G>!cK)c{e;S?|~QPz3`H} z4?ZvNhcCzn;AMFdz9>(@m*j)+W%&?%MLrB)m5;#Ja|q3SO7z;0^g4{IdAQ|S ziyYkYqeUKWdClSiJS{K4Ex%Y?gj>F_xD20`&%v|u5`0#E6`q&dUup1M7v&+i(3(WVS2U6DLKDZV!PLu3uVlq#hs zvVnrOxS@QBY~qp-{|9RAQwab7 diff --git a/test/tools/llvm-readobj/Inputs/relocs.py b/test/tools/llvm-readobj/Inputs/relocs.py index c5f87089612..ffddf3daaed 100644 --- a/test/tools/llvm-readobj/Inputs/relocs.py +++ b/test/tools/llvm-readobj/Inputs/relocs.py @@ -621,6 +621,8 @@ class Relocs_Elf_AArch64(Enum): R_AARCH64_LDST32_ABS_LO12_NC = 0x11d R_AARCH64_LDST64_ABS_LO12_NC = 0x11e R_AARCH64_LDST128_ABS_LO12_NC = 0x12b + R_AARCH64_GOTREL64 = 0x133 + R_AARCH64_GOTREL32 = 0x134 R_AARCH64_ADR_GOT_PAGE = 0x137 R_AARCH64_LD64_GOT_LO12_NC = 0x138 R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 0x20b @@ -664,6 +666,15 @@ class Relocs_Elf_AArch64(Enum): R_AARCH64_TLSDESC_LD64_LO12_NC = 0x233 R_AARCH64_TLSDESC_ADD_LO12_NC = 0x234 R_AARCH64_TLSDESC_CALL = 0x239 + R_AARCH64_COPY = 0x400 + R_AARCH64_GLOB_DAT = 0x401 + R_AARCH64_JUMP_SLOT = 0x402 + R_AARCH64_RELATIVE = 0x403 + R_AARCH64_TLS_DTPREL64 = 0x404 + R_AARCH64_TLS_DTPMOD64 = 0x405 + R_AARCH64_TLS_TPREL64 = 0x406 + R_AARCH64_TLSDESC = 0x407 + R_AARCH64_IRELATIVE = 0x408 class Relocs_Elf_ARM(Enum): R_ARM_NONE = 0x00 diff --git a/test/tools/llvm-readobj/reloc-types.test b/test/tools/llvm-readobj/reloc-types.test index 0c8b54dbc6b..03eda82a6f0 100644 --- a/test/tools/llvm-readobj/reloc-types.test +++ b/test/tools/llvm-readobj/reloc-types.test @@ -179,6 +179,8 @@ ELF-AARCH64: Type: R_AARCH64_LDST16_ABS_LO12_NC (284) ELF-AARCH64: Type: R_AARCH64_LDST32_ABS_LO12_NC (285) ELF-AARCH64: Type: R_AARCH64_LDST64_ABS_LO12_NC (286) ELF-AARCH64: Type: R_AARCH64_LDST128_ABS_LO12_NC (299) +ELF-AARCH64: Type: R_AARCH64_GOTREL64 (307) +ELF-AARCH64: Type: R_AARCH64_GOTREL32 (308) ELF-AARCH64: Type: R_AARCH64_ADR_GOT_PAGE (311) ELF-AARCH64: Type: R_AARCH64_LD64_GOT_LO12_NC (312) ELF-AARCH64: Type: R_AARCH64_TLSLD_MOVW_DTPREL_G2 (523) @@ -222,6 +224,15 @@ ELF-AARCH64: Type: R_AARCH64_TLSDESC_ADR_PAGE (562) ELF-AARCH64: Type: R_AARCH64_TLSDESC_LD64_LO12_NC (563) ELF-AARCH64: Type: R_AARCH64_TLSDESC_ADD_LO12_NC (564) ELF-AARCH64: Type: R_AARCH64_TLSDESC_CALL (569) +ELF-AARCH64: Type: R_AARCH64_COPY (1024) +ELF-AARCH64: Type: R_AARCH64_GLOB_DAT (1025) +ELF-AARCH64: Type: R_AARCH64_JUMP_SLOT (1026) +ELF-AARCH64: Type: R_AARCH64_RELATIVE (1027) +ELF-AARCH64: Type: R_AARCH64_TLS_DTPREL64 (1028) +ELF-AARCH64: Type: R_AARCH64_TLS_DTPMOD64 (1029) +ELF-AARCH64: Type: R_AARCH64_TLS_TPREL64 (1030) +ELF-AARCH64: Type: R_AARCH64_TLSDESC (1031) +ELF-AARCH64: Type: R_AARCH64_IRELATIVE (1032) ELF-ARM: Type: R_ARM_NONE (0) ELF-ARM: Type: R_ARM_PC24 (1) -- 2.11.0