aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/MC/ELFObjectWriter.cpp3
-rw-r--r--test/MC/ELF/relocation-386.s11
2 files changed, 13 insertions, 1 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp
index b5943ec..adaecc0 100644
--- a/lib/MC/ELFObjectWriter.cpp
+++ b/lib/MC/ELFObjectWriter.cpp
@@ -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;
diff --git a/test/MC/ELF/relocation-386.s b/test/MC/ELF/relocation-386.s
index a29db54..43a9bef 100644
--- a/test/MC/ELF/relocation-386.s
+++ b/test/MC/ELF/relocation-386.s
@@ -36,13 +36,20 @@
// 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
bar:
leal .Lfoo@GOTOFF(%ebx), %eax
@@ -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()"