1dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===-- llvm/CodeGen/DwarfFile.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_DWARFFILE_H__ 11dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define CODEGEN_ASMPRINTER_DWARFFILE_H__ 12dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 13dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/ADT/DenseMap.h" 14dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/ADT/FoldingSet.h" 15dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/ADT/SmallVector.h" 16dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/ADT/StringMap.h" 17dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/Support/Allocator.h" 18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "AddressPool.h" 19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "DwarfStringPool.h" 20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 21dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include <vector> 22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include <string> 23dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include <memory> 24dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 25dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace llvm { 26dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass AsmPrinter; 27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass DwarfUnit; 28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass DIEAbbrev; 29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass MCSymbol; 30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass DIE; 31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass StringRef; 32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass DwarfDebug; 33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass MCSection; 34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass DwarfFile { 35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Target of Dwarf emission, used for sizing of abbreviations. 36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines AsmPrinter *Asm; 37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Used to uniquely define abbreviations. 39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines FoldingSet<DIEAbbrev> AbbreviationsSet; 40dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // A list of all the unique abbreviations in use. 42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines std::vector<DIEAbbrev *> Abbreviations; 43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // A pointer to all units in the section. 45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SmallVector<std::unique_ptr<DwarfUnit>, 1> CUs; 46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 47dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines DwarfStringPool StrPool; 48dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 49dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinespublic: 50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines DwarfFile(AsmPrinter *AP, StringRef Pref, BumpPtrAllocator &DA); 51dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 52dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ~DwarfFile(); 53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 54dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const SmallVectorImpl<std::unique_ptr<DwarfUnit>> &getUnits() { return CUs; } 55dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 56dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// \brief Compute the size and offset of a DIE given an incoming Offset. 57dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines unsigned computeSizeAndOffset(DIE &Die, unsigned Offset); 58dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 59dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// \brief Compute the size and offset of all the DIEs. 60dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void computeSizeAndOffsets(); 61dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 62dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// \brief Define a unique number for the abbreviation. 63dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void assignAbbrevNumber(DIEAbbrev &Abbrev); 64dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 65dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// \brief Add a unit to the list of CUs. 66dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void addUnit(std::unique_ptr<DwarfUnit> U); 67dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 68dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// \brief Emit all of the units to the section listed with the given 69dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// abbreviation section. 70dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitUnits(DwarfDebug *DD, const MCSymbol *ASectionSym); 71dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 72dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// \brief Emit a set of abbreviations to the specific section. 73dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitAbbrevs(const MCSection *); 74dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 75dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// \brief Emit all of the strings to the section given. 76dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitStrings(const MCSection *StrSection, 77dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const MCSection *OffsetSection = nullptr, 78dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const MCSymbol *StrSecSym = nullptr); 79dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 80dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// \brief Returns the string pool. 81dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines DwarfStringPool &getStringPool() { return StrPool; } 82dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}; 83dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 84dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#endif 85