diff --git a/include/llvm/Target/TargetAsmInfo.h b/include/llvm/Target/TargetAsmInfo.h index 2fb2a68b364..aada8ff937c 100644 --- a/include/llvm/Target/TargetAsmInfo.h +++ b/include/llvm/Target/TargetAsmInfo.h @@ -412,7 +412,11 @@ namespace llvm { /// DwarfExceptionSection - Section directive for Exception table. /// const char *DwarfExceptionSection; // Defaults to ".gcc_except_table". - + + /// DebugInfoRequireFrameMoveInfo - Does debugging info require frame move + /// info. + /// + bool DebugInfoRequireFrameMoveInfo; // Defaults to "true" //===--- CBE Asm Translation Table -----------------------------------===// @@ -699,6 +703,9 @@ namespace llvm { const char *getDwarfExceptionSection() const { return DwarfExceptionSection; } + bool doesDebugInfoRequireFrameMoveInfo() const { + return DebugInfoRequireFrameMoveInfo; + } const char *const *getAsmCBE() const { return AsmTransCBE; } diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp index 68ec6c49ac3..569702c59df 100644 --- a/lib/CodeGen/DwarfWriter.cpp +++ b/lib/CodeGen/DwarfWriter.cpp @@ -827,7 +827,7 @@ protected: /// AsmPrinter *Asm; - /// TAI - Target Asm Printer. + /// TAI - Target asm information. const TargetAsmInfo *TAI; /// TD - Target data. @@ -3511,7 +3511,7 @@ public: shouldEmitTable = true; // See if we need frame move info. - if (MMI->hasDebugInfo() || + if ((MMI->hasDebugInfo() && TAI->doesDebugInfoRequireFrameMoveInfo()) || !MF->getFunction()->doesNotThrow() || UnwindTablesMandatory) shouldEmitMoves = true; diff --git a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp index 058de655efa..00e1aabdd12 100644 --- a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp +++ b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp @@ -66,6 +66,7 @@ DarwinTargetAsmInfo::DarwinTargetAsmInfo(const PPCTargetMachine &TM) DwarfEHFrameSection = ".section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support"; DwarfExceptionSection = ".section __DATA,__gcc_except_tab"; + DebugInfoRequireFrameMoveInfo = false; GlobalEHDirective = "\t.globl\t"; SupportsWeakOmittedEHFrame = false; diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp index 2adad3d7baa..8caff91e602 100644 --- a/lib/Target/TargetAsmInfo.cpp +++ b/lib/Target/TargetAsmInfo.cpp @@ -111,6 +111,7 @@ TargetAsmInfo::TargetAsmInfo() : DwarfMacInfoSection(".debug_macinfo"), DwarfEHFrameSection(".eh_frame"), DwarfExceptionSection(".gcc_except_table"), + DebugInfoRequireFrameMoveInfo(true), AsmTransCBE(0) { } diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp index 887c13dcc76..d0b3b818f1e 100644 --- a/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/lib/Target/X86/X86TargetAsmInfo.cpp @@ -124,6 +124,7 @@ X86TargetAsmInfo::X86TargetAsmInfo(const X86TargetMachine &TM) { DwarfEHFrameSection = ".section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support"; DwarfExceptionSection = ".section __DATA,__gcc_except_tab"; + DebugInfoRequireFrameMoveInfo = false; break; case X86Subtarget::isELF: