Line data Source code
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/MCObjectWriter.h"
14 : #include "llvm/MC/MCWinCOFFStreamer.h"
15 :
16 : using namespace llvm;
17 :
18 : namespace {
19 : class ARMWinCOFFStreamer : public MCWinCOFFStreamer {
20 : public:
21 27 : ARMWinCOFFStreamer(MCContext &C, std::unique_ptr<MCAsmBackend> AB,
22 : std::unique_ptr<MCCodeEmitter> CE,
23 : std::unique_ptr<MCObjectWriter> OW)
24 81 : : MCWinCOFFStreamer(C, std::move(AB), std::move(CE), std::move(OW)) {}
25 :
26 : void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
27 : void EmitThumbFunc(MCSymbol *Symbol) override;
28 : void FinishImpl() override;
29 : };
30 :
31 31 : void ARMWinCOFFStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {
32 31 : switch (Flag) {
33 0 : default: llvm_unreachable("not implemented");
34 : case MCAF_SyntaxUnified:
35 : case MCAF_Code16:
36 : break;
37 : }
38 31 : }
39 :
40 34 : void ARMWinCOFFStreamer::EmitThumbFunc(MCSymbol *Symbol) {
41 : getAssembler().setIsThumbFunc(Symbol);
42 34 : }
43 :
44 27 : void ARMWinCOFFStreamer::FinishImpl() {
45 27 : EmitFrames(nullptr);
46 :
47 27 : MCWinCOFFStreamer::FinishImpl();
48 26 : }
49 : }
50 :
51 27 : MCStreamer *llvm::createARMWinCOFFStreamer(
52 : MCContext &Context, std::unique_ptr<MCAsmBackend> &&MAB,
53 : std::unique_ptr<MCObjectWriter> &&OW,
54 : std::unique_ptr<MCCodeEmitter> &&Emitter, bool RelaxAll,
55 : bool IncrementalLinkerCompatible) {
56 : auto *S = new ARMWinCOFFStreamer(Context, std::move(MAB), std::move(Emitter),
57 54 : std::move(OW));
58 : S->getAssembler().setIncrementalLinkerCompatible(IncrementalLinkerCompatible);
59 27 : return S;
60 : }
61 :
|