summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2009-08-27 03:29:26 +0000
committerBill Wendling <isanbard@gmail.com>2009-08-27 03:29:26 +0000
commitc7d230f7361bc451e95b15895c822c6ad275cd83 (patch)
tree17add4d485ece7c8642f094e458523882b5ef50b /llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp
parent352a49586ddf3dba2d00abd0e75d4bfa2a85b712 (diff)
downloadbcm5719-llvm-c7d230f7361bc451e95b15895c822c6ad275cd83.tar.gz
bcm5719-llvm-c7d230f7361bc451e95b15895c822c6ad275cd83.zip
--- Reverse-merging r80147 into '.':
A include/llvm/ADT/iterator.cmake U autoconf/configure.ac --- Reverse-merging r80161 into '.': U cmake/config-ix.cmake --- Reverse-merging r80171 into '.': U Makefile --- Reverse-merging r80173 into '.': U configure U include/llvm/Config/config.h.in --- Reverse-merging r80180 into '.': A include/llvm/ADT/iterator.h.in Despite common miscomceptions, iterator.h is alive and well. It broke the build bots for several hours. And yet no one bothered to look at them. Gabor and Doug, please review your changes and make sure that they actually build before resubmitting them. llvm-svn: 80197
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp69
1 files changed, 41 insertions, 28 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp
index 170ca241b6a..761686a4dd3 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp
+++ b/llvm/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");
OpenPOWER on IntegriCloud