mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-04 03:06:28 +00:00
[MC] Thread unique_ptr<MCObjectWriter> through the create.*ObjectWriter
functions. This makes the ownership of the resulting MCObjectWriter clear, and allows us to remove one instance of MCObjectStreamer's bizarre "holding ownership via someone else's reference" trick. llvm-svn: 315327
This commit is contained in:
parent
98c6f7b08f
commit
9dd3fd5480
@ -46,7 +46,8 @@ public:
|
||||
|
||||
/// Create a new MCObjectWriter instance for use by the assembler backend to
|
||||
/// emit the final object file.
|
||||
virtual MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const = 0;
|
||||
virtual std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const = 0;
|
||||
|
||||
/// \name Target Fixup Interfaces
|
||||
/// @{
|
||||
|
@ -137,7 +137,7 @@ public:
|
||||
/// \param MOTW - The target specific ELF writer subclass.
|
||||
/// \param OS - The stream to write to.
|
||||
/// \returns The constructed object writer.
|
||||
MCObjectWriter *
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
|
||||
raw_pwrite_stream &OS, bool IsLittleEndian);
|
||||
|
||||
|
@ -270,7 +270,7 @@ public:
|
||||
/// \param MOTW - The target specific Mach-O writer subclass.
|
||||
/// \param OS - The stream to write to.
|
||||
/// \returns The constructed object writer.
|
||||
MCObjectWriter *
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createMachObjectWriter(std::unique_ptr<MCMachObjectTargetWriter> MOTW,
|
||||
raw_pwrite_stream &OS, bool IsLittleEndian);
|
||||
|
||||
|
@ -34,6 +34,7 @@ class raw_pwrite_stream;
|
||||
/// to that file format or custom semantics expected by the object writer
|
||||
/// implementation.
|
||||
class MCObjectStreamer : public MCStreamer {
|
||||
std::unique_ptr<MCObjectWriter> ObjectWriter;
|
||||
std::unique_ptr<MCAssembler> Assembler;
|
||||
MCSection::iterator CurInsertionPoint;
|
||||
bool EmitEHFrame;
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
/// \param MOTW - The target specific Wasm writer subclass.
|
||||
/// \param OS - The stream to write to.
|
||||
/// \returns The constructed object writer.
|
||||
MCObjectWriter *
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createWasmObjectWriter(std::unique_ptr<MCWasmObjectTargetWriter> MOTW,
|
||||
raw_pwrite_stream &OS);
|
||||
|
||||
|
@ -44,7 +44,7 @@ class raw_pwrite_stream;
|
||||
/// \param MOTW - The target specific WinCOFF writer subclass.
|
||||
/// \param OS - The stream to write to.
|
||||
/// \returns The constructed object writer.
|
||||
MCObjectWriter *
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createWinCOFFObjectWriter(std::unique_ptr<MCWinCOFFObjectTargetWriter> MOTW,
|
||||
raw_pwrite_stream &OS);
|
||||
} // end namespace llvm
|
||||
|
@ -1387,8 +1387,9 @@ bool ELFObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
|
||||
InSet, IsPCRel);
|
||||
}
|
||||
|
||||
MCObjectWriter *
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
|
||||
raw_pwrite_stream &OS, bool IsLittleEndian) {
|
||||
return new ELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
|
||||
return llvm::make_unique<ELFObjectWriter>(std::move(MOTW), OS,
|
||||
IsLittleEndian);
|
||||
}
|
||||
|
@ -62,12 +62,13 @@ void MCELFStreamer::mergeFragment(MCDataFragment *DF,
|
||||
if (RequiredBundlePadding > 0) {
|
||||
SmallString<256> Code;
|
||||
raw_svector_ostream VecOS(Code);
|
||||
MCObjectWriter *OW = Assembler.getBackend().createObjectWriter(VecOS);
|
||||
{
|
||||
auto OW = Assembler.getBackend().createObjectWriter(VecOS);
|
||||
|
||||
EF->setBundlePadding(static_cast<uint8_t>(RequiredBundlePadding));
|
||||
EF->setBundlePadding(static_cast<uint8_t>(RequiredBundlePadding));
|
||||
|
||||
Assembler.writeFragmentPadding(*EF, FSize, OW);
|
||||
delete OW;
|
||||
Assembler.writeFragmentPadding(*EF, FSize, OW.get());
|
||||
}
|
||||
|
||||
DF->getContents().append(Code.begin(), Code.end());
|
||||
}
|
||||
|
@ -28,15 +28,14 @@ using namespace llvm;
|
||||
MCObjectStreamer::MCObjectStreamer(MCContext &Context, MCAsmBackend &TAB,
|
||||
raw_pwrite_stream &OS,
|
||||
MCCodeEmitter *Emitter_)
|
||||
: MCStreamer(Context),
|
||||
: MCStreamer(Context), ObjectWriter(TAB.createObjectWriter(OS)),
|
||||
Assembler(llvm::make_unique<MCAssembler>(Context, TAB, *Emitter_,
|
||||
*TAB.createObjectWriter(OS))),
|
||||
*ObjectWriter)),
|
||||
EmitEHFrame(true), EmitDebugFrame(false) {}
|
||||
|
||||
MCObjectStreamer::~MCObjectStreamer() {
|
||||
delete &Assembler->getBackend();
|
||||
delete &Assembler->getEmitter();
|
||||
delete &Assembler->getWriter();
|
||||
}
|
||||
|
||||
void MCObjectStreamer::flushPendingLabels(MCFragment *F, uint64_t FOffset) {
|
||||
|
@ -994,8 +994,9 @@ void MachObjectWriter::writeObject(MCAssembler &Asm,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createMachObjectWriter(std::unique_ptr<MCMachObjectTargetWriter> MOTW,
|
||||
raw_pwrite_stream &OS, bool IsLittleEndian) {
|
||||
return new MachObjectWriter(std::move(MOTW), OS, IsLittleEndian);
|
||||
return llvm::make_unique<MachObjectWriter>(std::move(MOTW), OS,
|
||||
IsLittleEndian);
|
||||
}
|
||||
|
@ -1317,8 +1317,11 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
|
||||
// TODO: Translate debug sections to the output.
|
||||
}
|
||||
|
||||
MCObjectWriter *
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createWasmObjectWriter(std::unique_ptr<MCWasmObjectTargetWriter> MOTW,
|
||||
raw_pwrite_stream &OS) {
|
||||
return new WasmObjectWriter(std::move(MOTW), OS);
|
||||
// FIXME: Can't use make_unique<WasmObjectWriter>(...) as WasmObjectWriter's
|
||||
// destructor is private. Is that necessary?
|
||||
return std::unique_ptr<MCObjectWriter>(
|
||||
new WasmObjectWriter(std::move(MOTW), OS));
|
||||
}
|
||||
|
@ -1085,7 +1085,7 @@ void MCWinCOFFObjectTargetWriter::anchor() {}
|
||||
//------------------------------------------------------------------------------
|
||||
// WinCOFFObjectWriter factory function
|
||||
|
||||
MCObjectWriter *llvm::createWinCOFFObjectWriter(
|
||||
std::unique_ptr<MCObjectWriter> llvm::createWinCOFFObjectWriter(
|
||||
std::unique_ptr<MCWinCOFFObjectTargetWriter> MOTW, raw_pwrite_stream &OS) {
|
||||
return new WinCOFFObjectWriter(std::move(MOTW), OS);
|
||||
return llvm::make_unique<WinCOFFObjectWriter>(std::move(MOTW), OS);
|
||||
}
|
||||
|
@ -432,7 +432,8 @@ public:
|
||||
const MCRegisterInfo &MRI)
|
||||
: AArch64AsmBackend(T, TT, /*IsLittleEndian*/ true), MRI(MRI) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createAArch64MachObjectWriter(OS, MachO::CPU_TYPE_ARM64,
|
||||
MachO::CPU_SUBTYPE_ARM64_ALL);
|
||||
}
|
||||
@ -582,7 +583,8 @@ public:
|
||||
: AArch64AsmBackend(T, TT, IsLittleEndian), OSABI(OSABI),
|
||||
IsILP32(IsILP32) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createAArch64ELFObjectWriter(OS, OSABI, IsLittleEndian, IsILP32);
|
||||
}
|
||||
};
|
||||
@ -595,7 +597,8 @@ public:
|
||||
COFFAArch64AsmBackend(const Target &T, const Triple &TheTriple)
|
||||
: AArch64AsmBackend(T, TheTriple, /*IsLittleEndian*/ true) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createAArch64WinCOFFObjectWriter(OS);
|
||||
}
|
||||
};
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include <cassert>
|
||||
@ -428,10 +429,9 @@ unsigned AArch64ELFObjectWriter::getRelocType(MCContext &Ctx,
|
||||
llvm_unreachable("Unimplemented fixup -> relocation");
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createAArch64ELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI,
|
||||
bool IsLittleEndian,
|
||||
bool IsILP32) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createAArch64ELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
|
||||
bool IsLittleEndian, bool IsILP32) {
|
||||
auto MOTW =
|
||||
llvm::make_unique<AArch64ELFObjectWriter>(OSABI, IsLittleEndian, IsILP32);
|
||||
return createELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace llvm {
|
||||
class formatted_raw_ostream;
|
||||
class MCAsmBackend;
|
||||
@ -51,16 +53,16 @@ MCAsmBackend *createAArch64beAsmBackend(const Target &T,
|
||||
const Triple &TT, StringRef CPU,
|
||||
const MCTargetOptions &Options);
|
||||
|
||||
MCObjectWriter *createAArch64ELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI,
|
||||
bool IsLittleEndian,
|
||||
bool IsILP32);
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createAArch64ELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
|
||||
bool IsLittleEndian, bool IsILP32);
|
||||
|
||||
MCObjectWriter *createAArch64MachObjectWriter(raw_pwrite_stream &OS,
|
||||
uint32_t CPUType,
|
||||
uint32_t CPUSubtype);
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createAArch64MachObjectWriter(raw_pwrite_stream &OS, uint32_t CPUType,
|
||||
uint32_t CPUSubtype);
|
||||
|
||||
MCObjectWriter *createAArch64WinCOFFObjectWriter(raw_pwrite_stream &OS);
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createAArch64WinCOFFObjectWriter(raw_pwrite_stream &OS);
|
||||
|
||||
MCTargetStreamer *createAArch64AsmTargetStreamer(MCStreamer &S,
|
||||
formatted_raw_ostream &OS,
|
||||
|
@ -430,9 +430,9 @@ void AArch64MachObjectWriter::recordRelocation(
|
||||
Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE);
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createAArch64MachObjectWriter(raw_pwrite_stream &OS,
|
||||
uint32_t CPUType,
|
||||
uint32_t CPUSubtype) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createAArch64MachObjectWriter(raw_pwrite_stream &OS, uint32_t CPUType,
|
||||
uint32_t CPUSubtype) {
|
||||
return createMachObjectWriter(
|
||||
llvm::make_unique<AArch64MachObjectWriter>(CPUType, CPUSubtype), OS,
|
||||
/*IsLittleEndian=*/true);
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCFixupKindInfo.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/MC/MCWinCOFFObjectWriter.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
@ -96,7 +97,8 @@ bool AArch64WinCOFFObjectWriter::recordRelocation(const MCFixup &Fixup) const {
|
||||
|
||||
namespace llvm {
|
||||
|
||||
MCObjectWriter *createAArch64WinCOFFObjectWriter(raw_pwrite_stream &OS) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createAArch64WinCOFFObjectWriter(raw_pwrite_stream &OS) {
|
||||
auto MOTW = llvm::make_unique<AArch64WinCOFFObjectWriter>();
|
||||
return createWinCOFFObjectWriter(std::move(MOTW), OS);
|
||||
}
|
||||
|
@ -189,7 +189,8 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createAMDGPUELFObjectWriter(Is64Bit, OSABI, HasRelocationAddend, OS);
|
||||
}
|
||||
};
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
@ -81,10 +82,10 @@ unsigned AMDGPUELFObjectWriter::getRelocType(MCContext &Ctx,
|
||||
llvm_unreachable("unhandled relocation type");
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createAMDGPUELFObjectWriter(bool Is64Bit,
|
||||
uint8_t OSABI,
|
||||
bool HasRelocationAddend,
|
||||
raw_pwrite_stream &OS) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createAMDGPUELFObjectWriter(bool Is64Bit, uint8_t OSABI,
|
||||
bool HasRelocationAddend,
|
||||
raw_pwrite_stream &OS) {
|
||||
auto MOTW = llvm::make_unique<AMDGPUELFObjectWriter>(Is64Bit, OSABI,
|
||||
HasRelocationAddend);
|
||||
return createELFObjectWriter(std::move(MOTW), OS, true);
|
||||
|
@ -18,6 +18,8 @@
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace llvm {
|
||||
class MCAsmBackend;
|
||||
class MCCodeEmitter;
|
||||
@ -47,10 +49,9 @@ MCAsmBackend *createAMDGPUAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||
const Triple &TT, StringRef CPU,
|
||||
const MCTargetOptions &Options);
|
||||
|
||||
MCObjectWriter *createAMDGPUELFObjectWriter(bool Is64Bit,
|
||||
uint8_t OSABI,
|
||||
bool HasRelocationAddend,
|
||||
raw_pwrite_stream &OS);
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createAMDGPUELFObjectWriter(bool Is64Bit, uint8_t OSABI,
|
||||
bool HasRelocationAddend, raw_pwrite_stream &OS);
|
||||
} // End llvm namespace
|
||||
|
||||
#define GET_REGINFO_ENUM
|
||||
|
@ -23,7 +23,8 @@ public:
|
||||
: ARMAsmBackend(T, TT, /* IsLittleEndian */ true), MRI(MRI), Subtype(st) {
|
||||
}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createARMMachObjectWriter(OS, /*Is64Bit=*/false, MachO::CPU_TYPE_ARM,
|
||||
Subtype);
|
||||
}
|
||||
|
@ -22,7 +22,8 @@ public:
|
||||
bool IsLittle)
|
||||
: ARMAsmBackend(T, TT, IsLittle), OSABI(OSABI) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createARMELFObjectWriter(OS, OSABI, isLittle());
|
||||
}
|
||||
};
|
||||
|
@ -18,7 +18,8 @@ class ARMAsmBackendWinCOFF : public ARMAsmBackend {
|
||||
public:
|
||||
ARMAsmBackendWinCOFF(const Target &T, const Triple &TheTriple)
|
||||
: ARMAsmBackend(T, TheTriple, true) {}
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createARMWinCOFFObjectWriter(OS, /*Is64Bit=*/false);
|
||||
}
|
||||
};
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
@ -235,9 +236,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createARMELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI,
|
||||
bool IsLittleEndian) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createARMELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
|
||||
bool IsLittleEndian) {
|
||||
return createELFObjectWriter(llvm::make_unique<ARMELFObjectWriter>(OSABI), OS,
|
||||
IsLittleEndian);
|
||||
}
|
||||
|
@ -98,17 +98,19 @@ MCStreamer *createARMWinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB,
|
||||
bool IncrementalLinkerCompatible);
|
||||
|
||||
/// Construct an ELF Mach-O object writer.
|
||||
MCObjectWriter *createARMELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
|
||||
bool IsLittleEndian);
|
||||
std::unique_ptr<MCObjectWriter> createARMELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI,
|
||||
bool IsLittleEndian);
|
||||
|
||||
/// Construct an ARM Mach-O object writer.
|
||||
MCObjectWriter *createARMMachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
uint32_t CPUType,
|
||||
uint32_t CPUSubtype);
|
||||
std::unique_ptr<MCObjectWriter> createARMMachObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit,
|
||||
uint32_t CPUType,
|
||||
uint32_t CPUSubtype);
|
||||
|
||||
/// Construct an ARM PE/COFF object writer.
|
||||
MCObjectWriter *createARMWinCOFFObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit);
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createARMWinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit);
|
||||
|
||||
/// Construct ARM Mach-O relocation info.
|
||||
MCRelocationInfo *createARMMachORelocationInfo(MCContext &Ctx);
|
||||
|
@ -484,9 +484,9 @@ void ARMMachObjectWriter::recordRelocation(MachObjectWriter *Writer,
|
||||
Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE);
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createARMMachObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit, uint32_t CPUType,
|
||||
uint32_t CPUSubtype) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createARMMachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
uint32_t CPUType, uint32_t CPUSubtype) {
|
||||
return createMachObjectWriter(
|
||||
llvm::make_unique<ARMMachObjectWriter>(Is64Bit, CPUType, CPUSubtype), OS,
|
||||
/*IsLittleEndian=*/true);
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCFixupKindInfo.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/MC/MCWinCOFFObjectWriter.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
@ -90,8 +91,8 @@ bool ARMWinCOFFObjectWriter::recordRelocation(const MCFixup &Fixup) const {
|
||||
|
||||
namespace llvm {
|
||||
|
||||
MCObjectWriter *createARMWinCOFFObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createARMWinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit) {
|
||||
auto MOTW = llvm::make_unique<ARMWinCOFFObjectWriter>(Is64Bit);
|
||||
return createWinCOFFObjectWriter(std::move(MOTW), OS);
|
||||
}
|
||||
|
@ -31,7 +31,8 @@ public:
|
||||
const MCValue &Target, MutableArrayRef<char> Data,
|
||||
uint64_t Value, bool IsResolved) const override;
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override;
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override;
|
||||
|
||||
// No instruction requires relaxation
|
||||
bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value,
|
||||
@ -88,7 +89,8 @@ void BPFAsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *BPFAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
BPFAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {
|
||||
return createBPFELFObjectWriter(OS, 0, IsLittleEndian);
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "llvm/BinaryFormat/ELF.h"
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include <cstdint>
|
||||
|
||||
@ -52,8 +53,9 @@ unsigned BPFELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createBPFELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI, bool IsLittleEndian) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createBPFELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
|
||||
bool IsLittleEndian) {
|
||||
return createELFObjectWriter(llvm::make_unique<BPFELFObjectWriter>(OSABI), OS,
|
||||
IsLittleEndian);
|
||||
}
|
||||
|
@ -17,6 +17,8 @@
|
||||
#include "llvm/Config/config.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace llvm {
|
||||
class MCAsmBackend;
|
||||
class MCCodeEmitter;
|
||||
@ -50,8 +52,9 @@ MCAsmBackend *createBPFbeAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||
const Triple &TT, StringRef CPU,
|
||||
const MCTargetOptions &Options);
|
||||
|
||||
MCObjectWriter *createBPFELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI, bool IsLittleEndian);
|
||||
std::unique_ptr<MCObjectWriter> createBPFELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI,
|
||||
bool IsLittleEndian);
|
||||
}
|
||||
|
||||
// Defines symbolic names for BPF registers. This defines a mapping from
|
||||
|
@ -65,7 +65,8 @@ public:
|
||||
OSABI(OSABI), CPU(CPU), MCII(T.createMCInstrInfo()),
|
||||
RelaxTarget(new MCInst *), Extender(nullptr) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createHexagonELFObjectWriter(OS, OSABI, CPU);
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "MCTargetDesc/HexagonFixupKinds.h"
|
||||
#include "llvm/MC/MCAssembler.h"
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
@ -297,9 +298,9 @@ unsigned HexagonELFObjectWriter::getRelocType(MCContext &Ctx,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createHexagonELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI,
|
||||
StringRef CPU) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createHexagonELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
|
||||
StringRef CPU) {
|
||||
auto MOTW = llvm::make_unique<HexagonELFObjectWriter>(OSABI, CPU);
|
||||
return createELFObjectWriter(std::move(MOTW), OS, /*IsLittleEndian*/ true);
|
||||
}
|
||||
|
@ -63,8 +63,9 @@ MCAsmBackend *createHexagonAsmBackend(const Target &T,
|
||||
const Triple &TT, StringRef CPU,
|
||||
const MCTargetOptions &Options);
|
||||
|
||||
MCObjectWriter *createHexagonELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI, StringRef CPU);
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createHexagonELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
|
||||
StringRef CPU);
|
||||
|
||||
unsigned HexagonGetLastSlot();
|
||||
|
||||
|
@ -53,7 +53,8 @@ public:
|
||||
const MCValue &Target, MutableArrayRef<char> Data,
|
||||
uint64_t Value, bool IsResolved) const override;
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override;
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override;
|
||||
|
||||
// No instruction requires relaxation
|
||||
bool fixupNeedsRelaxation(const MCFixup & /*Fixup*/, uint64_t /*Value*/,
|
||||
@ -126,7 +127,7 @@ void LanaiAsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
LanaiAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {
|
||||
return createLanaiELFObjectWriter(OS,
|
||||
MCELFObjectTargetWriter::getOSABI(OSType));
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "MCTargetDesc/LanaiFixupKinds.h"
|
||||
#include "llvm/BinaryFormat/ELF.h"
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
||||
using namespace llvm;
|
||||
@ -86,8 +87,8 @@ bool LanaiELFObjectWriter::needsRelocateWithSymbol(const MCSymbol & /*SD*/,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createLanaiELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createLanaiELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI) {
|
||||
return createELFObjectWriter(llvm::make_unique<LanaiELFObjectWriter>(OSABI),
|
||||
OS, /*IsLittleEndian=*/false);
|
||||
}
|
||||
|
@ -42,8 +42,8 @@ MCAsmBackend *createLanaiAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||
const Triple &TheTriple, StringRef CPU,
|
||||
const MCTargetOptions &Options);
|
||||
|
||||
MCObjectWriter *createLanaiELFObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI);
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createLanaiELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI);
|
||||
} // namespace llvm
|
||||
|
||||
// Defines symbolic names for Lanai registers. This defines a mapping from
|
||||
|
@ -210,7 +210,7 @@ static unsigned adjustFixupValue(const MCFixup &Fixup, uint64_t Value,
|
||||
return Value;
|
||||
}
|
||||
|
||||
MCObjectWriter *
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
MipsAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {
|
||||
return createMipsELFObjectWriter(OS, TheTriple, IsN32);
|
||||
}
|
||||
|
@ -37,7 +37,8 @@ public:
|
||||
StringRef CPU, bool N32)
|
||||
: TheTriple(TT), IsLittle(TT.isLittleEndian()), IsN32(N32) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override;
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override;
|
||||
|
||||
void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
|
||||
const MCValue &Target, MutableArrayRef<char> Data,
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "llvm/BinaryFormat/ELF.h"
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCSymbolELF.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
@ -655,8 +656,9 @@ bool MipsELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createMipsELFObjectWriter(raw_pwrite_stream &OS,
|
||||
const Triple &TT, bool IsN32) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createMipsELFObjectWriter(raw_pwrite_stream &OS, const Triple &TT,
|
||||
bool IsN32) {
|
||||
uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS());
|
||||
bool IsN64 = TT.isArch64Bit() && !IsN32;
|
||||
bool HasRelocationAddend = TT.isArch64Bit();
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace llvm {
|
||||
class MCAsmBackend;
|
||||
class MCCodeEmitter;
|
||||
@ -47,8 +49,8 @@ MCAsmBackend *createMipsAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||
const Triple &TT, StringRef CPU,
|
||||
const MCTargetOptions &Options);
|
||||
|
||||
MCObjectWriter *createMipsELFObjectWriter(raw_pwrite_stream &OS,
|
||||
const Triple &TT, bool IsN32);
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createMipsELFObjectWriter(raw_pwrite_stream &OS, const Triple &TT, bool IsN32);
|
||||
|
||||
namespace MIPS_MC {
|
||||
StringRef selectMipsCPU(const Triple &TT, StringRef CPU);
|
||||
|
@ -204,7 +204,8 @@ namespace {
|
||||
public:
|
||||
DarwinPPCAsmBackend(const Target &T) : PPCAsmBackend(T, false) { }
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
bool is64 = getPointerSize() == 8;
|
||||
return createPPCMachObjectWriter(
|
||||
OS,
|
||||
@ -220,7 +221,8 @@ namespace {
|
||||
ELFPPCAsmBackend(const Target &T, bool IsLittleEndian, uint8_t OSABI) :
|
||||
PPCAsmBackend(T, IsLittleEndian), OSABI(OSABI) { }
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
bool is64 = getPointerSize() == 8;
|
||||
return createPPCELFObjectWriter(OS, is64, isLittleEndian(), OSABI);
|
||||
}
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCSymbolELF.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
@ -416,10 +417,9 @@ bool PPCELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createPPCELFObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit,
|
||||
bool IsLittleEndian,
|
||||
uint8_t OSABI) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createPPCELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
bool IsLittleEndian, uint8_t OSABI) {
|
||||
auto MOTW = llvm::make_unique<PPCELFObjectWriter>(Is64Bit, OSABI);
|
||||
return createELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
|
||||
}
|
||||
|
@ -47,12 +47,15 @@ MCAsmBackend *createPPCAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||
const MCTargetOptions &Options);
|
||||
|
||||
/// Construct an PPC ELF object writer.
|
||||
MCObjectWriter *createPPCELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
bool IsLittleEndian, uint8_t OSABI);
|
||||
std::unique_ptr<MCObjectWriter> createPPCELFObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit,
|
||||
bool IsLittleEndian,
|
||||
uint8_t OSABI);
|
||||
/// Construct a PPC Mach-O object writer.
|
||||
MCObjectWriter *createPPCMachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
uint32_t CPUType,
|
||||
uint32_t CPUSubtype);
|
||||
std::unique_ptr<MCObjectWriter> createPPCMachObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit,
|
||||
uint32_t CPUType,
|
||||
uint32_t CPUSubtype);
|
||||
|
||||
/// Returns true iff Val consists of one contiguous run of 1s with any number of
|
||||
/// 0s on either side. The 1s are allowed to wrap from LSB to MSB, so
|
||||
|
@ -374,9 +374,9 @@ void PPCMachObjectWriter::RecordPPCRelocation(
|
||||
Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE);
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createPPCMachObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit, uint32_t CPUType,
|
||||
uint32_t CPUSubtype) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createPPCMachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
uint32_t CPUType, uint32_t CPUSubtype) {
|
||||
return createMachObjectWriter(
|
||||
llvm::make_unique<PPCMachObjectWriter>(Is64Bit, CPUType, CPUSubtype), OS,
|
||||
/*IsLittleEndian=*/false);
|
||||
|
@ -291,7 +291,8 @@ namespace {
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(OSType);
|
||||
return createSparcELFObjectWriter(OS, Is64Bit, IsLittleEndian, OSABI);
|
||||
}
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
||||
@ -131,10 +132,9 @@ bool SparcELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createSparcELFObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit,
|
||||
bool IsLittleEndian,
|
||||
uint8_t OSABI) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createSparcELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
bool IsLittleEndian, uint8_t OSABI) {
|
||||
auto MOTW = llvm::make_unique<SparcELFObjectWriter>(Is64Bit, OSABI);
|
||||
return createELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
|
||||
}
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace llvm {
|
||||
class MCAsmBackend;
|
||||
class MCCodeEmitter;
|
||||
@ -41,8 +43,9 @@ MCCodeEmitter *createSparcMCCodeEmitter(const MCInstrInfo &MCII,
|
||||
MCAsmBackend *createSparcAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||
const Triple &TT, StringRef CPU,
|
||||
const MCTargetOptions &Options);
|
||||
MCObjectWriter *createSparcELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
bool IsLIttleEndian, uint8_t OSABI);
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createSparcELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
bool IsLIttleEndian, uint8_t OSABI);
|
||||
} // End llvm namespace
|
||||
|
||||
// Defines symbolic names for Sparc registers. This defines a mapping from
|
||||
|
@ -66,7 +66,8 @@ public:
|
||||
llvm_unreachable("SystemZ does do not have assembler relaxation");
|
||||
}
|
||||
bool writeNopData(uint64_t Count, MCObjectWriter *OW) const override;
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createSystemZObjectWriter(OS, OSABI);
|
||||
}
|
||||
};
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include <cassert>
|
||||
@ -160,8 +161,8 @@ unsigned SystemZObjectWriter::getRelocType(MCContext &Ctx,
|
||||
}
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createSystemZObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createSystemZObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI) {
|
||||
return createELFObjectWriter(llvm::make_unique<SystemZObjectWriter>(OSABI),
|
||||
OS, /*IsLittleEndian=*/false);
|
||||
}
|
||||
|
@ -12,6 +12,8 @@
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class MCAsmBackend;
|
||||
@ -91,7 +93,8 @@ MCAsmBackend *createSystemZMCAsmBackend(const Target &T,
|
||||
const Triple &TT, StringRef CPU,
|
||||
const MCTargetOptions &Options);
|
||||
|
||||
MCObjectWriter *createSystemZObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI);
|
||||
std::unique_ptr<MCObjectWriter> createSystemZObjectWriter(raw_pwrite_stream &OS,
|
||||
uint8_t OSABI);
|
||||
} // end namespace llvm
|
||||
|
||||
// Defines symbolic names for SystemZ registers.
|
||||
|
@ -389,7 +389,8 @@ public:
|
||||
ELFX86_32AsmBackend(const Target &T, uint8_t OSABI, StringRef CPU)
|
||||
: ELFX86AsmBackend(T, OSABI, CPU) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createX86ELFObjectWriter(OS, /*IsELF64*/ false, OSABI, ELF::EM_386);
|
||||
}
|
||||
};
|
||||
@ -399,7 +400,8 @@ public:
|
||||
ELFX86_X32AsmBackend(const Target &T, uint8_t OSABI, StringRef CPU)
|
||||
: ELFX86AsmBackend(T, OSABI, CPU) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createX86ELFObjectWriter(OS, /*IsELF64*/ false, OSABI,
|
||||
ELF::EM_X86_64);
|
||||
}
|
||||
@ -410,7 +412,8 @@ public:
|
||||
ELFX86_IAMCUAsmBackend(const Target &T, uint8_t OSABI, StringRef CPU)
|
||||
: ELFX86AsmBackend(T, OSABI, CPU) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createX86ELFObjectWriter(OS, /*IsELF64*/ false, OSABI,
|
||||
ELF::EM_IAMCU);
|
||||
}
|
||||
@ -421,7 +424,8 @@ public:
|
||||
ELFX86_64AsmBackend(const Target &T, uint8_t OSABI, StringRef CPU)
|
||||
: ELFX86AsmBackend(T, OSABI, CPU) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createX86ELFObjectWriter(OS, /*IsELF64*/ true, OSABI, ELF::EM_X86_64);
|
||||
}
|
||||
};
|
||||
@ -443,7 +447,8 @@ public:
|
||||
.Default(MCAsmBackend::getFixupKind(Name));
|
||||
}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createX86WinCOFFObjectWriter(OS, Is64Bit);
|
||||
}
|
||||
};
|
||||
@ -804,7 +809,8 @@ public:
|
||||
StringRef CPU)
|
||||
: DarwinX86AsmBackend(T, MRI, CPU, false) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createX86MachObjectWriter(OS, /*Is64Bit=*/false,
|
||||
MachO::CPU_TYPE_I386,
|
||||
MachO::CPU_SUBTYPE_I386_ALL);
|
||||
@ -824,7 +830,8 @@ public:
|
||||
StringRef CPU, MachO::CPUSubTypeX86 st)
|
||||
: DarwinX86AsmBackend(T, MRI, CPU, true), Subtype(st) {}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createX86MachObjectWriter(OS, /*Is64Bit=*/true,
|
||||
MachO::CPU_TYPE_X86_64, Subtype);
|
||||
}
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include <cassert>
|
||||
@ -297,9 +298,9 @@ unsigned X86ELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
|
||||
return getRelocType32(Ctx, Modifier, getType32(Type), IsPCRel, Kind);
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createX86ELFObjectWriter(raw_pwrite_stream &OS,
|
||||
bool IsELF64, uint8_t OSABI,
|
||||
uint16_t EMachine) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createX86ELFObjectWriter(raw_pwrite_stream &OS, bool IsELF64,
|
||||
uint8_t OSABI, uint16_t EMachine) {
|
||||
auto MOTW = llvm::make_unique<X86ELFObjectWriter>(IsELF64, OSABI, EMachine);
|
||||
return createELFObjectWriter(std::move(MOTW), OS, /*IsLittleEndian=*/true);
|
||||
}
|
||||
|
@ -86,16 +86,19 @@ MCStreamer *createX86WinCOFFStreamer(MCContext &C, MCAsmBackend &AB,
|
||||
bool RelaxAll, bool IncrementalLinkerCompatible);
|
||||
|
||||
/// Construct an X86 Mach-O object writer.
|
||||
MCObjectWriter *createX86MachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
uint32_t CPUType,
|
||||
uint32_t CPUSubtype);
|
||||
std::unique_ptr<MCObjectWriter> createX86MachObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit,
|
||||
uint32_t CPUType,
|
||||
uint32_t CPUSubtype);
|
||||
|
||||
/// Construct an X86 ELF object writer.
|
||||
MCObjectWriter *createX86ELFObjectWriter(raw_pwrite_stream &OS, bool IsELF64,
|
||||
uint8_t OSABI, uint16_t EMachine);
|
||||
std::unique_ptr<MCObjectWriter> createX86ELFObjectWriter(raw_pwrite_stream &OS,
|
||||
bool IsELF64,
|
||||
uint8_t OSABI,
|
||||
uint16_t EMachine);
|
||||
/// Construct an X86 Win COFF object writer.
|
||||
MCObjectWriter *createX86WinCOFFObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit);
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createX86WinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit);
|
||||
|
||||
/// Returns the sub or super register of a specific X86 register.
|
||||
/// e.g. getX86SubSuperRegister(X86::EAX, 16) returns X86::AX.
|
||||
|
@ -597,9 +597,9 @@ void X86MachObjectWriter::RecordX86Relocation(MachObjectWriter *Writer,
|
||||
Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE);
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createX86MachObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit, uint32_t CPUType,
|
||||
uint32_t CPUSubtype) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createX86MachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||
uint32_t CPUType, uint32_t CPUSubtype) {
|
||||
return createMachObjectWriter(
|
||||
llvm::make_unique<X86MachObjectWriter>(Is64Bit, CPUType, CPUSubtype), OS,
|
||||
/*IsLittleEndian=*/true);
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/MC/MCWinCOFFObjectWriter.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
@ -104,8 +105,8 @@ unsigned X86WinCOFFObjectWriter::getRelocType(MCContext &Ctx,
|
||||
llvm_unreachable("Unsupported COFF machine type.");
|
||||
}
|
||||
|
||||
MCObjectWriter *llvm::createX86WinCOFFObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit) {
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
llvm::createX86WinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit) {
|
||||
auto MOTW = llvm::make_unique<X86WinCOFFObjectWriter>(Is64Bit);
|
||||
return createWinCOFFObjectWriter(std::move(MOTW), OS);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user