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