1274955Ssvnmir//===-- lib/CodeGen/AsmPrinter/AsmPrinterHandler.h -------------*- C++ -*--===// 2274955Ssvnmir// 3274955Ssvnmir// The LLVM Compiler Infrastructure 4274955Ssvnmir// 5274955Ssvnmir// This file is distributed under the University of Illinois Open Source 6274955Ssvnmir// License. See LICENSE.TXT for details. 7274955Ssvnmir// 8274955Ssvnmir//===----------------------------------------------------------------------===// 9274955Ssvnmir// 10274955Ssvnmir// This file contains a generic interface for AsmPrinter handlers, 11274955Ssvnmir// like debug and EH info emitters. 12274955Ssvnmir// 13274955Ssvnmir//===----------------------------------------------------------------------===// 14274955Ssvnmir 15280031Sdim#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_ASMPRINTERHANDLER_H 16280031Sdim#define LLVM_LIB_CODEGEN_ASMPRINTER_ASMPRINTERHANDLER_H 17274955Ssvnmir 18274955Ssvnmir#include "llvm/Support/DataTypes.h" 19274955Ssvnmir 20274955Ssvnmirnamespace llvm { 21274955Ssvnmir 22296417Sdimclass MachineBasicBlock; 23274955Ssvnmirclass MachineFunction; 24274955Ssvnmirclass MachineInstr; 25274955Ssvnmirclass MCSymbol; 26274955Ssvnmir 27274955Ssvnmir/// \brief Collects and handles AsmPrinter objects required to build debug 28274955Ssvnmir/// or EH information. 29274955Ssvnmirclass AsmPrinterHandler { 30274955Ssvnmirpublic: 31274955Ssvnmir virtual ~AsmPrinterHandler(); 32274955Ssvnmir 33274955Ssvnmir /// \brief For symbols that have a size designated (e.g. common symbols), 34274955Ssvnmir /// this tracks that size. 35274955Ssvnmir virtual void setSymbolSize(const MCSymbol *Sym, uint64_t Size) = 0; 36274955Ssvnmir 37274955Ssvnmir /// \brief Emit all sections that should come after the content. 38274955Ssvnmir virtual void endModule() = 0; 39274955Ssvnmir 40274955Ssvnmir /// \brief Gather pre-function debug information. 41274955Ssvnmir /// Every beginFunction(MF) call should be followed by an endFunction(MF) 42274955Ssvnmir /// call. 43274955Ssvnmir virtual void beginFunction(const MachineFunction *MF) = 0; 44274955Ssvnmir 45288943Sdim // \brief Emit any of function marker (like .cfi_endproc). This is called 46288943Sdim // before endFunction and cannot switch sections. 47288943Sdim virtual void markFunctionEnd(); 48288943Sdim 49274955Ssvnmir /// \brief Gather post-function debug information. 50274955Ssvnmir /// Please note that some AsmPrinter implementations may not call 51274955Ssvnmir /// beginFunction at all. 52274955Ssvnmir virtual void endFunction(const MachineFunction *MF) = 0; 53274955Ssvnmir 54296417Sdim /// \brief Emit target-specific EH funclet machinery. 55296417Sdim virtual void beginFunclet(const MachineBasicBlock &MBB, 56296417Sdim MCSymbol *Sym = nullptr) {} 57296417Sdim virtual void endFunclet() {} 58296417Sdim 59274955Ssvnmir /// \brief Process beginning of an instruction. 60274955Ssvnmir virtual void beginInstruction(const MachineInstr *MI) = 0; 61274955Ssvnmir 62274955Ssvnmir /// \brief Process end of an instruction. 63274955Ssvnmir virtual void endInstruction() = 0; 64274955Ssvnmir}; 65274955Ssvnmir} // End of namespace llvm 66274955Ssvnmir 67274955Ssvnmir#endif 68