summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-06-01 15:10:51 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-06-01 15:10:51 +0000
commit7f7caf91673320a1b45ec2e8e8bd8e1ddfc5ab6f (patch)
treeb79b03ec9a52356a6db4813d1b8146d6054be697
parentccb8d1a114584db41ac1a8be58d362c7a7f5c4d9 (diff)
downloadbcm5719-llvm-7f7caf91673320a1b45ec2e8e8bd8e1ddfc5ab6f.tar.gz
bcm5719-llvm-7f7caf91673320a1b45ec2e8e8bd8e1ddfc5ab6f.zip
Fix relocation selection for foo-. on mips.
This handles only the 32 bit case. llvm-svn: 238751
-rw-r--r--llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp2
-rw-r--r--llvm/test/MC/Mips/relocation.s10
2 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
index 1c0a5ebdcff..4df92d067ea 100644
--- a/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
+++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
@@ -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/llvm/test/MC/Mips/relocation.s b/llvm/test/MC/Mips/relocation.s
new file mode 100644
index 00000000000..642b40960a6
--- /dev/null
+++ b/llvm/test/MC/Mips/relocation.s
@@ -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
OpenPOWER on IntegriCloud