Line data Source code
1 : //===- llvm/CodeGen/DwarfStringPool.h - Dwarf Debug Framework ---*- C++ -*-===//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 :
10 : #ifndef LLVM_LIB_CODEGEN_ASMPRINTER_DWARFSTRINGPOOL_H
11 : #define LLVM_LIB_CODEGEN_ASMPRINTER_DWARFSTRINGPOOL_H
12 :
13 : #include "llvm/ADT/StringMap.h"
14 : #include "llvm/ADT/StringRef.h"
15 : #include "llvm/CodeGen/DwarfStringPoolEntry.h"
16 : #include "llvm/Support/Allocator.h"
17 :
18 : namespace llvm {
19 :
20 : class AsmPrinter;
21 : class MCSection;
22 : class MCSymbol;
23 :
24 : // Collection of strings for this unit and assorted symbols.
25 : // A String->Symbol mapping of strings used by indirect
26 : // references.
27 0 : class DwarfStringPool {
28 : using EntryTy = DwarfStringPoolEntry;
29 :
30 : StringMap<EntryTy, BumpPtrAllocator &> Pool;
31 : StringRef Prefix;
32 : unsigned NumBytes = 0;
33 : unsigned NumIndexedStrings = 0;
34 : bool ShouldCreateSymbols;
35 :
36 : StringMapEntry<EntryTy> &getEntryImpl(AsmPrinter &Asm, StringRef Str);
37 :
38 : public:
39 : using EntryRef = DwarfStringPoolEntryRef;
40 :
41 : DwarfStringPool(BumpPtrAllocator &A, AsmPrinter &Asm, StringRef Prefix);
42 :
43 : void emitStringOffsetsTableHeader(AsmPrinter &Asm, MCSection *OffsetSection,
44 : MCSymbol *StartSym);
45 :
46 : void emit(AsmPrinter &Asm, MCSection *StrSection,
47 : MCSection *OffsetSection = nullptr,
48 : bool UseRelativeOffsets = false);
49 :
50 : bool empty() const { return Pool.empty(); }
51 :
52 : unsigned size() const { return Pool.size(); }
53 :
54 0 : unsigned getNumIndexedStrings() const { return NumIndexedStrings; }
55 :
56 : /// Get a reference to an entry in the string pool.
57 : EntryRef getEntry(AsmPrinter &Asm, StringRef Str);
58 :
59 : /// Same as getEntry, except that you can use EntryRef::getIndex to obtain a
60 : /// unique ID of this entry (e.g., for use in indexed forms like
61 : /// DW_FORM_strx).
62 : EntryRef getIndexedEntry(AsmPrinter &Asm, StringRef Str);
63 : };
64 :
65 : } // end namespace llvm
66 :
67 : #endif // LLVM_LIB_CODEGEN_ASMPRINTER_DWARFSTRINGPOOL_H
|