1 //===-- ARMWinCOFFStreamer.cpp - ARM Target WinCOFF Streamer ----*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "ARMMCTargetDesc.h" 11 #include "llvm/MC/MCAsmBackend.h" 12 #include "llvm/MC/MCCodeEmitter.h" 13 #include "llvm/MC/MCWinCOFFStreamer.h" 14 15 using namespace llvm; 16 17 namespace { 18 class ARMWinCOFFStreamer : public MCWinCOFFStreamer { 19 public: 20 ARMWinCOFFStreamer(MCContext &C, std::unique_ptr<MCAsmBackend> AB, 21 std::unique_ptr<MCCodeEmitter> CE, raw_pwrite_stream &OS) 22 : MCWinCOFFStreamer(C, std::move(AB), std::move(CE), OS) {} 23 24 void EmitAssemblerFlag(MCAssemblerFlag Flag) override; 25 void EmitThumbFunc(MCSymbol *Symbol) override; 26 }; 27 28 void ARMWinCOFFStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) { 29 switch (Flag) { 30 default: llvm_unreachable("not implemented"); 31 case MCAF_SyntaxUnified: 32 case MCAF_Code16: 33 break; 34 } 35 } 36 37 void ARMWinCOFFStreamer::EmitThumbFunc(MCSymbol *Symbol) { 38 getAssembler().setIsThumbFunc(Symbol); 39 } 40 } 41 42 MCStreamer *llvm::createARMWinCOFFStreamer( 43 MCContext &Context, std::unique_ptr<MCAsmBackend> &&MAB, 44 raw_pwrite_stream &OS, std::unique_ptr<MCCodeEmitter> &&Emitter, 45 bool RelaxAll, bool IncrementalLinkerCompatible) { 46 auto *S = 47 new ARMWinCOFFStreamer(Context, std::move(MAB), std::move(Emitter), OS); 48 S->getAssembler().setIncrementalLinkerCompatible(IncrementalLinkerCompatible); 49 return S; 50 } 51 52