//===- AcceleratorRecordsSaver.h --------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_DWARFLINKER_PARALLEL_ACCELERATORRECORDSSAVER_H #define LLVM_LIB_DWARFLINKER_PARALLEL_ACCELERATORRECORDSSAVER_H #include "DIEAttributeCloner.h" #include "DWARFLinkerCompileUnit.h" #include "DWARFLinkerGlobalData.h" #include "DWARFLinkerTypeUnit.h" namespace llvm { namespace dwarf_linker { namespace parallel { /// This class helps to store information for accelerator entries. /// It prepares accelerator info for the certain DIE and store it inside /// OutUnit. class AcceleratorRecordsSaver { public: AcceleratorRecordsSaver(LinkingGlobalData &GlobalData, CompileUnit &InUnit, CompileUnit *OutUnit) : AcceleratorRecordsSaver(GlobalData, InUnit, CompileUnit::OutputUnitVariantPtr(OutUnit)) {} AcceleratorRecordsSaver(LinkingGlobalData &GlobalData, CompileUnit &InUnit, TypeUnit *OutUnit) : AcceleratorRecordsSaver(GlobalData, InUnit, CompileUnit::OutputUnitVariantPtr(OutUnit)) {} /// Save accelerator info for the specified \p OutDIE inside OutUnit. /// Side effects: set attributes in \p AttrInfo. void save(const DWARFDebugInfoEntry *InputDieEntry, DIE *OutDIE, AttributesInfo &AttrInfo, TypeEntry *TypeEntry); protected: AcceleratorRecordsSaver(LinkingGlobalData &GlobalData, CompileUnit &InUnit, CompileUnit::OutputUnitVariantPtr OutUnit) : GlobalData(GlobalData), InUnit(InUnit), OutUnit(OutUnit) {} void saveObjC(const DWARFDebugInfoEntry *InputDieEntry, DIE *OutDIE, AttributesInfo &AttrInfo); void saveNameRecord(StringEntry *Name, DIE *OutDIE, dwarf::Tag Tag, bool AvoidForPubSections); void saveNamespaceRecord(StringEntry *Name, DIE *OutDIE, dwarf::Tag Tag, TypeEntry *TypeEntry); void saveObjCNameRecord(StringEntry *Name, DIE *OutDIE, dwarf::Tag Tag); void saveTypeRecord(StringEntry *Name, DIE *OutDIE, dwarf::Tag Tag, uint32_t QualifiedNameHash, bool ObjcClassImplementation, TypeEntry *TypeEntry); /// Global linking data. LinkingGlobalData &GlobalData; /// Comiple unit corresponding to input DWARF. CompileUnit &InUnit; /// Compile unit or Artificial type unit corresponding to the output DWARF. CompileUnit::OutputUnitVariantPtr OutUnit; }; } // end of namespace parallel } // end of namespace dwarf_linker } // end of namespace llvm #endif // LLVM_LIB_DWARFLINKER_PARALLEL_ACCELERATORRECORDSSAVER_H