This commit adds some (but not all) of the x86-64 relocations that are not
authorTom Roeder <tmroeder@google.com>
Wed, 30 Oct 2013 18:47:25 +0000 (18:47 +0000)
committerTom Roeder <tmroeder@google.com>
Wed, 30 Oct 2013 18:47:25 +0000 (18:47 +0000)
currently supported in the ELF object writer, along with a simple test case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193709 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
test/MC/ELF/relocation.s

index 6a4bdeb133bdc247605dc25b578319f1a93bbcb2..3ddd86599eb7bf4be05fdc398f59d189066425f0 100644 (file)
@@ -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;
index ba50c8182fbca5b9b3f7781aede198b794fe9930..682307501d669eef77e765235bbb547286675eaf 100644 (file)
@@ -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:   }