1*9880d681SAndroid Build Coastguard Worker //===-- lib/CodeGen/AsmPrinter/AsmPrinterHandler.h -------------*- C++ -*--===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker // This file contains a generic interface for AsmPrinter handlers, 11*9880d681SAndroid Build Coastguard Worker // like debug and EH info emitters. 12*9880d681SAndroid Build Coastguard Worker // 13*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_CODEGEN_ASMPRINTER_ASMPRINTERHANDLER_H 16*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_CODEGEN_ASMPRINTER_ASMPRINTERHANDLER_H 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/DataTypes.h" 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker namespace llvm { 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker class AsmPrinter; 23*9880d681SAndroid Build Coastguard Worker class MachineBasicBlock; 24*9880d681SAndroid Build Coastguard Worker class MachineFunction; 25*9880d681SAndroid Build Coastguard Worker class MachineInstr; 26*9880d681SAndroid Build Coastguard Worker class MCSymbol; 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker typedef MCSymbol *ExceptionSymbolProvider(AsmPrinter *Asm); 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker /// \brief Collects and handles AsmPrinter objects required to build debug 31*9880d681SAndroid Build Coastguard Worker /// or EH information. 32*9880d681SAndroid Build Coastguard Worker class AsmPrinterHandler { 33*9880d681SAndroid Build Coastguard Worker public: 34*9880d681SAndroid Build Coastguard Worker virtual ~AsmPrinterHandler(); 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker /// \brief For symbols that have a size designated (e.g. common symbols), 37*9880d681SAndroid Build Coastguard Worker /// this tracks that size. 38*9880d681SAndroid Build Coastguard Worker virtual void setSymbolSize(const MCSymbol *Sym, uint64_t Size) = 0; 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker /// \brief Emit all sections that should come after the content. 41*9880d681SAndroid Build Coastguard Worker virtual void endModule() = 0; 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker /// \brief Gather pre-function debug information. 44*9880d681SAndroid Build Coastguard Worker /// Every beginFunction(MF) call should be followed by an endFunction(MF) 45*9880d681SAndroid Build Coastguard Worker /// call. 46*9880d681SAndroid Build Coastguard Worker virtual void beginFunction(const MachineFunction *MF) = 0; 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker // \brief Emit any of function marker (like .cfi_endproc). This is called 49*9880d681SAndroid Build Coastguard Worker // before endFunction and cannot switch sections. 50*9880d681SAndroid Build Coastguard Worker virtual void markFunctionEnd(); 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker /// \brief Gather post-function debug information. 53*9880d681SAndroid Build Coastguard Worker /// Please note that some AsmPrinter implementations may not call 54*9880d681SAndroid Build Coastguard Worker /// beginFunction at all. 55*9880d681SAndroid Build Coastguard Worker virtual void endFunction(const MachineFunction *MF) = 0; 56*9880d681SAndroid Build Coastguard Worker beginFragment(const MachineBasicBlock * MBB,ExceptionSymbolProvider ESP)57*9880d681SAndroid Build Coastguard Worker virtual void beginFragment(const MachineBasicBlock *MBB, 58*9880d681SAndroid Build Coastguard Worker ExceptionSymbolProvider ESP) {} endFragment()59*9880d681SAndroid Build Coastguard Worker virtual void endFragment() {} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker /// \brief Emit target-specific EH funclet machinery. 62*9880d681SAndroid Build Coastguard Worker virtual void beginFunclet(const MachineBasicBlock &MBB, 63*9880d681SAndroid Build Coastguard Worker MCSymbol *Sym = nullptr) {} endFunclet()64*9880d681SAndroid Build Coastguard Worker virtual void endFunclet() {} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker /// \brief Process beginning of an instruction. 67*9880d681SAndroid Build Coastguard Worker virtual void beginInstruction(const MachineInstr *MI) = 0; 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker /// \brief Process end of an instruction. 70*9880d681SAndroid Build Coastguard Worker virtual void endInstruction() = 0; 71*9880d681SAndroid Build Coastguard Worker }; 72*9880d681SAndroid Build Coastguard Worker } // End of namespace llvm 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker #endif 75