Implement R_386_GOT32.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 18 Oct 2010 20:47:21 +0000 (20:47 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 18 Oct 2010 20:47:21 +0000 (20:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116744 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/ELFObjectWriter.cpp
test/MC/ELF/relocation-386.s

index b5943ec717b87b314a25826f8d84b1ba7b08a886..adaecc0c025b2aefa787de118cf4956776b74226 100644 (file)
@@ -706,6 +706,9 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
         switch (Modifier) {
         default:
           llvm_unreachable("Unimplemented");
+        case MCSymbolRefExpr::VK_GOT:
+          Type = ELF::R_386_GOT32;
+          break;
         case MCSymbolRefExpr::VK_GOTOFF:
           Type = ELF::R_386_GOTOFF;
           break;
index a29db542a8e35b6e26d57ef4aa01829a494bf80d..43a9befcecbbe989ebed6c1200dbfccb97c9d7d7 100644 (file)
 // CHECK-NEXT:  ('r_type', 10)
 // CHECK-NEXT: ),
 
-// Relocation 3 (bar3@GOTOFF) is done symbol 6 (bss)
+// Relocation 3 (bar3@GOTOFF) is done with symbol 6 (bss)
 // CHECK-NEXT:  # Relocation 3
 // CHECK-NEXT: (('r_offset',
 // CHECK-NEXT:  ('r_sym', 6
 // CHECK-NEXT:  ('r_type',
+// CHECK-NEXT: ),
+
+// Relocation 4 (bar2@GOT) is of type R_386_GOT32
+// CHECK-NEXT:  # Relocation 4
+// CHECK-NEXT: (('r_offset',
+// CHECK-NEXT:  ('r_sym',
+// CHECK-NEXT:  ('r_type', 3
 // CHECK-NEXT: ),
 
         .text
@@ -57,6 +64,8 @@ bar2:
        .local  bar3
        .comm   bar3,1,1
 
+        movl   bar2j@GOT(%eax), %eax
+
         .section       .rodata.str1.16,"aMS",@progbits,1
 .Lfoo:
        .asciz   "bool llvm::llvm_start_multithreaded()"