mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-26 13:10:42 +00:00
MC: Change MCObjectWriter::RecordRelocation to take an MCFragment (instead of a MCDataFragment). Object files should only need the generic MCFragment features.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99205 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f70f477024
commit
b751418a39
@ -17,7 +17,7 @@
|
|||||||
namespace llvm {
|
namespace llvm {
|
||||||
class MCAsmFixup;
|
class MCAsmFixup;
|
||||||
class MCAssembler;
|
class MCAssembler;
|
||||||
class MCDataFragment;
|
class MCFragment;
|
||||||
class MCValue;
|
class MCValue;
|
||||||
class raw_ostream;
|
class raw_ostream;
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ public:
|
|||||||
/// information about the relocation so that it can be emitted during
|
/// information about the relocation so that it can be emitted during
|
||||||
/// WriteObject().
|
/// WriteObject().
|
||||||
virtual void RecordRelocation(const MCAssembler &Asm,
|
virtual void RecordRelocation(const MCAssembler &Asm,
|
||||||
const MCDataFragment &Fragment,
|
const MCFragment *Fragment,
|
||||||
const MCAsmFixup &Fixup, MCValue Target,
|
const MCAsmFixup &Fixup, MCValue Target,
|
||||||
uint64_t &FixedValue) = 0;
|
uint64_t &FixedValue) = 0;
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
namespace llvm {
|
namespace llvm {
|
||||||
class MCAsmFixup;
|
class MCAsmFixup;
|
||||||
class MCAssembler;
|
class MCAssembler;
|
||||||
class MCDataFragment;
|
class MCFragment;
|
||||||
class MCValue;
|
class MCValue;
|
||||||
class raw_ostream;
|
class raw_ostream;
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ public:
|
|||||||
virtual void ExecutePostLayoutBinding(MCAssembler &Asm);
|
virtual void ExecutePostLayoutBinding(MCAssembler &Asm);
|
||||||
|
|
||||||
virtual void RecordRelocation(const MCAssembler &Asm,
|
virtual void RecordRelocation(const MCAssembler &Asm,
|
||||||
const MCDataFragment &Fragment,
|
const MCFragment *Fragment,
|
||||||
const MCAsmFixup &Fixup, MCValue Target,
|
const MCAsmFixup &Fixup, MCValue Target,
|
||||||
uint64_t &FixedValue);
|
uint64_t &FixedValue);
|
||||||
|
|
||||||
|
@ -573,7 +573,7 @@ void MCAssembler::Finish() {
|
|||||||
// The fixup was unresolved, we need a relocation. Inform the object
|
// The fixup was unresolved, we need a relocation. Inform the object
|
||||||
// writer of the relocation, and give it an opportunity to adjust the
|
// writer of the relocation, and give it an opportunity to adjust the
|
||||||
// fixup value if need be.
|
// fixup value if need be.
|
||||||
Writer->RecordRelocation(*this, *DF, Fixup, Target, FixedValue);
|
Writer->RecordRelocation(*this, DF, Fixup, Target, FixedValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
getBackend().ApplyFixup(Fixup, *DF, FixedValue);
|
getBackend().ApplyFixup(Fixup, *DF, FixedValue);
|
||||||
|
@ -438,7 +438,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RecordX86_64Relocation(const MCAssembler &Asm,
|
void RecordX86_64Relocation(const MCAssembler &Asm,
|
||||||
const MCDataFragment &Fragment,
|
const MCFragment *Fragment,
|
||||||
const MCAsmFixup &Fixup, MCValue Target,
|
const MCAsmFixup &Fixup, MCValue Target,
|
||||||
uint64_t &FixedValue) {
|
uint64_t &FixedValue) {
|
||||||
unsigned IsPCRel = isFixupKindPCRel(Fixup.Kind);
|
unsigned IsPCRel = isFixupKindPCRel(Fixup.Kind);
|
||||||
@ -446,7 +446,7 @@ public:
|
|||||||
unsigned Log2Size = getFixupKindLog2Size(Fixup.Kind);
|
unsigned Log2Size = getFixupKindLog2Size(Fixup.Kind);
|
||||||
|
|
||||||
// See <reloc.h>.
|
// See <reloc.h>.
|
||||||
uint32_t Address = Fragment.getOffset() + Fixup.Offset;
|
uint32_t Address = Fragment->getOffset() + Fixup.Offset;
|
||||||
int64_t Value = 0;
|
int64_t Value = 0;
|
||||||
unsigned Index = 0;
|
unsigned Index = 0;
|
||||||
unsigned IsExtern = 0;
|
unsigned IsExtern = 0;
|
||||||
@ -521,7 +521,7 @@ public:
|
|||||||
(Log2Size << 25) |
|
(Log2Size << 25) |
|
||||||
(IsExtern << 27) |
|
(IsExtern << 27) |
|
||||||
(Type << 28));
|
(Type << 28));
|
||||||
Relocations[Fragment.getParent()].push_back(MRE);
|
Relocations[Fragment->getParent()].push_back(MRE);
|
||||||
|
|
||||||
Index = B_Base->getIndex();
|
Index = B_Base->getIndex();
|
||||||
IsExtern = 1;
|
IsExtern = 1;
|
||||||
@ -622,14 +622,14 @@ public:
|
|||||||
(Log2Size << 25) |
|
(Log2Size << 25) |
|
||||||
(IsExtern << 27) |
|
(IsExtern << 27) |
|
||||||
(Type << 28));
|
(Type << 28));
|
||||||
Relocations[Fragment.getParent()].push_back(MRE);
|
Relocations[Fragment->getParent()].push_back(MRE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RecordScatteredRelocation(const MCAssembler &Asm,
|
void RecordScatteredRelocation(const MCAssembler &Asm,
|
||||||
const MCFragment &Fragment,
|
const MCFragment *Fragment,
|
||||||
const MCAsmFixup &Fixup, MCValue Target,
|
const MCAsmFixup &Fixup, MCValue Target,
|
||||||
uint64_t &FixedValue) {
|
uint64_t &FixedValue) {
|
||||||
uint32_t Address = Fragment.getOffset() + Fixup.Offset;
|
uint32_t Address = Fragment->getOffset() + Fixup.Offset;
|
||||||
unsigned IsPCRel = isFixupKindPCRel(Fixup.Kind);
|
unsigned IsPCRel = isFixupKindPCRel(Fixup.Kind);
|
||||||
unsigned Log2Size = getFixupKindLog2Size(Fixup.Kind);
|
unsigned Log2Size = getFixupKindLog2Size(Fixup.Kind);
|
||||||
unsigned Type = RIT_Vanilla;
|
unsigned Type = RIT_Vanilla;
|
||||||
@ -670,7 +670,7 @@ public:
|
|||||||
(IsPCRel << 30) |
|
(IsPCRel << 30) |
|
||||||
RF_Scattered);
|
RF_Scattered);
|
||||||
MRE.Word1 = Value2;
|
MRE.Word1 = Value2;
|
||||||
Relocations[Fragment.getParent()].push_back(MRE);
|
Relocations[Fragment->getParent()].push_back(MRE);
|
||||||
}
|
}
|
||||||
|
|
||||||
MachRelocationEntry MRE;
|
MachRelocationEntry MRE;
|
||||||
@ -680,10 +680,10 @@ public:
|
|||||||
(IsPCRel << 30) |
|
(IsPCRel << 30) |
|
||||||
RF_Scattered);
|
RF_Scattered);
|
||||||
MRE.Word1 = Value;
|
MRE.Word1 = Value;
|
||||||
Relocations[Fragment.getParent()].push_back(MRE);
|
Relocations[Fragment->getParent()].push_back(MRE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RecordRelocation(const MCAssembler &Asm, const MCDataFragment &Fragment,
|
void RecordRelocation(const MCAssembler &Asm, const MCFragment *Fragment,
|
||||||
const MCAsmFixup &Fixup, MCValue Target,
|
const MCAsmFixup &Fixup, MCValue Target,
|
||||||
uint64_t &FixedValue) {
|
uint64_t &FixedValue) {
|
||||||
if (Is64Bit) {
|
if (Is64Bit) {
|
||||||
@ -707,7 +707,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// See <reloc.h>.
|
// See <reloc.h>.
|
||||||
uint32_t Address = Fragment.getOffset() + Fixup.Offset;
|
uint32_t Address = Fragment->getOffset() + Fixup.Offset;
|
||||||
uint32_t Value = 0;
|
uint32_t Value = 0;
|
||||||
unsigned Index = 0;
|
unsigned Index = 0;
|
||||||
unsigned IsExtern = 0;
|
unsigned IsExtern = 0;
|
||||||
@ -752,7 +752,7 @@ public:
|
|||||||
(Log2Size << 25) |
|
(Log2Size << 25) |
|
||||||
(IsExtern << 27) |
|
(IsExtern << 27) |
|
||||||
(Type << 28));
|
(Type << 28));
|
||||||
Relocations[Fragment.getParent()].push_back(MRE);
|
Relocations[Fragment->getParent()].push_back(MRE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BindIndirectSymbols(MCAssembler &Asm) {
|
void BindIndirectSymbols(MCAssembler &Asm) {
|
||||||
@ -1097,7 +1097,7 @@ void MachObjectWriter::ExecutePostLayoutBinding(MCAssembler &Asm) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MachObjectWriter::RecordRelocation(const MCAssembler &Asm,
|
void MachObjectWriter::RecordRelocation(const MCAssembler &Asm,
|
||||||
const MCDataFragment &Fragment,
|
const MCFragment *Fragment,
|
||||||
const MCAsmFixup &Fixup, MCValue Target,
|
const MCAsmFixup &Fixup, MCValue Target,
|
||||||
uint64_t &FixedValue) {
|
uint64_t &FixedValue) {
|
||||||
((MachObjectWriterImpl*) Impl)->RecordRelocation(Asm, Fragment, Fixup,
|
((MachObjectWriterImpl*) Impl)->RecordRelocation(Asm, Fragment, Fixup,
|
||||||
|
Loading…
Reference in New Issue
Block a user