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:
parent
62c90731fb
commit
847f2e1588
@ -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.
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user