Line data Source code
1 : //===- llvm/MC/MCWinCOFFObjectWriter.h - Win COFF Object Writer -*- 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 : #ifndef LLVM_MC_MCWINCOFFOBJECTWRITER_H
11 : #define LLVM_MC_MCWINCOFFOBJECTWRITER_H
12 :
13 : #include "llvm/MC/MCObjectWriter.h"
14 : #include <memory>
15 :
16 : namespace llvm {
17 :
18 : class MCAsmBackend;
19 : class MCContext;
20 : class MCFixup;
21 : class MCValue;
22 : class raw_pwrite_stream;
23 :
24 : class MCWinCOFFObjectTargetWriter : public MCObjectTargetWriter {
25 : virtual void anchor();
26 :
27 : const unsigned Machine;
28 :
29 : protected:
30 : MCWinCOFFObjectTargetWriter(unsigned Machine_);
31 :
32 : public:
33 0 : virtual ~MCWinCOFFObjectTargetWriter() = default;
34 :
35 1033 : virtual Triple::ObjectFormatType getFormat() const { return Triple::COFF; }
36 : static bool classof(const MCObjectTargetWriter *W) {
37 : return W->getFormat() == Triple::COFF;
38 : }
39 :
40 0 : unsigned getMachine() const { return Machine; }
41 : virtual unsigned getRelocType(MCContext &Ctx, const MCValue &Target,
42 : const MCFixup &Fixup, bool IsCrossSection,
43 : const MCAsmBackend &MAB) const = 0;
44 2630 : virtual bool recordRelocation(const MCFixup &) const { return true; }
45 : };
46 :
47 : /// Construct a new Win COFF writer instance.
48 : ///
49 : /// \param MOTW - The target specific WinCOFF writer subclass.
50 : /// \param OS - The stream to write to.
51 : /// \returns The constructed object writer.
52 : std::unique_ptr<MCObjectWriter>
53 : createWinCOFFObjectWriter(std::unique_ptr<MCWinCOFFObjectTargetWriter> MOTW,
54 : raw_pwrite_stream &OS);
55 : } // end namespace llvm
56 :
57 : #endif // LLVM_MC_MCWINCOFFOBJECTWRITER_H
|