12357e899Savl-llvm //===- StringEntryToDwarfStringPoolEntryMap.h -------------------*- C++ -*-===// 22357e899Savl-llvm // 32357e899Savl-llvm // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42357e899Savl-llvm // See https://llvm.org/LICENSE.txt for license information. 52357e899Savl-llvm // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 62357e899Savl-llvm // 72357e899Savl-llvm //===----------------------------------------------------------------------===// 82357e899Savl-llvm 92357e899Savl-llvm #ifndef LLVM_LIB_DWARFLINKER_PARALLEL_STRINGENTRYTODWARFSTRINGPOOLENTRYMAP_H 102357e899Savl-llvm #define LLVM_LIB_DWARFLINKER_PARALLEL_STRINGENTRYTODWARFSTRINGPOOLENTRYMAP_H 112357e899Savl-llvm 122357e899Savl-llvm #include "DWARFLinkerGlobalData.h" 132357e899Savl-llvm #include "llvm/ADT/SmallVector.h" 142357e899Savl-llvm #include "llvm/DWARFLinker/StringPool.h" 152357e899Savl-llvm 162357e899Savl-llvm namespace llvm { 172357e899Savl-llvm namespace dwarf_linker { 182357e899Savl-llvm namespace parallel { 192357e899Savl-llvm 202357e899Savl-llvm /// This class creates a DwarfStringPoolEntry for the corresponding StringEntry. 212357e899Savl-llvm class StringEntryToDwarfStringPoolEntryMap { 222357e899Savl-llvm public: StringEntryToDwarfStringPoolEntryMap(LinkingGlobalData & GlobalData)232357e899Savl-llvm StringEntryToDwarfStringPoolEntryMap(LinkingGlobalData &GlobalData) 242357e899Savl-llvm : GlobalData(GlobalData) {} ~StringEntryToDwarfStringPoolEntryMap()252357e899Savl-llvm ~StringEntryToDwarfStringPoolEntryMap() {} 262357e899Savl-llvm 272357e899Savl-llvm /// Create DwarfStringPoolEntry for specified StringEntry if necessary. 282357e899Savl-llvm /// Initialize DwarfStringPoolEntry with initial values. add(const StringEntry * String)292357e899Savl-llvm DwarfStringPoolEntryWithExtString *add(const StringEntry *String) { 302357e899Savl-llvm DwarfStringPoolEntriesTy::iterator it = DwarfStringPoolEntries.find(String); 312357e899Savl-llvm 322357e899Savl-llvm if (it == DwarfStringPoolEntries.end()) { 332357e899Savl-llvm DwarfStringPoolEntryWithExtString *DataPtr = 342357e899Savl-llvm GlobalData.getAllocator() 352357e899Savl-llvm .Allocate<DwarfStringPoolEntryWithExtString>(); 36*32a6e9d6SJonas Devlieghere DataPtr->String = String->getKey(); 372357e899Savl-llvm DataPtr->Index = DwarfStringPoolEntry::NotIndexed; 382357e899Savl-llvm DataPtr->Offset = 0; 392357e899Savl-llvm DataPtr->Symbol = nullptr; 402357e899Savl-llvm it = DwarfStringPoolEntries.insert(std::make_pair(String, DataPtr)).first; 412357e899Savl-llvm } 422357e899Savl-llvm 432357e899Savl-llvm assert(it->second != nullptr); 442357e899Savl-llvm return it->second; 452357e899Savl-llvm } 462357e899Savl-llvm 472357e899Savl-llvm /// Returns already existed DwarfStringPoolEntry for the specified 482357e899Savl-llvm /// StringEntry. 492357e899Savl-llvm DwarfStringPoolEntryWithExtString * getExistingEntry(const StringEntry * String)502357e899Savl-llvm getExistingEntry(const StringEntry *String) const { 512357e899Savl-llvm DwarfStringPoolEntriesTy::const_iterator it = 522357e899Savl-llvm DwarfStringPoolEntries.find(String); 532357e899Savl-llvm 542357e899Savl-llvm assert(it != DwarfStringPoolEntries.end()); 552357e899Savl-llvm assert(it->second != nullptr); 562357e899Savl-llvm return it->second; 572357e899Savl-llvm } 582357e899Savl-llvm 592357e899Savl-llvm /// Erase contents of StringsForEmission. clear()602357e899Savl-llvm void clear() { DwarfStringPoolEntries.clear(); } 612357e899Savl-llvm 622357e899Savl-llvm protected: 632357e899Savl-llvm using DwarfStringPoolEntriesTy = 642357e899Savl-llvm DenseMap<const StringEntry *, DwarfStringPoolEntryWithExtString *>; 652357e899Savl-llvm DwarfStringPoolEntriesTy DwarfStringPoolEntries; 662357e899Savl-llvm 672357e899Savl-llvm LinkingGlobalData &GlobalData; 682357e899Savl-llvm }; 692357e899Savl-llvm 702357e899Savl-llvm } // end of namespace parallel 712357e899Savl-llvm } // end of namespace dwarf_linker 722357e899Savl-llvm } // end of namespace llvm 732357e899Savl-llvm 742357e899Savl-llvm #endif // LLVM_LIB_DWARFLINKER_PARALLEL_STRINGENTRYTODWARFSTRINGPOOLENTRYMAP_H 75