diff options
Diffstat (limited to 'lib/CodeGen/AsmPrinter/DwarfException.cpp')
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfException.cpp | 69 |
1 files changed, 41 insertions, 28 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfException.cpp b/lib/CodeGen/AsmPrinter/DwarfException.cpp index 170ca24..761686a 100644 --- a/lib/CodeGen/AsmPrinter/DwarfException.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfException.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file contains support for writing dwarf exception info into asm files. +// This file contains support for writing DWARF exception info into asm files. // //===----------------------------------------------------------------------===// @@ -98,16 +98,19 @@ void DwarfException::EmitCIE(const Function *Personality, unsigned Index) { // If there is a personality, we need to indicate the function's location. if (Personality) { + unsigned Encoding = 0; Asm->EmitULEB128Bytes(7); Asm->EOL("Augmentation Size"); if (MAI->getNeedsIndirectEncoding()) { - Asm->EmitInt8(dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4 | - dwarf::DW_EH_PE_indirect); - Asm->EOL("Personality (pcrel sdata4 indirect)"); + Encoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4 | + dwarf::DW_EH_PE_indirect; + Asm->EmitInt8(Encoding); + Asm->EOL("Personality", Encoding); } else { - Asm->EmitInt8(dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4); - Asm->EOL("Personality (pcrel sdata4)"); + Encoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; + Asm->EmitInt8(Encoding); + Asm->EOL("Personality", Encoding); } PrintRelDirective(true); @@ -118,17 +121,20 @@ void DwarfException::EmitCIE(const Function *Personality, unsigned Index) { O << "-" << MAI->getPCSymbol(); Asm->EOL("Personality"); - Asm->EmitInt8(dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4); - Asm->EOL("LSDA Encoding (pcrel sdata4)"); + Encoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; + Asm->EmitInt8(Encoding); + Asm->EOL("LSDA Encoding", Encoding); - Asm->EmitInt8(dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4); - Asm->EOL("FDE Encoding (pcrel sdata4)"); + Encoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; + Asm->EmitInt8(Encoding); + Asm->EOL("FDE Encoding", Encoding); } else { Asm->EmitULEB128Bytes(1); Asm->EOL("Augmentation Size"); - Asm->EmitInt8(dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4); - Asm->EOL("FDE Encoding (pcrel sdata4)"); + unsigned Encoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; + Asm->EmitInt8(Encoding); + Asm->EOL("FDE Encoding", Encoding); } // Indicate locations of general callee saved registers in frame. @@ -598,15 +604,17 @@ void DwarfException::EmitExceptionTable() { } // Emit the header. - Asm->EmitInt8(dwarf::DW_EH_PE_omit); - Asm->EOL("@LPStart format (DW_EH_PE_omit)"); + unsigned Encoding = dwarf::DW_EH_PE_omit; + Asm->EmitInt8(Encoding); + Asm->EOL("@LPStart format", Encoding); #if 0 if (TypeInfos.empty() && FilterIds.empty()) { // 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); - Asm->EOL("@TType format (DW_EH_PE_omit)"); + Encoding = dwarf::DW_EH_PE_omit; + Asm->EmitInt8(Encoding); + Asm->EOL("@TType format", Encoding); } else { // Okay, we have actual filters or typeinfos to emit. As such, we need to // pick a type encoding for them. We're about to emit a list of pointers to @@ -634,12 +642,13 @@ void DwarfException::EmitExceptionTable() { // if (LSDASection->isWritable() || Asm->TM.getRelocationModel() == Reloc::Static) { - Asm->EmitInt8(DW_EH_PE_absptr); - Asm->EOL("TType format (DW_EH_PE_absptr)"); + Encoding = DW_EH_PE_absptr; + Asm->EmitInt8(Encoding); + Asm->EOL("TType format", Encoding); } else { + Encoding = DW_EH_PE_pcrel | DW_EH_PE_indirect | DW_EH_PE_sdata4; 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->EOL("TType format", Encoding); } Asm->EmitULEB128Bytes(TypeOffset); Asm->EOL("TType base offset"); @@ -649,11 +658,13 @@ void DwarfException::EmitExceptionTable() { // 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 (DW_EH_PE_omit)"); + Encoding = dwarf::DW_EH_PE_omit; + Asm->EmitInt8(Encoding); + Asm->EOL("@TType format", Encoding); } else { - Asm->EmitInt8(dwarf::DW_EH_PE_absptr); - Asm->EOL("@TType format (DW_EH_PE_absptr)"); + Encoding = dwarf::DW_EH_PE_absptr; + Asm->EmitInt8(Encoding); + Asm->EOL("@TType format", Encoding); Asm->EmitULEB128Bytes(TypeOffset); Asm->EOL("@TType base offset"); } @@ -661,8 +672,9 @@ void DwarfException::EmitExceptionTable() { // SjLj Exception handilng if (MAI->getExceptionHandlingType() == ExceptionHandling::SjLj) { - Asm->EmitInt8(dwarf::DW_EH_PE_udata4); - Asm->EOL("Call site format (DW_EH_PE_udata4)"); + Encoding = dwarf::DW_EH_PE_udata4; + Asm->EmitInt8(Encoding); + Asm->EOL("Call site format", Encoding); Asm->EmitULEB128Bytes(SizeSites); Asm->EOL("Call site table length"); @@ -714,8 +726,9 @@ void DwarfException::EmitExceptionTable() { // will call `terminate()'. // Emit the landing pad call site table. - Asm->EmitInt8(dwarf::DW_EH_PE_udata4); - Asm->EOL("Call site format (DW_EH_PE_udata4)"); + Encoding = dwarf::DW_EH_PE_udata4; + Asm->EmitInt8(Encoding); + Asm->EOL("Call site format", Encoding); Asm->EmitULEB128Bytes(SizeSites); Asm->EOL("Call site table size"); |