diff options
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp index facbf22946e4a..11ed1062f77e4 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp @@ -47,8 +47,8 @@ void DwarfCFIExceptionBase::markFunctionEnd() { } void DwarfCFIExceptionBase::endFragment() { - if (shouldEmitCFI) - Asm->OutStreamer->EmitCFIEndProc(); + if (shouldEmitCFI && !Asm->MF->hasBBSections()) + Asm->OutStreamer->emitCFIEndProc(); } DwarfCFIException::DwarfCFIException(AsmPrinter *A) @@ -133,13 +133,13 @@ void DwarfCFIException::beginFragment(const MachineBasicBlock *MBB, if (!hasEmittedCFISections) { if (Asm->needsOnlyDebugCFIMoves()) - Asm->OutStreamer->EmitCFISections(false, true); + Asm->OutStreamer->emitCFISections(false, true); else if (Asm->TM.Options.ForceDwarfFrameSection) - Asm->OutStreamer->EmitCFISections(true, true); + Asm->OutStreamer->emitCFISections(true, true); hasEmittedCFISections = true; } - Asm->OutStreamer->EmitCFIStartProc(/*IsSimple=*/false); + Asm->OutStreamer->emitCFIStartProc(/*IsSimple=*/false); // Indicate personality routine, if any. if (!shouldEmitPersonality) @@ -157,11 +157,11 @@ void DwarfCFIException::beginFragment(const MachineBasicBlock *MBB, const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering(); unsigned PerEncoding = TLOF.getPersonalityEncoding(); const MCSymbol *Sym = TLOF.getCFIPersonalitySymbol(P, Asm->TM, MMI); - Asm->OutStreamer->EmitCFIPersonality(Sym, PerEncoding); + Asm->OutStreamer->emitCFIPersonality(Sym, PerEncoding); // Provide LSDA information. if (shouldEmitLSDA) - Asm->OutStreamer->EmitCFILsda(ESP(Asm), TLOF.getLSDAEncoding()); + Asm->OutStreamer->emitCFILsda(ESP(Asm), TLOF.getLSDAEncoding()); } /// endFunction - Gather and emit post-function exception information. @@ -172,3 +172,12 @@ void DwarfCFIException::endFunction(const MachineFunction *MF) { emitExceptionTable(); } + +void DwarfCFIException::beginBasicBlock(const MachineBasicBlock &MBB) { + beginFragment(&MBB, getExceptionSym); +} + +void DwarfCFIException::endBasicBlock(const MachineBasicBlock &MBB) { + if (shouldEmitCFI) + Asm->OutStreamer->emitCFIEndProc(); +} |