WinCOFFObjectWriter.cpp revision b162290e39afd49d4c7d342333b331bc96232720
1b162290e39afd49d4c7d342333b331bc96232720Chris Lattner//===-- llvm/MC/WinCOFFObjectWriter.cpp -------------------------*- C++ -*-===// 2b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// 3b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// The LLVM Compiler Infrastructure 4b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// 5b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// This file is distributed under the University of Illinois Open Source 6b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// License. See LICENSE.TXT for details. 7b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// 8b162290e39afd49d4c7d342333b331bc96232720Chris Lattner//===----------------------------------------------------------------------===// 9b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// 10b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// This file contains an implementation of a Win32 COFF object file writer. 11b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// 12b162290e39afd49d4c7d342333b331bc96232720Chris Lattner//===----------------------------------------------------------------------===// 13b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 14b162290e39afd49d4c7d342333b331bc96232720Chris Lattner#define DEBUG_TYPE "WinCOFFObjectWriter" 15b162290e39afd49d4c7d342333b331bc96232720Chris Lattner#include "llvm/MC/MCObjectWriter.h" 16b162290e39afd49d4c7d342333b331bc96232720Chris Lattner#include "llvm/MC/MCValue.h" 17b162290e39afd49d4c7d342333b331bc96232720Chris Lattner#include "llvm/MC/MCAssembler.h" 18b162290e39afd49d4c7d342333b331bc96232720Chris Lattner#include "llvm/MC/MCAsmLayout.h" 19b162290e39afd49d4c7d342333b331bc96232720Chris Lattnerusing namespace llvm; 20b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 21b162290e39afd49d4c7d342333b331bc96232720Chris Lattnernamespace { 22b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 23b162290e39afd49d4c7d342333b331bc96232720Chris Lattner class WinCOFFObjectWriter : public MCObjectWriter { 24b162290e39afd49d4c7d342333b331bc96232720Chris Lattner public: 25b162290e39afd49d4c7d342333b331bc96232720Chris Lattner WinCOFFObjectWriter(raw_ostream &OS); 26b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 27b162290e39afd49d4c7d342333b331bc96232720Chris Lattner // MCObjectWriter interface implementation. 28b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 29b162290e39afd49d4c7d342333b331bc96232720Chris Lattner void ExecutePostLayoutBinding(MCAssembler &Asm); 30b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 31b162290e39afd49d4c7d342333b331bc96232720Chris Lattner void RecordRelocation(const MCAssembler &Asm, 32b162290e39afd49d4c7d342333b331bc96232720Chris Lattner const MCAsmLayout &Layout, 33b162290e39afd49d4c7d342333b331bc96232720Chris Lattner const MCFragment *Fragment, 34b162290e39afd49d4c7d342333b331bc96232720Chris Lattner const MCFixup &Fixup, 35b162290e39afd49d4c7d342333b331bc96232720Chris Lattner MCValue Target, 36b162290e39afd49d4c7d342333b331bc96232720Chris Lattner uint64_t &FixedValue); 37b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 38b162290e39afd49d4c7d342333b331bc96232720Chris Lattner void WriteObject(const MCAssembler &Asm, const MCAsmLayout &Layout); 39b162290e39afd49d4c7d342333b331bc96232720Chris Lattner }; 40b162290e39afd49d4c7d342333b331bc96232720Chris Lattner} 41b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 42b162290e39afd49d4c7d342333b331bc96232720Chris LattnerWinCOFFObjectWriter::WinCOFFObjectWriter(raw_ostream &OS) 43b162290e39afd49d4c7d342333b331bc96232720Chris Lattner : MCObjectWriter(OS, true) { 44b162290e39afd49d4c7d342333b331bc96232720Chris Lattner} 45b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 46b162290e39afd49d4c7d342333b331bc96232720Chris Lattner//////////////////////////////////////////////////////////////////////////////// 47b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// MCObjectWriter interface implementations 48b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 49b162290e39afd49d4c7d342333b331bc96232720Chris Lattnervoid WinCOFFObjectWriter::ExecutePostLayoutBinding(MCAssembler &Asm) { 50b162290e39afd49d4c7d342333b331bc96232720Chris Lattner} 51b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 52b162290e39afd49d4c7d342333b331bc96232720Chris Lattnervoid WinCOFFObjectWriter::RecordRelocation(const MCAssembler &Asm, 53b162290e39afd49d4c7d342333b331bc96232720Chris Lattner const MCAsmLayout &Layout, 54b162290e39afd49d4c7d342333b331bc96232720Chris Lattner const MCFragment *Fragment, 55b162290e39afd49d4c7d342333b331bc96232720Chris Lattner const MCFixup &Fixup, 56b162290e39afd49d4c7d342333b331bc96232720Chris Lattner MCValue Target, 57b162290e39afd49d4c7d342333b331bc96232720Chris Lattner uint64_t &FixedValue) { 58b162290e39afd49d4c7d342333b331bc96232720Chris Lattner} 59b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 60b162290e39afd49d4c7d342333b331bc96232720Chris Lattnervoid WinCOFFObjectWriter::WriteObject(const MCAssembler &Asm, 61b162290e39afd49d4c7d342333b331bc96232720Chris Lattner const MCAsmLayout &Layout) { 62b162290e39afd49d4c7d342333b331bc96232720Chris Lattner} 63b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 64b162290e39afd49d4c7d342333b331bc96232720Chris Lattner//------------------------------------------------------------------------------ 65b162290e39afd49d4c7d342333b331bc96232720Chris Lattner// WinCOFFObjectWriter factory function 66b162290e39afd49d4c7d342333b331bc96232720Chris Lattner 67b162290e39afd49d4c7d342333b331bc96232720Chris Lattnernamespace llvm { 68b162290e39afd49d4c7d342333b331bc96232720Chris Lattner MCObjectWriter *createWinCOFFObjectWriter(raw_ostream &OS) { 69b162290e39afd49d4c7d342333b331bc96232720Chris Lattner return new WinCOFFObjectWriter(OS); 70b162290e39afd49d4c7d342333b331bc96232720Chris Lattner } 71b162290e39afd49d4c7d342333b331bc96232720Chris Lattner} 72