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
13namespace llvm {
14  class MCFixup;
15  class MCObjectWriter;
16  class MCValue;
17  class raw_ostream;
18
19  class MCWinCOFFObjectTargetWriter {
20    virtual void anchor();
21    const unsigned Machine;
22
23  protected:
24    MCWinCOFFObjectTargetWriter(unsigned Machine_);
25
26  public:
27    virtual ~MCWinCOFFObjectTargetWriter() {}
28
29    unsigned getMachine() const { return Machine; }
30    virtual unsigned getRelocType(const MCValue &Target,
31                                  const MCFixup &Fixup,
32                                  bool IsCrossSection) const = 0;
33    virtual bool recordRelocation(const MCFixup &) const { return true; }
34  };
35
36  /// \brief Construct a new Win COFF writer instance.
37  ///
38  /// \param MOTW - The target specific WinCOFF writer subclass.
39  /// \param OS - The stream to write to.
40  /// \returns The constructed object writer.
41  MCObjectWriter *createWinCOFFObjectWriter(MCWinCOFFObjectTargetWriter *MOTW,
42                                            raw_ostream &OS);
43} // End llvm namespace
44
45#endif
46