Import prebuilt clang toolchain for linux.
diff --git a/linux-x64/clang/include/llvm/MC/StringTableBuilder.h b/linux-x64/clang/include/llvm/MC/StringTableBuilder.h
new file mode 100644
index 0000000..89bc55a
--- /dev/null
+++ b/linux-x64/clang/include/llvm/MC/StringTableBuilder.h
@@ -0,0 +1,75 @@
+//===- StringTableBuilder.h - String table building utility -----*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MC_STRINGTABLEBUILDER_H
+#define LLVM_MC_STRINGTABLEBUILDER_H
+
+#include "llvm/ADT/CachedHashString.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringRef.h"
+#include <cstddef>
+#include <cstdint>
+
+namespace llvm {
+
+class raw_ostream;
+
+/// \brief Utility for building string tables with deduplicated suffixes.
+class StringTableBuilder {
+public:
+ enum Kind { ELF, WinCOFF, MachO, RAW, DWARF };
+
+private:
+ DenseMap<CachedHashStringRef, size_t> StringIndexMap;
+ size_t Size = 0;
+ Kind K;
+ unsigned Alignment;
+ bool Finalized = false;
+
+ void finalizeStringTable(bool Optimize);
+ void initSize();
+
+public:
+ StringTableBuilder(Kind K, unsigned Alignment = 1);
+ ~StringTableBuilder();
+
+ /// \brief Add a string to the builder. Returns the position of S in the
+ /// table. The position will be changed if finalize is used.
+ /// Can only be used before the table is finalized.
+ size_t add(CachedHashStringRef S);
+ size_t add(StringRef S) { return add(CachedHashStringRef(S)); }
+
+ /// \brief Analyze the strings and build the final table. No more strings can
+ /// be added after this point.
+ void finalize();
+
+ /// Finalize the string table without reording it. In this mode, offsets
+ /// returned by add will still be valid.
+ void finalizeInOrder();
+
+ /// \brief Get the offest of a string in the string table. Can only be used
+ /// after the table is finalized.
+ size_t getOffset(CachedHashStringRef S) const;
+ size_t getOffset(StringRef S) const {
+ return getOffset(CachedHashStringRef(S));
+ }
+
+ size_t getSize() const { return Size; }
+ void clear();
+
+ void write(raw_ostream &OS) const;
+ void write(uint8_t *Buf) const;
+
+private:
+ bool isFinalized() const { return Finalized; }
+};
+
+} // end namespace llvm
+
+#endif // LLVM_MC_STRINGTABLEBUILDER_H