summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Maksimovic <stefan.maksimovic@mips.com>2018-01-11 10:07:47 +0000
committerStefan Maksimovic <stefan.maksimovic@mips.com>2018-01-11 10:07:47 +0000
commit5481c2176e12204ac9911cf9daca10d760b759be (patch)
treec5b8f062368025776de9a6e572cd919decf41f1c
parentba5fd775adf5b60dab9ae87643d367a18abd93fd (diff)
downloadbcm5719-llvm-5481c2176e12204ac9911cf9daca10d760b759be.tar.gz
bcm5719-llvm-5481c2176e12204ac9911cf9daca10d760b759be.zip
[Mips] Handle one byte unsupported relocations
Fail gracefully instead of crashing upon encountering this type of relocation. Differential revision: https://reviews.llvm.org/D41857 llvm-svn: 322266
-rw-r--r--llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp2
-rw-r--r--llvm/test/MC/Mips/unsupported-relocation.s13
2 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
index 6d2f098a6b3..3c67743947c 100644
--- a/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
+++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
@@ -225,6 +225,8 @@ unsigned MipsELFObjectWriter::getRelocType(MCContext &Ctx,
switch (Kind) {
case Mips::fixup_Mips_NONE:
return ELF::R_MIPS_NONE;
+ case FK_Data_1:
+ report_fatal_error("MIPS does not support one byte relocations");
case Mips::fixup_Mips_16:
case FK_Data_2:
return IsPCRel ? ELF::R_MIPS_PC16 : ELF::R_MIPS_16;
diff --git a/llvm/test/MC/Mips/unsupported-relocation.s b/llvm/test/MC/Mips/unsupported-relocation.s
new file mode 100644
index 00000000000..151a559671f
--- /dev/null
+++ b/llvm/test/MC/Mips/unsupported-relocation.s
@@ -0,0 +1,13 @@
+# RUN: not llvm-mc -triple mips-unknown-linux -filetype=obj %s 2>%t
+# RUN: FileCheck %s < %t
+
+# Check that we emit an error for unsupported relocations instead of crashing.
+
+ .globl x
+
+ .data
+foo:
+ .byte x
+ .byte x+1
+
+# CHECK: LLVM ERROR: MIPS does not support one byte relocations
OpenPOWER on IntegriCloud