You've already forked linux-packaging-mono
Imported Upstream version 5.18.0.205
Former-commit-id: 7f59f7e792705db773f1caecdaa823092f4e2927
This commit is contained in:
parent
5cd5df71cc
commit
8e12397d70
75
external/llvm/tools/dsymutil/NonRelocatableStringpool.h
vendored
Normal file
75
external/llvm/tools/dsymutil/NonRelocatableStringpool.h
vendored
Normal file
@ -0,0 +1,75 @@
|
||||
//===- NonRelocatableStringpool.h - A simple stringpool --------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_TOOLS_DSYMUTIL_NONRELOCATABLESTRINGPOOL_H
|
||||
#define LLVM_TOOLS_DSYMUTIL_NONRELOCATABLESTRINGPOOL_H
|
||||
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Support/Allocator.h"
|
||||
#include <cstdint>
|
||||
#include <utility>
|
||||
|
||||
namespace llvm {
|
||||
namespace dsymutil {
|
||||
|
||||
/// \brief A string table that doesn't need relocations.
|
||||
///
|
||||
/// We are doing a final link, no need for a string table that
|
||||
/// has relocation entries for every reference to it. This class
|
||||
/// provides this ablitity by just associating offsets with
|
||||
/// strings.
|
||||
class NonRelocatableStringpool {
|
||||
public:
|
||||
/// \brief Entries are stored into the StringMap and simply linked
|
||||
/// together through the second element of this pair in order to
|
||||
/// keep track of insertion order.
|
||||
using MapTy =
|
||||
StringMap<std::pair<uint32_t, StringMapEntryBase *>, BumpPtrAllocator>;
|
||||
|
||||
NonRelocatableStringpool() : Sentinel(0), Last(&Sentinel) {
|
||||
// Legacy dsymutil puts an empty string at the start of the line
|
||||
// table.
|
||||
getStringOffset("");
|
||||
}
|
||||
|
||||
/// \brief Get the offset of string \p S in the string table. This
|
||||
/// can insert a new element or return the offset of a preexisitng
|
||||
/// one.
|
||||
uint32_t getStringOffset(StringRef S);
|
||||
|
||||
/// \brief Get permanent storage for \p S (but do not necessarily
|
||||
/// emit \p S in the output section).
|
||||
/// \returns The StringRef that points to permanent storage to use
|
||||
/// in place of \p S.
|
||||
StringRef internString(StringRef S);
|
||||
|
||||
// \brief Return the first entry of the string table.
|
||||
const MapTy::MapEntryTy *getFirstEntry() const {
|
||||
return getNextEntry(&Sentinel);
|
||||
}
|
||||
|
||||
// \brief Get the entry following \p E in the string table or null
|
||||
// if \p E was the last entry.
|
||||
const MapTy::MapEntryTy *getNextEntry(const MapTy::MapEntryTy *E) const {
|
||||
return static_cast<const MapTy::MapEntryTy *>(E->getValue().second);
|
||||
}
|
||||
|
||||
uint64_t getSize() { return CurrentEndOffset; }
|
||||
|
||||
private:
|
||||
MapTy Strings;
|
||||
uint32_t CurrentEndOffset = 0;
|
||||
MapTy::MapEntryTy Sentinel, *Last;
|
||||
};
|
||||
|
||||
} // end namespace dsymutil
|
||||
} // end namespace llvm
|
||||
|
||||
#endif // LLVM_TOOLS_DSYMUTIL_NONRELOCATABLESTRINGPOOL_H
|
Reference in New Issue
Block a user