1234285Sdim//===-- llvm/MC/MCWinCOFFObjectWriter.h - Win COFF Object Writer *- C++ -*-===//
2234285Sdim//
3234285Sdim//                     The LLVM Compiler Infrastructure
4234285Sdim//
5234285Sdim// This file is distributed under the University of Illinois Open Source
6234285Sdim// License. See LICENSE.TXT for details.
7234285Sdim//
8234285Sdim//===----------------------------------------------------------------------===//
9234285Sdim
10234285Sdim#ifndef LLVM_MC_MCWINCOFFOBJECTWRITER_H
11234285Sdim#define LLVM_MC_MCWINCOFFOBJECTWRITER_H
12234285Sdim
13234285Sdimnamespace llvm {
14252723Sdim  class MCFixup;
15252723Sdim  class MCObjectWriter;
16252723Sdim  class MCValue;
17252723Sdim  class raw_ostream;
18252723Sdim
19234285Sdim  class MCWinCOFFObjectTargetWriter {
20263509Sdim    virtual void anchor();
21234285Sdim    const unsigned Machine;
22234285Sdim
23234285Sdim  protected:
24234285Sdim    MCWinCOFFObjectTargetWriter(unsigned Machine_);
25234285Sdim
26234285Sdim  public:
27234285Sdim    virtual ~MCWinCOFFObjectTargetWriter() {}
28234285Sdim
29234285Sdim    unsigned getMachine() const { return Machine; }
30252723Sdim    virtual unsigned getRelocType(const MCValue &Target,
31252723Sdim                                  const MCFixup &Fixup,
32252723Sdim                                  bool IsCrossSection) const = 0;
33234285Sdim  };
34234285Sdim
35234285Sdim  /// \brief Construct a new Win COFF writer instance.
36234285Sdim  ///
37234285Sdim  /// \param MOTW - The target specific WinCOFF writer subclass.
38234285Sdim  /// \param OS - The stream to write to.
39234285Sdim  /// \returns The constructed object writer.
40234285Sdim  MCObjectWriter *createWinCOFFObjectWriter(MCWinCOFFObjectTargetWriter *MOTW,
41234285Sdim                                            raw_ostream &OS);
42234285Sdim} // End llvm namespace
43234285Sdim
44234285Sdim#endif
45