1df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola//===-- llvm/MC/MCWinCOFFObjectWriter.h - Win COFF Object Writer *- C++ -*-===//
2df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola//
3df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola//                     The LLVM Compiler Infrastructure
4df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola//
5df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola// This file is distributed under the University of Illinois Open Source
6df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola// License. See LICENSE.TXT for details.
7df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola//
8df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola//===----------------------------------------------------------------------===//
9df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola
10df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola#ifndef LLVM_MC_MCWINCOFFOBJECTWRITER_H
11df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola#define LLVM_MC_MCWINCOFFOBJECTWRITER_H
12df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola
13df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindolanamespace llvm {
14ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesclass MCAsmBackend;
15ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesclass MCFixup;
16ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesclass MCObjectWriter;
17ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesclass MCValue;
18ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesclass raw_ostream;
190c7f116bb6950ef819323d855415b2f2b0aad987Pirama Arumuga Nainarclass raw_pwrite_stream;
20d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth
21df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola  class MCWinCOFFObjectTargetWriter {
22354362524a72b3fa43a6c09380b7ae3b2380cbbaJuergen Ributzka    virtual void anchor();
23df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola    const unsigned Machine;
24df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola
25df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola  protected:
26df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola    MCWinCOFFObjectTargetWriter(unsigned Machine_);
27df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola
28df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola  public:
29df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola    virtual ~MCWinCOFFObjectTargetWriter() {}
30df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola
31df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola    unsigned getMachine() const { return Machine; }
32ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    virtual unsigned getRelocType(const MCValue &Target, const MCFixup &Fixup,
33ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                                  bool IsCrossSection,
34ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                                  const MCAsmBackend &MAB) const = 0;
35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    virtual bool recordRelocation(const MCFixup &) const { return true; }
36df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola  };
37df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola
38df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola  /// \brief Construct a new Win COFF writer instance.
39df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola  ///
40df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola  /// \param MOTW - The target specific WinCOFF writer subclass.
41df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola  /// \param OS - The stream to write to.
42df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola  /// \returns The constructed object writer.
43df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola  MCObjectWriter *createWinCOFFObjectWriter(MCWinCOFFObjectTargetWriter *MOTW,
440c7f116bb6950ef819323d855415b2f2b0aad987Pirama Arumuga Nainar                                            raw_pwrite_stream &OS);
45df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola} // End llvm namespace
46df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola
47df09270ae897e7fa64a7c162de163c32ee181a03Rafael Espindola#endif
48