mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-23 04:35:43 +00:00
[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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251027 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1183c6f920
commit
e2e776f769
@ -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;
|
||||
|
7
test/MC/PowerPC/pr24686.s
Normal file
7
test/MC/PowerPC/pr24686.s
Normal file
@ -0,0 +1,7 @@
|
||||
# RUN: not llvm-mc -triple=powerpc64le-unknown-linux-gnu -filetype=obj %s \
|
||||
# RUN: 2>&1 | FileCheck %s
|
||||
|
||||
_stext:
|
||||
ld %r5, p_end - _stext(%r5)
|
||||
|
||||
# CHECK: LLVM ERROR: Invalid PC-relative half16ds relocation
|
Loading…
x
Reference in New Issue
Block a user