diff options
author | Bill Wendling <isanbard@gmail.com> | 2009-09-10 01:12:47 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2009-09-10 01:12:47 +0000 |
commit | 43e484fbcf6a40a70d9a5c7ea142f37416ef1e68 (patch) | |
tree | 39f91267cd38facc8850a26f2792ac55128acdb2 /lib/CodeGen/AsmPrinter/DwarfException.cpp | |
parent | b8b70521def36d0da103b8a103872f37b3b49aa2 (diff) |
Remove the "#if 0" that Noone loved. It wasn't really necessary, because the
code within it was the same inside and out. There's still a problem of the
TypeInfoSize should be the size of the TType format encoding (at least that's
what GCC thinks it should be).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81417 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/AsmPrinter/DwarfException.cpp')
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfException.cpp | 47 |
1 files changed, 20 insertions, 27 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfException.cpp b/lib/CodeGen/AsmPrinter/DwarfException.cpp index 1254372137..b4cfc267d9 100644 --- a/lib/CodeGen/AsmPrinter/DwarfException.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfException.cpp @@ -17,6 +17,7 @@ #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineLocation.h" +#include "llvm/MC/MCSection.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/Target/TargetData.h" @@ -616,7 +617,8 @@ void DwarfException::EmitExceptionTable() { } // Type infos. - const unsigned TypeInfoSize = TD->getPointerSize(); // DW_EH_PE_absptr + // FIXME: Don't hardcode. Should be TType's format encoding size. + unsigned TypeInfoSize = SizeOfEncodedValue(dwarf::DW_EH_PE_absptr); unsigned SizeTypes = TypeInfos.size() * TypeInfoSize; unsigned TypeOffset = sizeof(int8_t) + // Call site format @@ -654,8 +656,10 @@ void DwarfException::EmitExceptionTable() { Asm->EmitInt8(dwarf::DW_EH_PE_omit); Asm->EOL("@LPStart format", dwarf::DW_EH_PE_omit); -#if 0 - if (TypeInfos.empty() && FilterIds.empty()) { + // For SjLj exceptions, if there is no TypeInfo, then we just explicitly + // say that we're omitting that bit. + // FIXME: does this apply to Dwarf also? The above #if 0 implies yes? + if (!HaveTTData) { // If there are no typeinfos or filters, there is nothing to emit, optimize // by specifying the "omit" encoding. Asm->EmitInt8(dwarf::DW_EH_PE_omit); @@ -681,36 +685,25 @@ void DwarfException::EmitExceptionTable() { // need to tell the personality function of the unwinder to indirect // through the dyld stub. // - // FIXME: When this is actually implemented, we'll have to emit the stubs + // FIXME: When (3) is actually implemented, we'll have to emit the stubs // somewhere. This predicate should be moved to a shared location that is // in target-independent code. // - if (LSDASection->isWritable() || - Asm->TM.getRelocationModel() == Reloc::Static) { - Asm->EmitInt8(DW_EH_PE_absptr); - Asm->EOL("TType format (DW_EH_PE_absptr)"); - } else { - Asm->EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_indirect | DW_EH_PE_sdata4); - Asm->EOL("TType format (DW_EH_PE_pcrel | DW_EH_PE_indirect" - " | DW_EH_PE_sdata4)"); - } - Asm->EmitULEB128Bytes(TypeOffset); - Asm->EOL("TType base offset"); - } -#else - // For SjLj exceptions, if there is no TypeInfo, then we just explicitly - // say that we're omitting that bit. - // FIXME: does this apply to Dwarf also? The above #if 0 implies yes? - if (!HaveTTData) { - Asm->EmitInt8(dwarf::DW_EH_PE_omit); - Asm->EOL("@TType format", dwarf::DW_EH_PE_omit); - } else { - Asm->EmitInt8(dwarf::DW_EH_PE_absptr); - Asm->EOL("@TType format", dwarf::DW_EH_PE_absptr); + unsigned TTypeFormat; + + if (LSDASection->getKind().isWriteable() || + Asm->TM.getRelocationModel() == Reloc::Static) + TTypeFormat = dwarf::DW_EH_PE_absptr; + else + TTypeFormat = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | + dwarf::DW_EH_PE_sdata4; + + Asm->EmitInt8(TTypeFormat); + Asm->EOL("@TType format", TTypeFormat); + Asm->EmitULEB128Bytes(TypeOffset); Asm->EOL("@TType base offset"); } -#endif // SjLj Exception handilng if (IsSJLJ) { |