summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2015-10-22 15:53:44 +0000
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>2015-10-22 15:53:44 +0000
commitde1dc9c98f9ce74d38aceb44e00d258370d1bb34 (patch)
tree6a2d457490b07f89f717fa277fbc8aaf57ccf916 /llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
parent4947575666901ce1b3ee6b74b692203da3b11052 (diff)
downloadbcm5719-llvm-de1dc9c98f9ce74d38aceb44e00d258370d1bb34.tar.gz
bcm5719-llvm-de1dc9c98f9ce74d38aceb44e00d258370d1bb34.zip
[PPC] Fix PR24686 by failing assembly for an invalid relocation
PR24686 identifies a problem where a relocation expression is invalid when not all of the symbols in the expression can be locally resolved. This causes the compiler to request a PC-relative half16ds relocation, which is nonsensical for PowerPC. This patch recognizes this situation and ensures we fail the assembly cleanly. Test case provided by Anton Blanchard. llvm-svn: 251027
Diffstat (limited to 'llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
index ebcea9af279..75ba12b5a83 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
@@ -113,6 +113,13 @@ unsigned PPCELFObjectWriter::GetRelocType(const MCValue &Target,
break;
}
break;
+ case PPC::fixup_ppc_half16ds: {
+ raw_ostream &OS = *(new raw_fd_ostream(2, false));
+ Target.print(OS);
+ OS << "\n";
+ report_fatal_error("Invalid PC-relative half16ds relocation");
+ break;
+ }
case FK_Data_4:
case FK_PCRel_4:
Type = ELF::R_PPC_REL32;
OpenPOWER on IntegriCloud