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 | bf56268ff994ae17f54fef3206698f8cc1596828 (patch) | |
| tree | 474ac470cebcdbf18a381771b31db7319f584ada /llvm/lib/CodeGen/AsmPrinter | |
| parent | a944234a1e378aab1b1fdae26789504dedd01775 (diff) | |
| download | bcm5719-llvm-bf56268ff994ae17f54fef3206698f8cc1596828.tar.gz bcm5719-llvm-bf56268ff994ae17f54fef3206698f8cc1596828.zip | |
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).
llvm-svn: 81417
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp | 47 |
1 files changed, 20 insertions, 27 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp index 12543721373..b4cfc267d9f 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp +++ b/llvm/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) { |

