1eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling//===-- DwarfException.h - Dwarf Exception Framework -----------*- C++ -*--===// 2eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling// 3eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling// The LLVM Compiler Infrastructure 4eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling// 5eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling// This file is distributed under the University of Illinois Open Source 6eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling// License. See LICENSE.TXT for details. 7eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling// 8eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling//===----------------------------------------------------------------------===// 9eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling// 10eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling// This file contains support for writing dwarf exception info into asm files. 11eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling// 12eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling//===----------------------------------------------------------------------===// 13eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling 146f37f8f9c3174f7a09344ed25e095b1d6b1ff024Chris Lattner#ifndef LLVM_CODEGEN_ASMPRINTER_DWARFEXCEPTION_H 156f37f8f9c3174f7a09344ed25e095b1d6b1ff024Chris Lattner#define LLVM_CODEGEN_ASMPRINTER_DWARFEXCEPTION_H 16eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling 17cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "EHStreamer.h" 18e29887b4ee42ae78790a8c1886a7babee9ef18e5Rafael Espindola#include "llvm/CodeGen/AsmPrinter.h" 19eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling 20eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendlingnamespace llvm { 216d7337896f1bcdfbdee90c9c33371c2a373f422aChris Lattnerclass MachineFunction; 22320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindolaclass ARMTargetStreamer; 23d7e8ddc5012d22398eba6b8094e2fd7821bac9ccAnton Korobeynikov 24cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesclass DwarfCFIException : public EHStreamer { 257b11a4cbdc613c768871a0e4aad4ad3ae7cab5deRafael Espindola /// shouldEmitPersonality - Per-function flag to indicate if .cfi_personality 267b11a4cbdc613c768871a0e4aad4ad3ae7cab5deRafael Espindola /// should be emitted. 277b11a4cbdc613c768871a0e4aad4ad3ae7cab5deRafael Espindola bool shouldEmitPersonality; 287b11a4cbdc613c768871a0e4aad4ad3ae7cab5deRafael Espindola 297b11a4cbdc613c768871a0e4aad4ad3ae7cab5deRafael Espindola /// shouldEmitLSDA - Per-function flag to indicate if .cfi_lsda 307b11a4cbdc613c768871a0e4aad4ad3ae7cab5deRafael Espindola /// should be emitted. 317b11a4cbdc613c768871a0e4aad4ad3ae7cab5deRafael Espindola bool shouldEmitLSDA; 329a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov 339a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov /// shouldEmitMoves - Per-function flag to indicate if frame moves info 349a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov /// should be emitted. 359a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov bool shouldEmitMoves; 369a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov 37e29887b4ee42ae78790a8c1886a7babee9ef18e5Rafael Espindola AsmPrinter::CFIMoveType moveTypeModule; 38e29887b4ee42ae78790a8c1886a7babee9ef18e5Rafael Espindola 399a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikovpublic: 409a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov //===--------------------------------------------------------------------===// 419a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov // Main entry points. 429a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov // 439a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov DwarfCFIException(AsmPrinter *A); 449a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov virtual ~DwarfCFIException(); 459a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov 4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// endModule - Emit all exception information that should come after the 479a1ef4ef36cfa2d8d9ebd52d601283ae6e7466cdAnton Korobeynikov /// content. 4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void endModule() override; 49eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling 5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// beginFunction - Gather pre-function exception information. Assumes being 51eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling /// emitted immediately after the function entry point. 5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void beginFunction(const MachineFunction *MF) override; 53eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling 5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// endFunction - Gather and emit post-function exception information. 5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void endFunction(const MachineFunction *) override; 56eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling}; 57eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling 58cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesclass ARMException : public EHStreamer { 59cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void emitTypeInfos(unsigned TTypeEncoding) override; 60320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola ARMTargetStreamer &getTargetStreamer(); 61320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola 6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// shouldEmitCFI - Per-function flag to indicate if frame CFI info 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// should be emitted. 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool shouldEmitCFI; 6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 66b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikovpublic: 67b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov //===--------------------------------------------------------------------===// 68b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov // Main entry points. 69b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov // 70b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov ARMException(AsmPrinter *A); 71b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov virtual ~ARMException(); 72b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov 7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// endModule - Emit all exception information that should come after the 74b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov /// content. 7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void endModule() override; 76b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov 7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// beginFunction - Gather pre-function exception information. Assumes being 78b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov /// emitted immediately after the function entry point. 7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void beginFunction(const MachineFunction *MF) override; 80b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov 8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// endFunction - Gather and emit post-function exception information. 8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void endFunction(const MachineFunction *) override; 83b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov}; 84b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov 85cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesclass Win64Exception : public EHStreamer { 86d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis /// shouldEmitPersonality - Per-function flag to indicate if personality 87d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis /// info should be emitted. 88d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis bool shouldEmitPersonality; 89d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis 90d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis /// shouldEmitLSDA - Per-function flag to indicate if the LSDA 91d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis /// should be emitted. 92d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis bool shouldEmitLSDA; 93d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis 94d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis /// shouldEmitMoves - Per-function flag to indicate if frame moves info 95d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis /// should be emitted. 96d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis bool shouldEmitMoves; 97d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis 98d652b1368b1e381382951f450e5eeca870d91dd6Charles Davispublic: 99d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis //===--------------------------------------------------------------------===// 100d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis // Main entry points. 101d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis // 102d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis Win64Exception(AsmPrinter *A); 103d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis virtual ~Win64Exception(); 104d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis 10536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// endModule - Emit all exception information that should come after the 106d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis /// content. 10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void endModule() override; 108d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis 10936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// beginFunction - Gather pre-function exception information. Assumes being 110d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis /// emitted immediately after the function entry point. 11136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void beginFunction(const MachineFunction *MF) override; 112d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis 11336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// endFunction - Gather and emit post-function exception information. 11436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void endFunction(const MachineFunction *) override; 115d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis}; 116d652b1368b1e381382951f450e5eeca870d91dd6Charles Davis 117eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling} // End of namespace llvm 118eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling 119eb9072195ca7d777a71194dcaaaa369d82f24f53Bill Wendling#endif 120