forked from OSchip/llvm-project
MC] Provide an MCTargetOptions to implementors of MCAsmBackendCtorTy, NFC
Some targets, notably AArch64 for ILP32, have different relocation encodings based upon the ABI. This is an enabling change, so a future patch can use the ABIName from MCTargetOptions to chose which relocations to use. Tested using check-llvm. The corresponding change to clang is in: http://reviews.llvm.org/D16538 Patch by: Joel Jones Differential Revision: https://reviews.llvm.org/D16213 llvm-svn: 276654
This commit is contained in:
parent
fe58327146
commit
373d7d30dd
|
@ -112,7 +112,8 @@ public:
|
||||||
TargetMachine &TM, std::unique_ptr<MCStreamer> &&Streamer);
|
TargetMachine &TM, std::unique_ptr<MCStreamer> &&Streamer);
|
||||||
typedef MCAsmBackend *(*MCAsmBackendCtorTy)(const Target &T,
|
typedef MCAsmBackend *(*MCAsmBackendCtorTy)(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
typedef MCTargetAsmParser *(*MCAsmParserCtorTy)(
|
typedef MCTargetAsmParser *(*MCAsmParserCtorTy)(
|
||||||
const MCSubtargetInfo &STI, MCAsmParser &P, const MCInstrInfo &MII,
|
const MCSubtargetInfo &STI, MCAsmParser &P, const MCInstrInfo &MII,
|
||||||
const MCTargetOptions &Options);
|
const MCTargetOptions &Options);
|
||||||
|
@ -365,10 +366,12 @@ public:
|
||||||
///
|
///
|
||||||
/// \param TheTriple The target triple string.
|
/// \param TheTriple The target triple string.
|
||||||
MCAsmBackend *createMCAsmBackend(const MCRegisterInfo &MRI,
|
MCAsmBackend *createMCAsmBackend(const MCRegisterInfo &MRI,
|
||||||
StringRef TheTriple, StringRef CPU) const {
|
StringRef TheTriple, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options)
|
||||||
|
const {
|
||||||
if (!MCAsmBackendCtorFn)
|
if (!MCAsmBackendCtorFn)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return MCAsmBackendCtorFn(*this, MRI, Triple(TheTriple), CPU);
|
return MCAsmBackendCtorFn(*this, MRI, Triple(TheTriple), CPU, Options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// createMCAsmParser - Create a target specific assembly parser.
|
/// createMCAsmParser - Create a target specific assembly parser.
|
||||||
|
@ -1071,7 +1074,8 @@ template <class MCAsmBackendImpl> struct RegisterMCAsmBackend {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static MCAsmBackend *Allocator(const Target &T, const MCRegisterInfo &MRI,
|
static MCAsmBackend *Allocator(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TheTriple, StringRef CPU) {
|
const Triple &TheTriple, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
return new MCAsmBackendImpl(T, MRI, TheTriple, CPU);
|
return new MCAsmBackendImpl(T, MRI, TheTriple, CPU);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -224,7 +224,8 @@ bool LLVMTargetMachine::addPassesToEmitFile(
|
||||||
MCE = getTarget().createMCCodeEmitter(MII, MRI, *Context);
|
MCE = getTarget().createMCCodeEmitter(MII, MRI, *Context);
|
||||||
|
|
||||||
MCAsmBackend *MAB =
|
MCAsmBackend *MAB =
|
||||||
getTarget().createMCAsmBackend(MRI, getTargetTriple().str(), TargetCPU);
|
getTarget().createMCAsmBackend(MRI, getTargetTriple().str(), TargetCPU,
|
||||||
|
Options.MCOptions);
|
||||||
auto FOut = llvm::make_unique<formatted_raw_ostream>(Out);
|
auto FOut = llvm::make_unique<formatted_raw_ostream>(Out);
|
||||||
MCStreamer *S = getTarget().createAsmStreamer(
|
MCStreamer *S = getTarget().createAsmStreamer(
|
||||||
*Context, std::move(FOut), Options.MCOptions.AsmVerbose,
|
*Context, std::move(FOut), Options.MCOptions.AsmVerbose,
|
||||||
|
@ -238,7 +239,8 @@ bool LLVMTargetMachine::addPassesToEmitFile(
|
||||||
// emission fails.
|
// emission fails.
|
||||||
MCCodeEmitter *MCE = getTarget().createMCCodeEmitter(MII, MRI, *Context);
|
MCCodeEmitter *MCE = getTarget().createMCCodeEmitter(MII, MRI, *Context);
|
||||||
MCAsmBackend *MAB =
|
MCAsmBackend *MAB =
|
||||||
getTarget().createMCAsmBackend(MRI, getTargetTriple().str(), TargetCPU);
|
getTarget().createMCAsmBackend(MRI, getTargetTriple().str(), TargetCPU,
|
||||||
|
Options.MCOptions);
|
||||||
if (!MCE || !MAB)
|
if (!MCE || !MAB)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -293,7 +295,8 @@ bool LLVMTargetMachine::addPassesToEmitMC(PassManagerBase &PM, MCContext *&Ctx,
|
||||||
MCCodeEmitter *MCE =
|
MCCodeEmitter *MCE =
|
||||||
getTarget().createMCCodeEmitter(*getMCInstrInfo(), MRI, *Ctx);
|
getTarget().createMCCodeEmitter(*getMCInstrInfo(), MRI, *Ctx);
|
||||||
MCAsmBackend *MAB =
|
MCAsmBackend *MAB =
|
||||||
getTarget().createMCAsmBackend(MRI, getTargetTriple().str(), TargetCPU);
|
getTarget().createMCAsmBackend(MRI, getTargetTriple().str(), TargetCPU,
|
||||||
|
Options.MCOptions);
|
||||||
if (!MCE || !MAB)
|
if (!MCE || !MAB)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
@ -574,7 +574,8 @@ void ELFAArch64AsmBackend::processFixupValue(
|
||||||
MCAsmBackend *llvm::createAArch64leAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createAArch64leAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TheTriple,
|
const Triple &TheTriple,
|
||||||
StringRef CPU) {
|
StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
if (TheTriple.isOSBinFormatMachO())
|
if (TheTriple.isOSBinFormatMachO())
|
||||||
return new DarwinAArch64AsmBackend(T, MRI);
|
return new DarwinAArch64AsmBackend(T, MRI);
|
||||||
|
|
||||||
|
@ -586,10 +587,10 @@ MCAsmBackend *llvm::createAArch64leAsmBackend(const Target &T,
|
||||||
MCAsmBackend *llvm::createAArch64beAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createAArch64beAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TheTriple,
|
const Triple &TheTriple,
|
||||||
StringRef CPU) {
|
StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
assert(TheTriple.isOSBinFormatELF() &&
|
assert(TheTriple.isOSBinFormatELF() &&
|
||||||
"Big endian is only supported for ELF targets!");
|
"Big endian is only supported for ELF targets!");
|
||||||
uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS());
|
uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS());
|
||||||
return new ELFAArch64AsmBackend(T, OSABI,
|
return new ELFAArch64AsmBackend(T, OSABI, /*IsLittleEndian=*/false);
|
||||||
/*IsLittleEndian=*/false);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ class MCRegisterInfo;
|
||||||
class MCObjectWriter;
|
class MCObjectWriter;
|
||||||
class MCStreamer;
|
class MCStreamer;
|
||||||
class MCSubtargetInfo;
|
class MCSubtargetInfo;
|
||||||
|
class MCTargetOptions;
|
||||||
class MCTargetStreamer;
|
class MCTargetStreamer;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
class Target;
|
class Target;
|
||||||
|
@ -43,10 +44,12 @@ MCCodeEmitter *createAArch64MCCodeEmitter(const MCInstrInfo &MCII,
|
||||||
MCContext &Ctx);
|
MCContext &Ctx);
|
||||||
MCAsmBackend *createAArch64leAsmBackend(const Target &T,
|
MCAsmBackend *createAArch64leAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
MCAsmBackend *createAArch64beAsmBackend(const Target &T,
|
MCAsmBackend *createAArch64beAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
MCObjectWriter *createAArch64ELFObjectWriter(raw_pwrite_stream &OS,
|
MCObjectWriter *createAArch64ELFObjectWriter(raw_pwrite_stream &OS,
|
||||||
uint8_t OSABI,
|
uint8_t OSABI,
|
||||||
|
|
|
@ -171,7 +171,8 @@ public:
|
||||||
|
|
||||||
MCAsmBackend *llvm::createAMDGPUAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createAMDGPUAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
// Use 64-bit ELF for amdgcn
|
// Use 64-bit ELF for amdgcn
|
||||||
return new ELFAMDGPUAsmBackend(T, TT);
|
return new ELFAMDGPUAsmBackend(T, TT);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ class MCInstrInfo;
|
||||||
class MCObjectWriter;
|
class MCObjectWriter;
|
||||||
class MCRegisterInfo;
|
class MCRegisterInfo;
|
||||||
class MCSubtargetInfo;
|
class MCSubtargetInfo;
|
||||||
|
class MCTargetOptions;
|
||||||
class Target;
|
class Target;
|
||||||
class Triple;
|
class Triple;
|
||||||
class raw_pwrite_stream;
|
class raw_pwrite_stream;
|
||||||
|
@ -44,7 +45,8 @@ MCCodeEmitter *createSIMCCodeEmitter(const MCInstrInfo &MCII,
|
||||||
MCContext &Ctx);
|
MCContext &Ctx);
|
||||||
|
|
||||||
MCAsmBackend *createAMDGPUAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createAMDGPUAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
MCObjectWriter *createAMDGPUELFObjectWriter(bool Is64Bit,
|
MCObjectWriter *createAMDGPUELFObjectWriter(bool Is64Bit,
|
||||||
bool HasRelocationAddend,
|
bool HasRelocationAddend,
|
||||||
|
|
|
@ -1111,6 +1111,7 @@ static MachO::CPUSubTypeARM getMachOSubTypeFromArch(StringRef Arch) {
|
||||||
MCAsmBackend *llvm::createARMAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createARMAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TheTriple, StringRef CPU,
|
const Triple &TheTriple, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options,
|
||||||
bool isLittle) {
|
bool isLittle) {
|
||||||
switch (TheTriple.getObjectFormat()) {
|
switch (TheTriple.getObjectFormat()) {
|
||||||
default:
|
default:
|
||||||
|
@ -1131,24 +1132,28 @@ MCAsmBackend *llvm::createARMAsmBackend(const Target &T,
|
||||||
|
|
||||||
MCAsmBackend *llvm::createARMLEAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createARMLEAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
return createARMAsmBackend(T, MRI, TT, CPU, true);
|
const MCTargetOptions &Options) {
|
||||||
|
return createARMAsmBackend(T, MRI, TT, CPU, Options, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
MCAsmBackend *llvm::createARMBEAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createARMBEAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
return createARMAsmBackend(T, MRI, TT, CPU, false);
|
const MCTargetOptions &Options) {
|
||||||
|
return createARMAsmBackend(T, MRI, TT, CPU, Options, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
MCAsmBackend *llvm::createThumbLEAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createThumbLEAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
return createARMAsmBackend(T, MRI, TT, CPU, true);
|
const MCTargetOptions &Options) {
|
||||||
|
return createARMAsmBackend(T, MRI, TT, CPU, Options, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
MCAsmBackend *llvm::createThumbBEAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createThumbBEAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
return createARMAsmBackend(T, MRI, TT, CPU, false);
|
const MCTargetOptions &Options) {
|
||||||
|
return createARMAsmBackend(T, MRI, TT, CPU, Options, false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ class MCObjectWriter;
|
||||||
class MCRegisterInfo;
|
class MCRegisterInfo;
|
||||||
class MCSubtargetInfo;
|
class MCSubtargetInfo;
|
||||||
class MCStreamer;
|
class MCStreamer;
|
||||||
|
class MCTargetOptions;
|
||||||
class MCRelocationInfo;
|
class MCRelocationInfo;
|
||||||
class MCTargetStreamer;
|
class MCTargetStreamer;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
|
@ -66,21 +67,26 @@ MCCodeEmitter *createARMBEMCCodeEmitter(const MCInstrInfo &MCII,
|
||||||
|
|
||||||
MCAsmBackend *createARMAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createARMAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU,
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options,
|
||||||
bool IsLittleEndian);
|
bool IsLittleEndian);
|
||||||
|
|
||||||
MCAsmBackend *createARMLEAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createARMLEAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
MCAsmBackend *createARMBEAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createARMBEAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
MCAsmBackend *createThumbLEAsmBackend(const Target &T,
|
MCAsmBackend *createThumbLEAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
MCAsmBackend *createThumbBEAsmBackend(const Target &T,
|
MCAsmBackend *createThumbBEAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
// Construct a PE/COFF machine code streamer which will generate a PE/COFF
|
// Construct a PE/COFF machine code streamer which will generate a PE/COFF
|
||||||
// object file.
|
// object file.
|
||||||
|
|
|
@ -96,12 +96,14 @@ MCObjectWriter *BPFAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {
|
||||||
|
|
||||||
MCAsmBackend *llvm::createBPFAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createBPFAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions&) {
|
||||||
return new BPFAsmBackend(/*IsLittleEndian=*/true);
|
return new BPFAsmBackend(/*IsLittleEndian=*/true);
|
||||||
}
|
}
|
||||||
|
|
||||||
MCAsmBackend *llvm::createBPFbeAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createBPFbeAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions&) {
|
||||||
return new BPFAsmBackend(/*IsLittleEndian=*/false);
|
return new BPFAsmBackend(/*IsLittleEndian=*/false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ class MCInstrInfo;
|
||||||
class MCObjectWriter;
|
class MCObjectWriter;
|
||||||
class MCRegisterInfo;
|
class MCRegisterInfo;
|
||||||
class MCSubtargetInfo;
|
class MCSubtargetInfo;
|
||||||
|
class MCTargetOptions;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
class Target;
|
class Target;
|
||||||
class Triple;
|
class Triple;
|
||||||
|
@ -43,9 +44,11 @@ MCCodeEmitter *createBPFbeMCCodeEmitter(const MCInstrInfo &MCII,
|
||||||
MCContext &Ctx);
|
MCContext &Ctx);
|
||||||
|
|
||||||
MCAsmBackend *createBPFAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createBPFAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
MCAsmBackend *createBPFbeAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createBPFbeAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
MCObjectWriter *createBPFELFObjectWriter(raw_pwrite_stream &OS,
|
MCObjectWriter *createBPFELFObjectWriter(raw_pwrite_stream &OS,
|
||||||
uint8_t OSABI, bool IsLittleEndian);
|
uint8_t OSABI, bool IsLittleEndian);
|
||||||
|
|
|
@ -745,7 +745,8 @@ public:
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
MCAsmBackend *createHexagonAsmBackend(Target const &T,
|
MCAsmBackend *createHexagonAsmBackend(Target const &T,
|
||||||
MCRegisterInfo const & /*MRI*/,
|
MCRegisterInfo const & /*MRI*/,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS());
|
uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS());
|
||||||
return new HexagonAsmBackend(T, OSABI, CPU);
|
return new HexagonAsmBackend(T, OSABI, CPU);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ class MCInstrInfo;
|
||||||
class MCObjectWriter;
|
class MCObjectWriter;
|
||||||
class MCRegisterInfo;
|
class MCRegisterInfo;
|
||||||
class MCSubtargetInfo;
|
class MCSubtargetInfo;
|
||||||
|
class MCTargetOptions;
|
||||||
class Target;
|
class Target;
|
||||||
class Triple;
|
class Triple;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
|
@ -47,7 +48,8 @@ MCCodeEmitter *createHexagonMCCodeEmitter(const MCInstrInfo &MCII,
|
||||||
|
|
||||||
MCAsmBackend *createHexagonAsmBackend(const Target &T,
|
MCAsmBackend *createHexagonAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
MCObjectWriter *createHexagonELFObjectWriter(raw_pwrite_stream &OS,
|
MCObjectWriter *createHexagonELFObjectWriter(raw_pwrite_stream &OS,
|
||||||
uint8_t OSABI, StringRef CPU);
|
uint8_t OSABI, StringRef CPU);
|
||||||
|
|
|
@ -482,27 +482,31 @@ void MipsAsmBackend::processFixupValue(const MCAssembler &Asm,
|
||||||
// MCAsmBackend
|
// MCAsmBackend
|
||||||
MCAsmBackend *llvm::createMipsAsmBackendEL32(const Target &T,
|
MCAsmBackend *llvm::createMipsAsmBackendEL32(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
return new MipsAsmBackend(T, TT.getOS(), /*IsLittle*/ true,
|
return new MipsAsmBackend(T, TT.getOS(), /*IsLittle*/ true,
|
||||||
/*Is64Bit*/ false);
|
/*Is64Bit*/ false);
|
||||||
}
|
}
|
||||||
|
|
||||||
MCAsmBackend *llvm::createMipsAsmBackendEB32(const Target &T,
|
MCAsmBackend *llvm::createMipsAsmBackendEB32(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
return new MipsAsmBackend(T, TT.getOS(), /*IsLittle*/ false,
|
return new MipsAsmBackend(T, TT.getOS(), /*IsLittle*/ false,
|
||||||
/*Is64Bit*/ false);
|
/*Is64Bit*/ false);
|
||||||
}
|
}
|
||||||
|
|
||||||
MCAsmBackend *llvm::createMipsAsmBackendEL64(const Target &T,
|
MCAsmBackend *llvm::createMipsAsmBackendEL64(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
return new MipsAsmBackend(T, TT.getOS(), /*IsLittle*/ true, /*Is64Bit*/ true);
|
return new MipsAsmBackend(T, TT.getOS(), /*IsLittle*/ true, /*Is64Bit*/ true);
|
||||||
}
|
}
|
||||||
|
|
||||||
MCAsmBackend *llvm::createMipsAsmBackendEB64(const Target &T,
|
MCAsmBackend *llvm::createMipsAsmBackendEB64(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
return new MipsAsmBackend(T, TT.getOS(), /*IsLittle*/ false,
|
return new MipsAsmBackend(T, TT.getOS(), /*IsLittle*/ false,
|
||||||
/*Is64Bit*/ true);
|
/*Is64Bit*/ true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ class MCInstrInfo;
|
||||||
class MCObjectWriter;
|
class MCObjectWriter;
|
||||||
class MCRegisterInfo;
|
class MCRegisterInfo;
|
||||||
class MCSubtargetInfo;
|
class MCSubtargetInfo;
|
||||||
|
class MCTargetOptions;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
class Target;
|
class Target;
|
||||||
class Triple;
|
class Triple;
|
||||||
|
@ -44,16 +45,20 @@ MCCodeEmitter *createMipsMCCodeEmitterEL(const MCInstrInfo &MCII,
|
||||||
|
|
||||||
MCAsmBackend *createMipsAsmBackendEB32(const Target &T,
|
MCAsmBackend *createMipsAsmBackendEB32(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
MCAsmBackend *createMipsAsmBackendEL32(const Target &T,
|
MCAsmBackend *createMipsAsmBackendEL32(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
MCAsmBackend *createMipsAsmBackendEB64(const Target &T,
|
MCAsmBackend *createMipsAsmBackendEB64(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
MCAsmBackend *createMipsAsmBackendEL64(const Target &T,
|
MCAsmBackend *createMipsAsmBackendEL64(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
MCObjectWriter *createMipsELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
|
MCObjectWriter *createMipsELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
|
||||||
bool IsLittleEndian, bool Is64Bit);
|
bool IsLittleEndian, bool Is64Bit);
|
||||||
|
|
|
@ -230,7 +230,8 @@ namespace {
|
||||||
|
|
||||||
MCAsmBackend *llvm::createPPCAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createPPCAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
if (TT.isOSDarwin())
|
if (TT.isOSDarwin())
|
||||||
return new DarwinPPCAsmBackend(T);
|
return new DarwinPPCAsmBackend(T);
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ class MCInstrInfo;
|
||||||
class MCObjectWriter;
|
class MCObjectWriter;
|
||||||
class MCRegisterInfo;
|
class MCRegisterInfo;
|
||||||
class MCSubtargetInfo;
|
class MCSubtargetInfo;
|
||||||
|
class MCTargetOptions;
|
||||||
class Target;
|
class Target;
|
||||||
class Triple;
|
class Triple;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
|
@ -43,7 +44,8 @@ MCCodeEmitter *createPPCMCCodeEmitter(const MCInstrInfo &MCII,
|
||||||
MCContext &Ctx);
|
MCContext &Ctx);
|
||||||
|
|
||||||
MCAsmBackend *createPPCAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createPPCAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
/// Construct an PPC ELF object writer.
|
/// Construct an PPC ELF object writer.
|
||||||
MCObjectWriter *createPPCELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
MCObjectWriter *createPPCELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||||
|
|
|
@ -300,6 +300,7 @@ namespace {
|
||||||
|
|
||||||
MCAsmBackend *llvm::createSparcAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createSparcAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
return new ELFSparcAsmBackend(T, TT.getOS());
|
return new ELFSparcAsmBackend(T, TT.getOS());
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ class MCInstrInfo;
|
||||||
class MCObjectWriter;
|
class MCObjectWriter;
|
||||||
class MCRegisterInfo;
|
class MCRegisterInfo;
|
||||||
class MCSubtargetInfo;
|
class MCSubtargetInfo;
|
||||||
|
class MCTargetOptions;
|
||||||
class Target;
|
class Target;
|
||||||
class Triple;
|
class Triple;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
|
@ -38,7 +39,8 @@ MCCodeEmitter *createSparcMCCodeEmitter(const MCInstrInfo &MCII,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
MCContext &Ctx);
|
MCContext &Ctx);
|
||||||
MCAsmBackend *createSparcAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createSparcAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
MCObjectWriter *createSparcELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
MCObjectWriter *createSparcELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
|
||||||
bool IsLIttleEndian, uint8_t OSABI);
|
bool IsLIttleEndian, uint8_t OSABI);
|
||||||
} // End llvm namespace
|
} // End llvm namespace
|
||||||
|
|
|
@ -112,7 +112,8 @@ bool SystemZMCAsmBackend::writeNopData(uint64_t Count,
|
||||||
|
|
||||||
MCAsmBackend *llvm::createSystemZMCAsmBackend(const Target &T,
|
MCAsmBackend *llvm::createSystemZMCAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU) {
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS());
|
uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS());
|
||||||
return new SystemZMCAsmBackend(OSABI);
|
return new SystemZMCAsmBackend(OSABI);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ class MCInstrInfo;
|
||||||
class MCObjectWriter;
|
class MCObjectWriter;
|
||||||
class MCRegisterInfo;
|
class MCRegisterInfo;
|
||||||
class MCSubtargetInfo;
|
class MCSubtargetInfo;
|
||||||
|
class MCTargetOptions;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
class Target;
|
class Target;
|
||||||
class Triple;
|
class Triple;
|
||||||
|
@ -85,7 +86,8 @@ MCCodeEmitter *createSystemZMCCodeEmitter(const MCInstrInfo &MCII,
|
||||||
|
|
||||||
MCAsmBackend *createSystemZMCAsmBackend(const Target &T,
|
MCAsmBackend *createSystemZMCAsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
MCObjectWriter *createSystemZObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI);
|
MCObjectWriter *createSystemZObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI);
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
|
|
@ -837,7 +837,8 @@ public:
|
||||||
MCAsmBackend *llvm::createX86_32AsmBackend(const Target &T,
|
MCAsmBackend *llvm::createX86_32AsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TheTriple,
|
const Triple &TheTriple,
|
||||||
StringRef CPU) {
|
StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
if (TheTriple.isOSBinFormatMachO())
|
if (TheTriple.isOSBinFormatMachO())
|
||||||
return new DarwinX86_32AsmBackend(T, MRI, CPU);
|
return new DarwinX86_32AsmBackend(T, MRI, CPU);
|
||||||
|
|
||||||
|
@ -855,7 +856,8 @@ MCAsmBackend *llvm::createX86_32AsmBackend(const Target &T,
|
||||||
MCAsmBackend *llvm::createX86_64AsmBackend(const Target &T,
|
MCAsmBackend *llvm::createX86_64AsmBackend(const Target &T,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
const Triple &TheTriple,
|
const Triple &TheTriple,
|
||||||
StringRef CPU) {
|
StringRef CPU,
|
||||||
|
const MCTargetOptions &Options) {
|
||||||
if (TheTriple.isOSBinFormatMachO()) {
|
if (TheTriple.isOSBinFormatMachO()) {
|
||||||
MachO::CPUSubTypeX86 CS =
|
MachO::CPUSubTypeX86 CS =
|
||||||
StringSwitch<MachO::CPUSubTypeX86>(TheTriple.getArchName())
|
StringSwitch<MachO::CPUSubTypeX86>(TheTriple.getArchName())
|
||||||
|
|
|
@ -27,6 +27,7 @@ class MCObjectWriter;
|
||||||
class MCRegisterInfo;
|
class MCRegisterInfo;
|
||||||
class MCSubtargetInfo;
|
class MCSubtargetInfo;
|
||||||
class MCRelocationInfo;
|
class MCRelocationInfo;
|
||||||
|
class MCTargetOptions;
|
||||||
class Target;
|
class Target;
|
||||||
class Triple;
|
class Triple;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
|
@ -69,9 +70,11 @@ MCCodeEmitter *createX86MCCodeEmitter(const MCInstrInfo &MCII,
|
||||||
MCContext &Ctx);
|
MCContext &Ctx);
|
||||||
|
|
||||||
MCAsmBackend *createX86_32AsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createX86_32AsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
MCAsmBackend *createX86_64AsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createX86_64AsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
const Triple &TT, StringRef CPU);
|
const Triple &TT, StringRef CPU,
|
||||||
|
const MCTargetOptions &Options);
|
||||||
|
|
||||||
/// Construct an X86 Windows COFF machine code streamer which will generate
|
/// Construct an X86 Windows COFF machine code streamer which will generate
|
||||||
/// PE/COFF format object files.
|
/// PE/COFF format object files.
|
||||||
|
|
|
@ -597,7 +597,8 @@ bool DwarfStreamer::init(Triple TheTriple, StringRef OutputFilename) {
|
||||||
MC.reset(new MCContext(MAI.get(), MRI.get(), MOFI.get()));
|
MC.reset(new MCContext(MAI.get(), MRI.get(), MOFI.get()));
|
||||||
MOFI->InitMCObjectFileInfo(TheTriple, /*PIC*/ false, CodeModel::Default, *MC);
|
MOFI->InitMCObjectFileInfo(TheTriple, /*PIC*/ false, CodeModel::Default, *MC);
|
||||||
|
|
||||||
MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, "");
|
MCTargetOptions Options;
|
||||||
|
MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, "", Options);
|
||||||
if (!MAB)
|
if (!MAB)
|
||||||
return error("no asm backend for target " + TripleName, Context);
|
return error("no asm backend for target " + TripleName, Context);
|
||||||
|
|
||||||
|
|
|
@ -643,7 +643,8 @@ int main(int argc, char **argv) {
|
||||||
MCContext MC(MAI.get(), MRI.get(), &MOFI);
|
MCContext MC(MAI.get(), MRI.get(), &MOFI);
|
||||||
MOFI.InitMCObjectFileInfo(TheTriple, /*PIC*/ false, CodeModel::Default, MC);
|
MOFI.InitMCObjectFileInfo(TheTriple, /*PIC*/ false, CodeModel::Default, MC);
|
||||||
|
|
||||||
auto MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, "");
|
MCTargetOptions Options;
|
||||||
|
auto MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, "", Options);
|
||||||
if (!MAB)
|
if (!MAB)
|
||||||
return error("no asm backend for target " + TripleName, Context);
|
return error("no asm backend for target " + TripleName, Context);
|
||||||
|
|
||||||
|
|
|
@ -503,7 +503,7 @@ int main(int argc, char **argv) {
|
||||||
MCAsmBackend *MAB = nullptr;
|
MCAsmBackend *MAB = nullptr;
|
||||||
if (ShowEncoding) {
|
if (ShowEncoding) {
|
||||||
CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx);
|
CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx);
|
||||||
MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, MCPU);
|
MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, MCPU, MCOptions);
|
||||||
}
|
}
|
||||||
auto FOut = llvm::make_unique<formatted_raw_ostream>(*OS);
|
auto FOut = llvm::make_unique<formatted_raw_ostream>(*OS);
|
||||||
Str.reset(TheTarget->createAsmStreamer(
|
Str.reset(TheTarget->createAsmStreamer(
|
||||||
|
@ -524,7 +524,8 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx);
|
MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx);
|
||||||
MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, MCPU);
|
MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, MCPU,
|
||||||
|
MCOptions);
|
||||||
Str.reset(TheTarget->createMCObjectStreamer(
|
Str.reset(TheTarget->createMCObjectStreamer(
|
||||||
TheTriple, Ctx, *MAB, *OS, CE, *STI, MCOptions.MCRelaxAll,
|
TheTriple, Ctx, *MAB, *OS, CE, *STI, MCOptions.MCRelaxAll,
|
||||||
MCOptions.MCIncrementalLinkerCompatible,
|
MCOptions.MCIncrementalLinkerCompatible,
|
||||||
|
|
Loading…
Reference in New Issue