LLVM  9.0.0svn
MCWinCOFFObjectWriter.h
Go to the documentation of this file.
1 //===- llvm/MC/MCWinCOFFObjectWriter.h - Win COFF Object Writer -*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_MC_MCWINCOFFOBJECTWRITER_H
10 #define LLVM_MC_MCWINCOFFOBJECTWRITER_H
11 
12 #include "llvm/MC/MCObjectWriter.h"
13 #include <memory>
14 
15 namespace llvm {
16 
17 class MCAsmBackend;
18 class MCContext;
19 class MCFixup;
20 class MCValue;
21 class raw_pwrite_stream;
22 
24  virtual void anchor();
25 
26  const unsigned Machine;
27 
28  protected:
29  MCWinCOFFObjectTargetWriter(unsigned Machine_);
30 
31  public:
32  virtual ~MCWinCOFFObjectTargetWriter() = default;
33 
34  virtual Triple::ObjectFormatType getFormat() const { return Triple::COFF; }
35  static bool classof(const MCObjectTargetWriter *W) {
36  return W->getFormat() == Triple::COFF;
37  }
38 
39  unsigned getMachine() const { return Machine; }
40  virtual unsigned getRelocType(MCContext &Ctx, const MCValue &Target,
41  const MCFixup &Fixup, bool IsCrossSection,
42  const MCAsmBackend &MAB) const = 0;
43  virtual bool recordRelocation(const MCFixup &) const { return true; }
44  };
45 
46  /// Construct a new Win COFF writer instance.
47  ///
48  /// \param MOTW - The target specific WinCOFF writer subclass.
49  /// \param OS - The stream to write to.
50  /// \returns The constructed object writer.
51  std::unique_ptr<MCObjectWriter>
52  createWinCOFFObjectWriter(std::unique_ptr<MCWinCOFFObjectTargetWriter> MOTW,
53  raw_pwrite_stream &OS);
54 } // end namespace llvm
55 
56 #endif // LLVM_MC_MCWINCOFFOBJECTWRITER_H
This class represents lattice values for constants.
Definition: AllocatorList.h:23
This represents an "assembler immediate".
Definition: MCValue.h:39
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
Definition: MCFixup.h:74
virtual unsigned getRelocType(MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup, bool IsCrossSection, const MCAsmBackend &MAB) const =0
virtual Triple::ObjectFormatType getFormat() const =0
Context object for machine code objects.
Definition: MCContext.h:62
virtual ~MCWinCOFFObjectTargetWriter()=default
virtual bool recordRelocation(const MCFixup &) const
std::unique_ptr< MCObjectWriter > createWinCOFFObjectWriter(std::unique_ptr< MCWinCOFFObjectTargetWriter > MOTW, raw_pwrite_stream &OS)
Construct a new Win COFF writer instance.
PowerPC TLS Dynamic Call Fixup
virtual Triple::ObjectFormatType getFormat() const
Target - Wrapper for Target specific information.
Base class for classes that define behaviour that is specific to both the target and the object forma...
An abstract base class for streams implementations that also support a pwrite operation.
Definition: raw_ostream.h:340
ObjectFormatType
Definition: Triple.h:220
Generic interface to target specific assembler backends.
Definition: MCAsmBackend.h:41
static bool classof(const MCObjectTargetWriter *W)