diff options
| author | Dale Johannesen <dalej@apple.com> | 2008-03-31 23:40:23 +0000 |
|---|---|---|
| committer | Dale Johannesen <dalej@apple.com> | 2008-03-31 23:40:23 +0000 |
| commit | 7d02cf3c9c23727be1e837ce3e2a6cc7ecaf1636 (patch) | |
| tree | 55529d204c6f6539a6f42d40457693279a0f8dff /llvm/lib/CodeGen/DwarfWriter.cpp | |
| parent | a9590d1c0d0f99702a16cf387cf53f28803c962f (diff) | |
| download | bcm5719-llvm-7d02cf3c9c23727be1e837ce3e2a6cc7ecaf1636.tar.gz bcm5719-llvm-7d02cf3c9c23727be1e837ce3e2a6cc7ecaf1636.zip | |
Emit exception handling info for functions which are
not marked nounwind, or for all functions when -enable-eh
is set, provided the target supports Dwarf EH.
llvm-gcc generates nounwind in the right places; other FEs
will need to do so also. Given such a FE, -enable-eh should
no longer be needed.
llvm-svn: 49006
Diffstat (limited to 'llvm/lib/CodeGen/DwarfWriter.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/DwarfWriter.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/DwarfWriter.cpp b/llvm/lib/CodeGen/DwarfWriter.cpp index e72ff07a9d7..3296e114df0 100644 --- a/llvm/lib/CodeGen/DwarfWriter.cpp +++ b/llvm/lib/CodeGen/DwarfWriter.cpp @@ -2778,9 +2778,13 @@ private: std::vector<FunctionEHFrameInfo> EHFrames; - /// shouldEmit - Flag to indicate if debug information should be emitted. - /// + /// shouldEmit - Per-function flag to indicate if EH information should + /// be emitted. bool shouldEmit; + + /// shouldEmitModule - Per-module flag to indicate if EH information should + /// be emitted. + bool shouldEmitModule; /// EmitCommonEHFrame - Emit the common eh unwind frame. /// @@ -3368,6 +3372,7 @@ public: DwarfException(std::ostream &OS, AsmPrinter *A, const TargetAsmInfo *T) : Dwarf(OS, A, T, "eh") , shouldEmit(false) + , shouldEmitModule(false) {} virtual ~DwarfException() {} @@ -3387,7 +3392,7 @@ public: /// EndModule - Emit all exception information that should come after the /// content. void EndModule() { - if (!shouldEmit) return; + if (!shouldEmitModule) return; const std::vector<Function *> Personalities = MMI->getPersonalities(); for (unsigned i =0; i < Personalities.size(); ++i) @@ -3403,13 +3408,14 @@ public: void BeginFunction(MachineFunction *MF) { this->MF = MF; - if (MMI && - ExceptionHandling && + shouldEmit = false; + if ((ExceptionHandling || !MF->getFunction()->doesNotThrow()) && TAI->doesSupportExceptionHandling()) { shouldEmit = true; // Assumes in correct section after the entry point. EmitLabel("eh_func_begin", ++SubprogramCount); } + shouldEmitModule |= shouldEmit; } /// EndFunction - Gather and emit post-function exception information. |

