diff options
author | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2015-10-22 15:53:44 +0000 |
---|---|---|
committer | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2015-10-22 15:53:44 +0000 |
commit | de1dc9c98f9ce74d38aceb44e00d258370d1bb34 (patch) | |
tree | 6a2d457490b07f89f717fa277fbc8aaf57ccf916 /llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp | |
parent | 4947575666901ce1b3ee6b74b692203da3b11052 (diff) | |
download | bcm5719-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.cpp | 7 |
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; |