mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	--- 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82396 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -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. | ||||
|          I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I) { | ||||
|     const GlobalVariable *GV = *I; | ||||
|     PrintRelDirective(); | ||||
|         O << Asm->Mang->getMangledName(TI); | ||||
|       } else { | ||||
|         bool IsTypeInfoIndirect = false, IsTypeInfoPCRel = false; | ||||
|         const MCExpr *TypeInfoRef = | ||||
|           TLOF.getSymbolForDwarfGlobalReference(TI, Asm->Mang, Asm->MMI, | ||||
|                                                 IsTypeInfoIndirect, | ||||
|                                                 IsTypeInfoPCRel); | ||||
|  | ||||
|         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"; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
| @@ -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 | | ||||
|   | ||||
		Reference in New Issue
	
	Block a user