diff options
author | Tom Roeder <tmroeder@google.com> | 2013-10-30 18:47:25 +0000 |
---|---|---|
committer | Tom Roeder <tmroeder@google.com> | 2013-10-30 18:47:25 +0000 |
commit | 04d88fba3ee95e5dc44a25b2e83d401e479f2c07 (patch) | |
tree | d14a83176a1498614d76879ffe18c7f69590efbb | |
parent | 19c8e78b86dc7f6b78347eca2a749af9269af670 (diff) | |
download | bcm5719-llvm-04d88fba3ee95e5dc44a25b2e83d401e479f2c07.tar.gz bcm5719-llvm-04d88fba3ee95e5dc44a25b2e83d401e479f2c07.zip |
This commit adds some (but not all) of the x86-64 relocations that are not
currently supported in the ELF object writer, along with a simple test case.
llvm-svn: 193709
-rw-r--r-- | llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp | 6 | ||||
-rw-r--r-- | llvm/test/MC/ELF/relocation.s | 16 |
2 files changed, 16 insertions, 6 deletions
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp index 6a4bdeb133b..3ddd86599eb 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp @@ -108,6 +108,12 @@ unsigned X86ELFObjectWriter::GetRelocType(const MCValue &Target, case MCSymbolRefExpr::VK_None: Type = ELF::R_X86_64_64; break; + case MCSymbolRefExpr::VK_GOT: + Type = ELF::R_X86_64_GOT64; + break; + case MCSymbolRefExpr::VK_GOTOFF: + Type = ELF::R_X86_64_GOTOFF64; + break; case MCSymbolRefExpr::VK_TPOFF: Type = ELF::R_X86_64_TPOFF64; break; diff --git a/llvm/test/MC/ELF/relocation.s b/llvm/test/MC/ELF/relocation.s index ba50c8182fb..682307501d6 100644 --- a/llvm/test/MC/ELF/relocation.s +++ b/llvm/test/MC/ELF/relocation.s @@ -14,6 +14,8 @@ bar: leaq foo@TPOFF(%rax), %rax # R_X86_64_TPOFF32 leaq foo@TLSLD(%rip), %rdi # R_X86_64_TLSLD leaq foo@dtpoff(%rax), %rcx # R_X86_64_DTPOFF32 + movabs foo@GOT, %rax # R_X86_64_GOT64 + movabs foo@GOTOFF, %rax # R_X86_64_GOTOFF64 pushq $bar movq foo(%rip), %rdx leaq foo-bar(%r14),%r14 @@ -35,12 +37,14 @@ bar: // CHECK-NEXT: 0x3B R_X86_64_TPOFF32 foo 0x0 // CHECK-NEXT: 0x42 R_X86_64_TLSLD foo 0xFFFFFFFFFFFFFFFC // CHECK-NEXT: 0x49 R_X86_64_DTPOFF32 foo 0x0 -// CHECK-NEXT: 0x4E R_X86_64_32S .text 0x0 -// CHECK-NEXT: 0x55 R_X86_64_PC32 foo 0xFFFFFFFFFFFFFFFC -// CHECK-NEXT: 0x5C R_X86_64_PC32 foo 0x5C -// CHECK-NEXT: 0x63 R_X86_64_32S .text 0x0 -// CHECK-NEXT: 0x67 R_X86_64_DTPOFF64 foo 0x0 -// CHECK-NEXT: 0x71 R_X86_64_TPOFF64 baz 0x0 +// CHECK-NEXT: 0x4F R_X86_64_GOT64 foo 0x0 +// CHECK-NEXT: 0x59 R_X86_64_GOTOFF64 foo 0x0 +// CHECK-NEXT: 0x62 R_X86_64_32S .text 0x0 +// CHECK-NEXT: 0x69 R_X86_64_PC32 foo 0xFFFFFFFFFFFFFFFC +// CHECK-NEXT: 0x70 R_X86_64_PC32 foo 0x70 +// CHECK-NEXT: 0x77 R_X86_64_32S .text 0x0 +// CHECK-NEXT: 0x7B R_X86_64_DTPOFF64 foo 0x0 +// CHECK-NEXT: 0x85 R_X86_64_TPOFF64 baz 0x0 // CHECK-NEXT: ] // CHECK-NEXT: } |