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