DwarfException.cpp (199481) | DwarfException.cpp (199511) |
---|---|
1//===-- CodeGen/AsmPrinter/DwarfException.cpp - Dwarf Exception Impl ------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 713 unchanged lines hidden (view full) --- 722 // that is updated by the dynamic linker. This is easy enough, but we 723 // need to tell the personality function of the unwinder to indirect 724 // through the dyld stub. 725 // 726 // FIXME: When (3) is actually implemented, we'll have to emit the stubs 727 // somewhere. This predicate should be moved to a shared location that is 728 // in target-independent code. 729 // | 1//===-- CodeGen/AsmPrinter/DwarfException.cpp - Dwarf Exception Impl ------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 713 unchanged lines hidden (view full) --- 722 // that is updated by the dynamic linker. This is easy enough, but we 723 // need to tell the personality function of the unwinder to indirect 724 // through the dyld stub. 725 // 726 // FIXME: When (3) is actually implemented, we'll have to emit the stubs 727 // somewhere. This predicate should be moved to a shared location that is 728 // in target-independent code. 729 // |
730 if (LSDASection->getKind().isWriteable() || | 730 if ((LSDASection->getKind().isWriteable() && 731 !LSDASection->getKind().isReadOnlyWithRel()) || |
731 Asm->TM.getRelocationModel() == Reloc::Static) 732 TTypeFormat = dwarf::DW_EH_PE_absptr; 733 else 734 TTypeFormat = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | 735 dwarf::DW_EH_PE_sdata4; 736 737 TypeFormatSize = SizeOfEncodedValue(TTypeFormat); 738 } --- 173 unchanged lines hidden (view full) --- 912 // Self-relative signed displacement in bytes of the next action record, 913 // or 0 if there is no next action record. 914 915 Asm->EmitSLEB128Bytes(Action.NextAction); 916 Asm->EOL("Next action"); 917 } 918 919 // Emit the Catch TypeInfos. | 732 Asm->TM.getRelocationModel() == Reloc::Static) 733 TTypeFormat = dwarf::DW_EH_PE_absptr; 734 else 735 TTypeFormat = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | 736 dwarf::DW_EH_PE_sdata4; 737 738 TypeFormatSize = SizeOfEncodedValue(TTypeFormat); 739 } --- 173 unchanged lines hidden (view full) --- 913 // Self-relative signed displacement in bytes of the next action record, 914 // or 0 if there is no next action record. 915 916 Asm->EmitSLEB128Bytes(Action.NextAction); 917 Asm->EOL("Next action"); 918 } 919 920 // Emit the Catch TypeInfos. |
921 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering(); 922 unsigned Index = 1; 923 |
|
920 for (std::vector<GlobalVariable *>::const_reverse_iterator 921 I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I) { | 924 for (std::vector<GlobalVariable *>::const_reverse_iterator 925 I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I) { |
922 const GlobalVariable *GV = *I; 923 PrintRelDirective(); | 926 const GlobalVariable *TI = *I; |
924 | 927 |
925 if (GV) { 926 O << Asm->Mang->getMangledName(GV); | 928 if (TI) { 929 if (!LSDASection->getKind().isReadOnlyWithRel() && 930 (TTypeFormat == dwarf::DW_EH_PE_absptr || 931 TI->getLinkage() == GlobalValue::InternalLinkage)) { 932 // Print out the unadorned name of the type info. 933 PrintRelDirective(); 934 O << Asm->Mang->getMangledName(TI); 935 } else { 936 bool IsTypeInfoIndirect = false, IsTypeInfoPCRel = false; 937 const MCExpr *TypeInfoRef = 938 TLOF.getSymbolForDwarfGlobalReference(TI, Asm->Mang, Asm->MMI, 939 IsTypeInfoIndirect, 940 IsTypeInfoPCRel); 941 942 if (!IsTypeInfoPCRel) 943 TypeInfoRef = CreateLabelDiff(TypeInfoRef, "typeinforef_addr", 944 Index++); 945 946 O << MAI->getData32bitsDirective(); 947 TypeInfoRef->print(O, MAI); 948 } |
927 } else { | 949 } else { |
950 PrintRelDirective(); |
|
928 O << "0x0"; 929 } 930 931 Asm->EOL("TypeInfo"); 932 } 933 934 // Emit the Exception Specifications. 935 for (std::vector<unsigned>::const_iterator --- 99 unchanged lines hidden --- | 951 O << "0x0"; 952 } 953 954 Asm->EOL("TypeInfo"); 955 } 956 957 // Emit the Exception Specifications. 958 for (std::vector<unsigned>::const_iterator --- 99 unchanged lines hidden --- |