74 lines
2.6 KiB
C++
74 lines
2.6 KiB
C++
//===- StringEntryToDwarfStringPoolEntryMap.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_STRINGENTRYTODWARFSTRINGPOOLENTRYMAP_H
|
|
#define LLVM_LIB_DWARFLINKER_PARALLEL_STRINGENTRYTODWARFSTRINGPOOLENTRYMAP_H
|
|
|
|
#include "DWARFLinkerGlobalData.h"
|
|
#include "llvm/ADT/SmallVector.h"
|
|
#include "llvm/DWARFLinker/StringPool.h"
|
|
|
|
namespace llvm {
|
|
namespace dwarf_linker {
|
|
namespace parallel {
|
|
|
|
/// This class creates a DwarfStringPoolEntry for the corresponding StringEntry.
|
|
class StringEntryToDwarfStringPoolEntryMap {
|
|
public:
|
|
StringEntryToDwarfStringPoolEntryMap(LinkingGlobalData &GlobalData)
|
|
: GlobalData(GlobalData) {}
|
|
~StringEntryToDwarfStringPoolEntryMap() {}
|
|
|
|
/// Create DwarfStringPoolEntry for specified StringEntry if necessary.
|
|
/// Initialize DwarfStringPoolEntry with initial values.
|
|
DwarfStringPoolEntryWithExtString *add(const StringEntry *String) {
|
|
DwarfStringPoolEntriesTy::iterator it = DwarfStringPoolEntries.find(String);
|
|
|
|
if (it == DwarfStringPoolEntries.end()) {
|
|
DwarfStringPoolEntryWithExtString *DataPtr =
|
|
GlobalData.getAllocator()
|
|
.Allocate<DwarfStringPoolEntryWithExtString>();
|
|
DataPtr->String = GlobalData.translateString(String->getKey());
|
|
DataPtr->Index = DwarfStringPoolEntry::NotIndexed;
|
|
DataPtr->Offset = 0;
|
|
DataPtr->Symbol = nullptr;
|
|
it = DwarfStringPoolEntries.insert(std::make_pair(String, DataPtr)).first;
|
|
}
|
|
|
|
assert(it->second != nullptr);
|
|
return it->second;
|
|
}
|
|
|
|
/// Returns already existed DwarfStringPoolEntry for the specified
|
|
/// StringEntry.
|
|
DwarfStringPoolEntryWithExtString *
|
|
getExistingEntry(const StringEntry *String) const {
|
|
DwarfStringPoolEntriesTy::const_iterator it =
|
|
DwarfStringPoolEntries.find(String);
|
|
|
|
assert(it != DwarfStringPoolEntries.end());
|
|
assert(it->second != nullptr);
|
|
return it->second;
|
|
}
|
|
|
|
/// Erase contents of StringsForEmission.
|
|
void clear() { DwarfStringPoolEntries.clear(); }
|
|
|
|
protected:
|
|
using DwarfStringPoolEntriesTy =
|
|
DenseMap<const StringEntry *, DwarfStringPoolEntryWithExtString *>;
|
|
DwarfStringPoolEntriesTy DwarfStringPoolEntries;
|
|
|
|
LinkingGlobalData &GlobalData;
|
|
};
|
|
|
|
} // end of namespace parallel
|
|
} // end of namespace dwarf_linker
|
|
} // end of namespace llvm
|
|
|
|
#endif // LLVM_LIB_DWARFLINKER_PARALLEL_STRINGENTRYTODWARFSTRINGPOOLENTRYMAP_H
|