1 //===- HexagonMCELFStreamer.h - Hexagon subclass of MCElfStreamer ---------===// 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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCELFSTREAMER_H 10 #define LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCELFSTREAMER_H 11 12 #include "MCTargetDesc/HexagonMCTargetDesc.h" 13 #include "llvm/MC/MCELFStreamer.h" 14 #include "llvm/MC/MCInstrInfo.h" 15 #include <cstdint> 16 #include <memory> 17 18 namespace llvm { 19 20 class HexagonMCELFStreamer : public MCELFStreamer { 21 std::unique_ptr<MCInstrInfo> MCII; 22 23 public: 24 HexagonMCELFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> TAB, 25 std::unique_ptr<MCObjectWriter> OW, 26 std::unique_ptr<MCCodeEmitter> Emitter); 27 28 HexagonMCELFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> TAB, 29 std::unique_ptr<MCObjectWriter> OW, 30 std::unique_ptr<MCCodeEmitter> Emitter, 31 MCAssembler *Assembler); 32 33 void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override; 34 void EmitSymbol(const MCInst &Inst); 35 void HexagonMCEmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, 36 Align ByteAlignment, unsigned AccessSize); 37 void HexagonMCEmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, 38 Align ByteAlignment, unsigned AccessSize); 39 }; 40 41 MCStreamer *createHexagonELFStreamer(Triple const &TT, MCContext &Context, 42 std::unique_ptr<MCAsmBackend> MAB, 43 std::unique_ptr<MCObjectWriter> OW, 44 std::unique_ptr<MCCodeEmitter> CE); 45 46 } // end namespace llvm 47 48 #endif // LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCELFSTREAMER_H 49