diff options
Diffstat (limited to 'lib/MC')
-rw-r--r-- | lib/MC/MCAsmStreamer.cpp | 3 | ||||
-rw-r--r-- | lib/MC/MCDwarf.cpp | 7 | ||||
-rw-r--r-- | lib/MC/MCELFStreamer.cpp | 2 | ||||
-rw-r--r-- | lib/MC/MCMachOStreamer.cpp | 3 | ||||
-rw-r--r-- | lib/MC/MCStreamer.cpp | 14 |
5 files changed, 15 insertions, 14 deletions
diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp index 60d72abbcb..c612a23f95 100644 --- a/lib/MC/MCAsmStreamer.cpp +++ b/lib/MC/MCAsmStreamer.cpp @@ -1421,8 +1421,9 @@ void MCAsmStreamer::FinishImpl() { MCGenDwarfInfo::Emit(this, LineSectionSymbol); if (!UseCFI) - EmitFrames(false); + EmitFrames(AsmBackend.get(), false); } + MCStreamer *llvm::createAsmStreamer(MCContext &Context, formatted_raw_ostream &OS, bool isVerboseAsm, bool useLoc, diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index a5528a2d42..f47553204b 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -1415,9 +1415,10 @@ namespace llvm { }; } -void MCDwarfFrameEmitter::Emit(MCStreamer &Streamer, - bool UsingCFI, - bool IsEH) { +void MCDwarfFrameEmitter::Emit(MCStreamer &Streamer, MCAsmBackend *MAB, + bool UsingCFI, bool IsEH) { + Streamer.generateCompactUnwindEncodings(MAB); + MCContext &Context = Streamer.getContext(); const MCObjectFileInfo *MOFI = Context.getObjectFileInfo(); FrameEmitterImpl Emitter(UsingCFI, IsEH); diff --git a/lib/MC/MCELFStreamer.cpp b/lib/MC/MCELFStreamer.cpp index 4661d503c3..a04352a8b2 100644 --- a/lib/MC/MCELFStreamer.cpp +++ b/lib/MC/MCELFStreamer.cpp @@ -528,7 +528,7 @@ void MCELFStreamer::EmitBundleUnlock() { } void MCELFStreamer::FinishImpl() { - EmitFrames(true); + EmitFrames(NULL, true); for (std::vector<LocalCommon>::const_iterator i = LocalCommons.begin(), e = LocalCommons.end(); diff --git a/lib/MC/MCMachOStreamer.cpp b/lib/MC/MCMachOStreamer.cpp index f914f62c2f..e628461f1d 100644 --- a/lib/MC/MCMachOStreamer.cpp +++ b/lib/MC/MCMachOStreamer.cpp @@ -396,8 +396,7 @@ void MCMachOStreamer::EmitInstToData(const MCInst &Inst) { } void MCMachOStreamer::FinishImpl() { - generateCompactUnwindEncodings(getAssembler().getBackend()); - EmitFrames(true); + EmitFrames(&getAssembler().getBackend(), true); // We have to set the fragment atom associations so we can relax properly for // Mach-O. diff --git a/lib/MC/MCStreamer.cpp b/lib/MC/MCStreamer.cpp index 806bec9896..c16670ad7c 100644 --- a/lib/MC/MCStreamer.cpp +++ b/lib/MC/MCStreamer.cpp @@ -73,12 +73,12 @@ raw_ostream &MCStreamer::GetCommentOS() { return nulls(); } -void MCStreamer::generateCompactUnwindEncodings(MCAsmBackend &MAB) { +void MCStreamer::generateCompactUnwindEncodings(MCAsmBackend *MAB) { + if (!MAB) return; for (std::vector<MCDwarfFrameInfo>::iterator I = FrameInfos.begin(), E = FrameInfos.end(); I != E; ++I) - if (!I->CompactUnwindEncoding) - I->CompactUnwindEncoding = - MAB.generateCompactUnwindEncoding(I->Instructions); + I->CompactUnwindEncoding = + MAB->generateCompactUnwindEncoding(I->Instructions); } void MCStreamer::EmitDwarfSetLineAddr(int64_t LineDelta, @@ -604,15 +604,15 @@ void MCStreamer::EmitRawText(const Twine &T) { EmitRawText(Str.str()); } -void MCStreamer::EmitFrames(bool usingCFI) { +void MCStreamer::EmitFrames(MCAsmBackend *MAB, bool usingCFI) { if (!getNumFrameInfos()) return; if (EmitEHFrame) - MCDwarfFrameEmitter::Emit(*this, usingCFI, true); + MCDwarfFrameEmitter::Emit(*this, MAB, usingCFI, true); if (EmitDebugFrame) - MCDwarfFrameEmitter::Emit(*this, usingCFI, false); + MCDwarfFrameEmitter::Emit(*this, MAB, usingCFI, false); } void MCStreamer::EmitW64Tables() { |