1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

[PowerPC] Fix incorrect PC Relative relocations for Big Endian

Fix the incorrect PC Relative relocations for Big Endian for 34 bit offsets.
The offset should be zero for both BE and LE in this situation.

Differential Revision: https://reviews.llvm.org/D81033
This commit is contained in:
Stefan Pintilie 2020-06-08 20:20:42 -05:00
parent 62c90731fb
commit 847f2e1588
2 changed files with 8 additions and 3 deletions

View File

@ -113,7 +113,7 @@ PPCMCCodeEmitter::getImm34Encoding(const MCInst &MI, unsigned OpNo,
return getMachineOpValue(MI, MO, Fixups, STI);
// Add a fixup for the immediate field.
Fixups.push_back(MCFixup::create(IsLittleEndian? 0 : 1, MO.getExpr(),
Fixups.push_back(MCFixup::create(0, MO.getExpr(),
(MCFixupKind)PPC::fixup_ppc_pcrel34));
return 0;
}
@ -217,7 +217,7 @@ PPCMCCodeEmitter::getMemRI34PCRelEncoding(const MCInst &MI, unsigned OpNo,
"VariantKind must be VK_PCREL or VK_PPC_GOT_PCREL");
// Generate the fixup for the relocation.
Fixups.push_back(
MCFixup::create(IsLittleEndian ? 0 : 1, Expr,
MCFixup::create(0, Expr,
static_cast<MCFixupKind>(PPC::fixup_ppc_pcrel34)));
// There is no offset to return so just return 0.
return 0;
@ -249,7 +249,7 @@ PPCMCCodeEmitter::getMemRI34PCRelEncoding(const MCInst &MI, unsigned OpNo,
"VariantKind must be VK_PCREL or VK_PPC_GOT_PCREL");
// Generate the fixup for the relocation.
Fixups.push_back(
MCFixup::create(IsLittleEndian ? 0 : 1, Expr,
MCFixup::create(0, Expr,
static_cast<MCFixupKind>(PPC::fixup_ppc_pcrel34)));
assert(isInt<34>(CE->getValue()) && "Value must fit in 34 bits.");
// Return the offset that should be added to the relocation by the linker.

View File

@ -3,6 +3,11 @@
# RUN: llvm-mc -triple=powerpc64le-unknown-unknown -filetype=obj %s | \
# RUN: llvm-readobj -r | FileCheck %s -check-prefix=READOBJ
# RUN: llvm-mc -triple=powerpc64-unknown-unknown -filetype=obj %s 2>&1 | \
# RUN: FileCheck %s -check-prefix=MC
# RUN: llvm-mc -triple=powerpc64-unknown-unknown -filetype=obj %s | \
# RUN: llvm-readobj -r | FileCheck %s -check-prefix=READOBJ
# This test checks that on Power PC we can correctly convert @pcrel and
# @got@pcrel into R_PPC64_PCREL34 and R_PPC64_GOT_PCREL34.