summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2009-09-20 09:13:15 +0000
committerBill Wendling <isanbard@gmail.com>2009-09-20 09:13:15 +0000
commit692a3ea0b78a5ea426a5bb089878d157e5bb3616 (patch)
tree8cd3c94e0d4a01df367efb82f6b0c116567f784c /llvm/lib
parent13306a1fff738543748b7636d2f92c702a597b25 (diff)
downloadbcm5719-llvm-692a3ea0b78a5ea426a5bb089878d157e5bb3616.tar.gz
bcm5719-llvm-692a3ea0b78a5ea426a5bb089878d157e5bb3616.zip
--- Reverse-merging r82282 into '.':
U lib/CodeGen/AsmPrinter/DwarfException.cpp U lib/CodeGen/AsmPrinter/DwarfException.h --- Reverse-merging r82274 into '.': U lib/Target/TargetLoweringObjectFile.cpp G lib/CodeGen/AsmPrinter/DwarfException.cpp These revisions were breaking everything. llvm-svn: 82396
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp69
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfException.h6
-rw-r--r--llvm/lib/Target/TargetLoweringObjectFile.cpp5
3 files changed, 22 insertions, 58 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp
index ebe54102d6e..626523b820f 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp
@@ -74,25 +74,6 @@ unsigned DwarfException::SizeOfEncodedValue(unsigned Encoding) {
return 0;
}
-/// CreateLabelDiff - Emit a label and subtract it from the expression we
-/// already have. This is equivalent to emitting "foo - .", but we have to emit
-/// the label for "." directly.
-const MCExpr *DwarfException::CreateLabelDiff(const MCExpr *ExprRef,
- const char *LabelName,
- unsigned Index) {
- SmallString<64> Name;
- raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix()
- << LabelName << Asm->getFunctionNumber()
- << "_" << Index;
- MCSymbol *DotSym = Asm->OutContext.GetOrCreateSymbol(Name.str());
- Asm->OutStreamer.EmitLabel(DotSym);
-
- return MCBinaryExpr::CreateSub(ExprRef,
- MCSymbolRefExpr::Create(DotSym,
- Asm->OutContext),
- Asm->OutContext);
-}
-
/// EmitCIE - Emit a Common Information Entry (CIE). This holds information that
/// is shared among many Frame Description Entries. There is at least one CIE
/// in every non-empty .debug_frame section.
@@ -195,9 +176,23 @@ void DwarfException::EmitCIE(const Function *PersonalityFn, unsigned Index) {
// If there is a personality, we need to indicate the function's location.
if (PersonalityRef) {
- if (!IsPersonalityPCRel)
- PersonalityRef = CreateLabelDiff(PersonalityRef, "personalityref_addr",
- Index);
+ // If the reference to the personality function symbol is not already
+ // pc-relative, then we need to subtract our current address from it. Do
+ // this by emitting a label and subtracting it from the expression we
+ // already have. This is equivalent to emitting "foo - .", but we have to
+ // emit the label for "." directly.
+ if (!IsPersonalityPCRel) {
+ SmallString<64> Name;
+ raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix()
+ << "personalityref_addr" << Asm->getFunctionNumber() << "_" << Index;
+ MCSymbol *DotSym = Asm->OutContext.GetOrCreateSymbol(Name.str());
+ Asm->OutStreamer.EmitLabel(DotSym);
+
+ PersonalityRef =
+ MCBinaryExpr::CreateSub(PersonalityRef,
+ MCSymbolRefExpr::Create(DotSym,Asm->OutContext),
+ Asm->OutContext);
+ }
O << MAI->getData32bitsDirective();
PersonalityRef->print(O, MAI);
@@ -898,34 +893,14 @@ void DwarfException::EmitExceptionTable() {
// of the catch clauses as they appear in the source code, and must be kept in
// the same order. As a result, changing the order of the catch clause would
// change the semantics of the program.
- const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
- unsigned Index = 1;
-
for (std::vector<GlobalVariable *>::const_reverse_iterator
- I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I, ++Index) {
- const GlobalVariable *TI = *I;
-
- if (TI) {
- if (TTypeFormat == dwarf::DW_EH_PE_absptr ||
- TI->getLinkage() == GlobalValue::InternalLinkage) {
- // Print out the unadorned name of the type info.
- PrintRelDirective();
- O << Asm->Mang->getMangledName(TI);
- } else {
- bool IsTypeInfoIndirect = false, IsTypeInfoPCRel = false;
- const MCExpr *TypeInfoRef =
- TLOF.getSymbolForDwarfGlobalReference(TI, Asm->Mang, Asm->MMI,
- IsTypeInfoIndirect,
- IsTypeInfoPCRel);
+ I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I) {
+ const GlobalVariable *GV = *I;
+ PrintRelDirective();
- if (!IsTypeInfoPCRel)
- TypeInfoRef = CreateLabelDiff(TypeInfoRef, "typeinforef_addr", Index);
-
- O << MAI->getData32bitsDirective();
- TypeInfoRef->print(O, MAI);
- }
+ if (GV) {
+ O << Asm->Mang->getMangledName(GV);
} else {
- PrintRelDirective();
O << "0x0";
}
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfException.h b/llvm/lib/CodeGen/AsmPrinter/DwarfException.h
index 7e898768c4d..f6f50255f2e 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfException.h
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfException.h
@@ -25,7 +25,6 @@ namespace llvm {
struct LandingPadInfo;
class MachineModuleInfo;
class MCAsmInfo;
-class MCExpr;
class Timer;
class raw_ostream;
@@ -169,11 +168,6 @@ class VISIBILITY_HIDDEN DwarfException : public Dwarf {
const SmallVectorImpl<unsigned> &FirstActions);
void EmitExceptionTable();
- /// CreateLabelDiff - Emit a label and subtract it from the expression we
- /// already have. This is equivalent to emitting "foo - .", but we have to
- /// emit the label for "." directly.
- const MCExpr *CreateLabelDiff(const MCExpr *ExprRef, const char *LabelName,
- unsigned Index);
public:
//===--------------------------------------------------------------------===//
// Main entry points.
diff --git a/llvm/lib/Target/TargetLoweringObjectFile.cpp b/llvm/lib/Target/TargetLoweringObjectFile.cpp
index 3202c4ce469..c1aab9921fb 100644
--- a/llvm/lib/Target/TargetLoweringObjectFile.cpp
+++ b/llvm/lib/Target/TargetLoweringObjectFile.cpp
@@ -782,13 +782,8 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
}
// Exception Handling.
-#if 0
- LSDASection = getMachOSection("__TEXT", "__gcc_except_tab", 0,
- SectionKind::getReadOnly());
-#else
LSDASection = getMachOSection("__DATA", "__gcc_except_tab", 0,
SectionKind::getDataRel());
-#endif
EHFrameSection =
getMachOSection("__TEXT", "__eh_frame",
MCSectionMachO::S_COALESCED |
OpenPOWER on IntegriCloud