brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · c2c11c7 Raw
111 lines · c
1//===-- DwarfException.h - Dwarf Exception Framework -----------*- C++ -*--===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file contains support for writing dwarf exception info into asm files.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_DWARFEXCEPTION_H14#define LLVM_LIB_CODEGEN_ASMPRINTER_DWARFEXCEPTION_H15 16#include "EHStreamer.h"17#include "llvm/CodeGen/AsmPrinter.h"18#include "llvm/MC/MCDwarf.h"19 20namespace llvm {21class MachineFunction;22class ARMTargetStreamer;23 24class LLVM_LIBRARY_VISIBILITY DwarfCFIException : public EHStreamer {25  /// Per-function flag to indicate if .cfi_personality should be emitted.26  bool shouldEmitPersonality = false;27 28  /// Per-function flag to indicate if .cfi_personality must be emitted.29  bool forceEmitPersonality = false;30 31  /// Per-function flag to indicate if .cfi_lsda should be emitted.32  bool shouldEmitLSDA = false;33 34  /// Per-function flag to indicate if frame CFI info should be emitted.35  bool shouldEmitCFI = false;36 37  /// Per-module flag to indicate if .cfi_section has beeen emitted.38  bool hasEmittedCFISections = false;39 40  /// Vector of all personality functions seen so far in the module.41  std::vector<const GlobalValue *> Personalities;42 43  void addPersonality(const GlobalValue *Personality);44 45public:46  //===--------------------------------------------------------------------===//47  // Main entry points.48  //49  DwarfCFIException(AsmPrinter *A);50  ~DwarfCFIException() override;51 52  /// Emit all exception information that should come after the content.53  void endModule() override;54 55  /// Gather pre-function exception information.  Assumes being emitted56  /// immediately after the function entry point.57  void beginFunction(const MachineFunction *MF) override;58 59  /// Gather and emit post-function exception information.60  void endFunction(const MachineFunction *) override;61 62  void beginBasicBlockSection(const MachineBasicBlock &MBB) override;63  void endBasicBlockSection(const MachineBasicBlock &MBB) override;64};65 66class LLVM_LIBRARY_VISIBILITY ARMException : public EHStreamer {67  /// Per-function flag to indicate if frame CFI info should be emitted.68  bool shouldEmitCFI = false;69 70  /// Per-module flag to indicate if .cfi_section has beeen emitted.71  bool hasEmittedCFISections = false;72 73  void emitTypeInfos(unsigned TTypeEncoding, MCSymbol *TTBaseLabel) override;74  ARMTargetStreamer &getTargetStreamer();75 76public:77  //===--------------------------------------------------------------------===//78  // Main entry points.79  //80  ARMException(AsmPrinter *A);81  ~ARMException() override;82 83  /// Emit all exception information that should come after the content.84  void endModule() override {}85 86  /// Gather pre-function exception information.  Assumes being emitted87  /// immediately after the function entry point.88  void beginFunction(const MachineFunction *MF) override;89 90  /// Gather and emit post-function exception information.91  void endFunction(const MachineFunction *) override;92 93  void markFunctionEnd() override;94};95 96class LLVM_LIBRARY_VISIBILITY AIXException : public EHStreamer {97  /// This is AIX's compat unwind section, which unwinder would use98  /// to find the location of LSDA area and personality rountine.99  void emitExceptionInfoTable(const MCSymbol *LSDA, const MCSymbol *PerSym);100 101public:102  AIXException(AsmPrinter *A);103 104  void endModule() override {}105  void beginFunction(const MachineFunction *MF) override {}106  void endFunction(const MachineFunction *MF) override;107};108} // End of namespace llvm109 110#endif111