diff options
author | Chris Lattner <sabre@nondot.org> | 2009-07-17 20:46:40 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-07-17 20:46:40 +0000 |
commit | e2cf37b88c089a71727b3ecd466856f0cd638813 (patch) | |
tree | 5519e3da8fc3474c49728b80a86d5c9f76f57db2 /lib/CodeGen/AsmPrinter/DwarfException.cpp | |
parent | 092a9dda2d13918a6410db26f41c7b5aa97ff989 (diff) |
Untangle a snarl that I discovered when updating the mangler,
starting in getCurrentFunctionEHName. Among other problems,
we would try to privative a "foo.eh" label, but end up emitting
the label as _Lfoo.eh instead of L_foo.eh on darwin. This is really
bad, and the linker has always tolerated these labels existing.
For now, just emit them as _foo.eh.
This patch also fixes problems with ".eh" labels on unnamed
functions and eliminates two strangely defined TargetAsmInfo
hooks.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76231 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/AsmPrinter/DwarfException.cpp')
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfException.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfException.cpp b/lib/CodeGen/AsmPrinter/DwarfException.cpp index 37466ab39a..b17b163c65 100644 --- a/lib/CodeGen/AsmPrinter/DwarfException.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfException.cpp @@ -57,8 +57,8 @@ void DwarfException::EmitCommonEHFrame(const Function *Personality, // Begin eh frame section. Asm->SwitchToTextSection(TAI->getDwarfEHFrameSection()); - if (!TAI->doesRequireNonLocalEHFrameLabel()) - O << TAI->getEHGlobalPrefix(); + if (TAI->is_EHSymbolPrivate()) + O << TAI->getPrivateGlobalPrefix(); O << "EH_frame" << Index << ":\n"; EmitLabel("section_eh_frame", Index); @@ -194,7 +194,8 @@ void DwarfException::EmitEHFrame(const FunctionEHFrameInfo &EHFrameInfo) { EmitLabel("eh_frame_begin", EHFrameInfo.Number); - if (TAI->doesRequireNonLocalEHFrameLabel()) { + if (!TAI->is_EHSymbolPrivate()) { +// FIXME: HOW ARE THESE TWO ARMS DIFFERENT?? EH_frame vs eh_frame_common? PrintRelDirective(true, true); PrintLabelName("eh_frame_begin", EHFrameInfo.Number); @@ -690,9 +691,8 @@ void DwarfException::EndFunction() { EmitExceptionTable(); // Save EH frame information - std::string Name; EHFrames.push_back( - FunctionEHFrameInfo(getAsm()->getCurrentFunctionEHName(MF, Name), + FunctionEHFrameInfo(getAsm()->getCurrentFunctionEHName(MF), SubprogramCount, MMI->getPersonalityIndex(), MF->getFrameInfo()->hasCalls(), |