DwarfStringPool.h revision dce4a407a24b04eebc6a376f8e62b41aaa7b071f
1dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===-- llvm/CodeGen/DwarfStringPool.h - Dwarf Debug Framework -*- C++ -*--===//
2dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
3dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//                     The LLVM Compiler Infrastructure
4dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
5dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// This file is distributed under the University of Illinois Open Source
6dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// License. See LICENSE.TXT for details.
7dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
8dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===----------------------------------------------------------------------===//
9dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
10dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#ifndef CODEGEN_ASMPRINTER_STRINGPOOL_H__
11dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define CODEGEN_ASMPRINTER_STRINGPOOL_H__
12dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
13dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/ADT/StringMap.h"
14dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/CodeGen/AsmPrinter.h"
15dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/Support/Allocator.h"
16dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
17dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include <utility>
18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace llvm {
20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
21dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass MCSymbol;
22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass MCSection;
23dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass StringRef;
24dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
25dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// Collection of strings for this unit and assorted symbols.
26dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// A String->Symbol mapping of strings used by indirect
27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// references.
28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass DwarfStringPool {
29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  StringMap<std::pair<MCSymbol *, unsigned>, BumpPtrAllocator &> Pool;
30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  StringRef Prefix;
31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  MCSymbol *SectionSymbol;
32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinespublic:
34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  DwarfStringPool(BumpPtrAllocator &A, AsmPrinter &Asm, StringRef Prefix)
35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      : Pool(A), Prefix(Prefix), SectionSymbol(Asm.GetTempSymbol(Prefix)) {}
36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void emit(AsmPrinter &Asm, const MCSection *StrSection,
38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines            const MCSection *OffsetSection = nullptr,
39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines            const MCSymbol *StrSecSym = nullptr);
40dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  /// \brief Returns the entry into the start of the pool.
42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  MCSymbol *getSectionSymbol();
43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  /// \brief Returns an entry into the string pool with the given
45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  /// string text.
46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  MCSymbol *getSymbol(AsmPrinter &Asm, StringRef Str);
47dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
48dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  /// \brief Returns the index into the string pool with the given
49dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  /// string text.
50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  unsigned getIndex(AsmPrinter &Asm, StringRef Str);
51dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
52dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool empty() const { return Pool.empty(); }
53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines};
54dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
55dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#endif
56