diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/LLVMTargetMachine.cpp | 1 | ||||
-rw-r--r-- | lib/MC/MCAsmStreamer.cpp | 48 | ||||
-rw-r--r-- | lib/Target/PTX/PTXMCAsmStreamer.cpp | 2 | ||||
-rw-r--r-- | lib/Target/PTX/PTXTargetMachine.cpp | 1 | ||||
-rw-r--r-- | lib/Target/TargetMachine.cpp | 3 |
5 files changed, 49 insertions, 6 deletions
diff --git a/lib/CodeGen/LLVMTargetMachine.cpp b/lib/CodeGen/LLVMTargetMachine.cpp index 8c2794a729..e1dad2efa9 100644 --- a/lib/CodeGen/LLVMTargetMachine.cpp +++ b/lib/CodeGen/LLVMTargetMachine.cpp @@ -149,6 +149,7 @@ bool LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM, MCStreamer *S = getTarget().createAsmStreamer(*Context, Out, getVerboseAsm(), hasMCUseLoc(), + hasMCUseCFI(), InstPrinter, MCE, TAB, ShowMCInst); diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp index 2538475e4e..b0b948e2b9 100644 --- a/lib/MC/MCAsmStreamer.cpp +++ b/lib/MC/MCAsmStreamer.cpp @@ -45,20 +45,20 @@ class MCAsmStreamer : public MCStreamer { unsigned IsVerboseAsm : 1; unsigned ShowInst : 1; unsigned UseLoc : 1; + unsigned UseCFI : 1; bool needsSet(const MCExpr *Value); public: MCAsmStreamer(MCContext &Context, formatted_raw_ostream &os, - bool isVerboseAsm, - bool useLoc, + bool isVerboseAsm, bool useLoc, bool useCFI, MCInstPrinter *printer, MCCodeEmitter *emitter, TargetAsmBackend *asmbackend, bool showInst) : MCStreamer(Context), OS(os), MAI(Context.getAsmInfo()), InstPrinter(printer), Emitter(emitter), AsmBackend(asmbackend), CommentStream(CommentToEmit), IsVerboseAsm(isVerboseAsm), - ShowInst(showInst), UseLoc(useLoc) { + ShowInst(showInst), UseLoc(useLoc), UseCFI(useCFI) { if (InstPrinter && IsVerboseAsm) InstPrinter->setCommentStream(CommentStream); } @@ -740,6 +740,9 @@ void MCAsmStreamer::EmitDwarfLocDirective(unsigned FileNo, unsigned Line, void MCAsmStreamer::EmitCFIStartProc() { MCStreamer::EmitCFIStartProc(); + if (!UseCFI) + return; + OS << "\t.cfi_startproc"; EmitEOL(); } @@ -747,6 +750,9 @@ void MCAsmStreamer::EmitCFIStartProc() { void MCAsmStreamer::EmitCFIEndProc() { MCStreamer::EmitCFIEndProc(); + if (!UseCFI) + return; + OS << "\t.cfi_endproc"; EmitEOL(); } @@ -754,6 +760,9 @@ void MCAsmStreamer::EmitCFIEndProc() { void MCAsmStreamer::EmitCFIDefCfa(int64_t Register, int64_t Offset) { MCStreamer::EmitCFIDefCfa(Register, Offset); + if (!UseCFI) + return; + OS << ".cfi_def_cfa " << Register << ", " << Offset; EmitEOL(); } @@ -761,6 +770,9 @@ void MCAsmStreamer::EmitCFIDefCfa(int64_t Register, int64_t Offset) { void MCAsmStreamer::EmitCFIDefCfaOffset(int64_t Offset) { MCStreamer::EmitCFIDefCfaOffset(Offset); + if (!UseCFI) + return; + OS << "\t.cfi_def_cfa_offset " << Offset; EmitEOL(); } @@ -768,6 +780,9 @@ void MCAsmStreamer::EmitCFIDefCfaOffset(int64_t Offset) { void MCAsmStreamer::EmitCFIDefCfaRegister(int64_t Register) { MCStreamer::EmitCFIDefCfaRegister(Register); + if (!UseCFI) + return; + OS << "\t.cfi_def_cfa_register " << Register; EmitEOL(); } @@ -775,6 +790,9 @@ void MCAsmStreamer::EmitCFIDefCfaRegister(int64_t Register) { void MCAsmStreamer::EmitCFIOffset(int64_t Register, int64_t Offset) { this->MCStreamer::EmitCFIOffset(Register, Offset); + if (!UseCFI) + return; + OS << "\t.cfi_offset " << Register << ", " << Offset; EmitEOL(); } @@ -783,6 +801,9 @@ void MCAsmStreamer::EmitCFIPersonality(const MCSymbol *Sym, unsigned Encoding) { MCStreamer::EmitCFIPersonality(Sym, Encoding); + if (!UseCFI) + return; + OS << "\t.cfi_personality " << Encoding << ", " << *Sym; EmitEOL(); } @@ -790,6 +811,9 @@ void MCAsmStreamer::EmitCFIPersonality(const MCSymbol *Sym, void MCAsmStreamer::EmitCFILsda(const MCSymbol *Sym, unsigned Encoding) { MCStreamer::EmitCFILsda(Sym, Encoding); + if (!UseCFI) + return; + OS << "\t.cfi_lsda " << Encoding << ", " << *Sym; EmitEOL(); } @@ -797,6 +821,9 @@ void MCAsmStreamer::EmitCFILsda(const MCSymbol *Sym, unsigned Encoding) { void MCAsmStreamer::EmitCFIRememberState() { MCStreamer::EmitCFIRememberState(); + if (!UseCFI) + return; + OS << "\t.cfi_remember_state"; EmitEOL(); } @@ -804,6 +831,9 @@ void MCAsmStreamer::EmitCFIRememberState() { void MCAsmStreamer::EmitCFIRestoreState() { MCStreamer::EmitCFIRestoreState(); + if (!UseCFI) + return; + OS << "\t.cfi_restore_state"; EmitEOL(); } @@ -811,6 +841,9 @@ void MCAsmStreamer::EmitCFIRestoreState() { void MCAsmStreamer::EmitCFISameValue(int64_t Register) { MCStreamer::EmitCFISameValue(Register); + if (!UseCFI) + return; + OS << "\t.cfi_same_value " << Register; EmitEOL(); } @@ -818,6 +851,9 @@ void MCAsmStreamer::EmitCFISameValue(int64_t Register) { void MCAsmStreamer::EmitCFIRelOffset(int64_t Register, int64_t Offset) { MCStreamer::EmitCFIRelOffset(Register, Offset); + if (!UseCFI) + return; + OS << "\t.cfi_rel_offset " << Register << ", " << Offset; EmitEOL(); } @@ -825,6 +861,9 @@ void MCAsmStreamer::EmitCFIRelOffset(int64_t Register, int64_t Offset) { void MCAsmStreamer::EmitCFIAdjustCfaOffset(int64_t Adjustment) { MCStreamer::EmitCFIAdjustCfaOffset(Adjustment); + if (!UseCFI) + return; + OS << "\t.cfi_adjust_cfa_offset " << Adjustment; EmitEOL(); } @@ -1008,8 +1047,9 @@ void MCAsmStreamer::Finish() { MCStreamer *llvm::createAsmStreamer(MCContext &Context, formatted_raw_ostream &OS, bool isVerboseAsm, bool useLoc, + bool useCFI, MCInstPrinter *IP, MCCodeEmitter *CE, TargetAsmBackend *TAB, bool ShowInst) { - return new MCAsmStreamer(Context, OS, isVerboseAsm, useLoc, + return new MCAsmStreamer(Context, OS, isVerboseAsm, useLoc, useCFI, IP, CE, TAB, ShowInst); } diff --git a/lib/Target/PTX/PTXMCAsmStreamer.cpp b/lib/Target/PTX/PTXMCAsmStreamer.cpp index 0d1f7846ef..63bac790cc 100644 --- a/lib/Target/PTX/PTXMCAsmStreamer.cpp +++ b/lib/Target/PTX/PTXMCAsmStreamer.cpp @@ -531,7 +531,7 @@ void PTXMCAsmStreamer::Finish() {} namespace llvm { MCStreamer *createPTXAsmStreamer(MCContext &Context, formatted_raw_ostream &OS, - bool isVerboseAsm, bool useLoc, + bool isVerboseAsm, bool useLoc, bool useCFI, MCInstPrinter *IP, MCCodeEmitter *CE, TargetAsmBackend *TAB, bool ShowInst) { diff --git a/lib/Target/PTX/PTXTargetMachine.cpp b/lib/Target/PTX/PTXTargetMachine.cpp index 78a7b0daf1..1b737c9d86 100644 --- a/lib/Target/PTX/PTXTargetMachine.cpp +++ b/lib/Target/PTX/PTXTargetMachine.cpp @@ -23,6 +23,7 @@ using namespace llvm; namespace llvm { MCStreamer *createPTXAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS, bool isVerboseAsm, bool useLoc, + bool useCFI, MCInstPrinter *InstPrint, MCCodeEmitter *CE, TargetAsmBackend *TAB, diff --git a/lib/Target/TargetMachine.cpp b/lib/Target/TargetMachine.cpp index 4a1ac94826..76ccc09195 100644 --- a/lib/Target/TargetMachine.cpp +++ b/lib/Target/TargetMachine.cpp @@ -227,7 +227,8 @@ TargetMachine::TargetMachine(const Target &T) MCRelaxAll(false), MCNoExecStack(false), MCSaveTempLabels(false), - MCUseLoc(true) { + MCUseLoc(true), + MCUseCFI(true) { // Typically it will be subtargets that will adjust FloatABIType from Default // to Soft or Hard. if (UseSoftFloat) |