Fix relocation selection for foo-. on mips.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 1 Jun 2015 15:10:51 +0000 (15:10 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 1 Jun 2015 15:10:51 +0000 (15:10 +0000)
This handles only the 32 bit case.

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

lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
test/MC/Mips/relocation.s [new file with mode: 0644]

index 1c0a5eb..4df92d0 100644 (file)
@@ -70,7 +70,7 @@ unsigned MipsELFObjectWriter::GetRelocType(const MCValue &Target,
   switch (Kind) {
   case Mips::fixup_Mips_32:
   case FK_Data_4:
-    return ELF::R_MIPS_32;
+    return IsPCRel ? ELF::R_MIPS_PC32 : ELF::R_MIPS_32;
   case Mips::fixup_Mips_64:
   case FK_Data_8:
     return ELF::R_MIPS_64;
diff --git a/test/MC/Mips/relocation.s b/test/MC/Mips/relocation.s
new file mode 100644 (file)
index 0000000..642b409
--- /dev/null
@@ -0,0 +1,10 @@
+// RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux < %s | llvm-readobj -r | FileCheck  %s
+
+// Test that we produce the correct relocation.
+// FIXME: move more relocation only tests here.
+
+        .long foo
+// CHECK: R_MIPS_32 foo
+
+        .long foo-.
+// CHECK: R_MIPS_PC32 foo