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 | 722f5f1cfb9a5e59a4c00986d81b04b0c015703d (patch) | |
tree | 498a47db9b3bb7557d939057d5e7876a3cf0c93e /lib/CodeGen/AsmPrinter/DwarfWriter.cpp | |
parent | d4121bef3cf3af51b80c2d499085a96aca5982ed (diff) |
Darwin likes for the EH frame to be non-local.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61420 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/AsmPrinter/DwarfWriter.cpp')
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfWriter.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index 42ed34879e..70d4d1ffec 100644 --- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/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); |