diff options
| author | Bill Wendling <isanbard@gmail.com> | 2008-12-24 08:05:17 +0000 |
|---|---|---|
| committer | Bill Wendling <isanbard@gmail.com> | 2008-12-24 08:05:17 +0000 |
| commit | d6bd7e93727115e55929e7eb3ed7e5e984956881 (patch) | |
| tree | 042830e4748305d636c8fc031fc463f2aaa6558c /llvm/lib/CodeGen | |
| parent | 2907ab7d779cd7eb5f7704f9b62419251d7a4b37 (diff) | |
| download | bcm5719-llvm-d6bd7e93727115e55929e7eb3ed7e5e984956881.tar.gz bcm5719-llvm-d6bd7e93727115e55929e7eb3ed7e5e984956881.zip | |
Darwin likes for the EH frame to be non-local.
llvm-svn: 61420
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index 42ed34879e3..70d4d1ffecc 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp @@ -2963,7 +2963,10 @@ private: // Begin eh frame section. Asm->SwitchToTextSection(TAI->getDwarfEHFrameSection()); - O << TAI->getEHGlobalPrefix() << "EH_frame" << Index << ":\n"; + + if (!TAI->doesRequireNonLocalEHFrameLabel()) + O << TAI->getEHGlobalPrefix(); + O << "EH_frame" << Index << ":\n"; EmitLabel("section_eh_frame", Index); // Define base labels. @@ -3102,9 +3105,18 @@ private: EmitLabel("eh_frame_begin", EHFrameInfo.Number); - EmitSectionOffset("eh_frame_begin", "eh_frame_common", - EHFrameInfo.Number, EHFrameInfo.PersonalityIndex, - true, true, false); + if (TAI->doesRequireNonLocalEHFrameLabel()) { + PrintRelDirective(true, true); + PrintLabelName("eh_frame_begin", EHFrameInfo.Number); + + if (!TAI->isAbsoluteEHSectionOffsets()) + O << "-EH_frame" << EHFrameInfo.PersonalityIndex; + } else { + EmitSectionOffset("eh_frame_begin", "eh_frame_common", + EHFrameInfo.Number, EHFrameInfo.PersonalityIndex, + true, true, false); + } + Asm->EOL("FDE CIE offset"); EmitReference("eh_func_begin", EHFrameInfo.Number, true, true); |

