LLVM 20.0.0git
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
13#include <memory>
14
15namespace llvm {
16
17class MCAsmBackend;
18class MCContext;
19class MCFixup;
20class MCValue;
21class raw_pwrite_stream;
22
24 virtual void anchor();
25
26 const unsigned Machine;
27
28protected:
29 MCWinCOFFObjectTargetWriter(unsigned Machine_);
30
31public:
32 virtual ~MCWinCOFFObjectTargetWriter() = default;
33
34 Triple::ObjectFormatType getFormat() const override { 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
46class WinCOFFWriter;
47
48class WinCOFFObjectWriter final : public MCObjectWriter {
49 friend class WinCOFFWriter;
50
51 std::unique_ptr<MCWinCOFFObjectTargetWriter> TargetObjectWriter;
52 std::unique_ptr<WinCOFFWriter> ObjWriter, DwoWriter;
53 bool IncrementalLinkerCompatible = false;
54
55public:
56 WinCOFFObjectWriter(std::unique_ptr<MCWinCOFFObjectTargetWriter> MOTW,
58 WinCOFFObjectWriter(std::unique_ptr<MCWinCOFFObjectTargetWriter> MOTW,
60
61 // MCObjectWriter interface implementation.
62 void reset() override;
64 IncrementalLinkerCompatible = Value;
65 }
66 void executePostLayoutBinding(MCAssembler &Asm) override;
68 const MCSymbol &SymA,
69 const MCFragment &FB, bool InSet,
70 bool IsPCRel) const override;
71 void recordRelocation(MCAssembler &Asm, const MCFragment *Fragment,
73 uint64_t &FixedValue) override;
74 uint64_t writeObject(MCAssembler &Asm) override;
75};
76
77/// Construct a new Win COFF writer instance.
78///
79/// \param MOTW - The target specific WinCOFF writer subclass.
80/// \param OS - The stream to write to.
81/// \returns The constructed object writer.
82std::unique_ptr<MCObjectWriter>
83createWinCOFFObjectWriter(std::unique_ptr<MCWinCOFFObjectTargetWriter> MOTW,
84 raw_pwrite_stream &OS);
85
86std::unique_ptr<MCObjectWriter>
87createWinCOFFDwoObjectWriter(std::unique_ptr<MCWinCOFFObjectTargetWriter> MOTW,
88 raw_pwrite_stream &OS, raw_pwrite_stream &DwoOS);
89} // end namespace llvm
90
91#endif // LLVM_MC_MCWINCOFFOBJECTWRITER_H
COFF::MachineTypes Machine
Definition: COFFYAML.cpp:371
PowerPC TLS Dynamic Call Fixup
raw_pwrite_stream & OS
Generic interface to target specific assembler backends.
Definition: MCAsmBackend.h:42
Context object for machine code objects.
Definition: MCContext.h:83
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
Definition: MCFixup.h:71
Base class for classes that define behaviour that is specific to both the target and the object forma...
Defines the object file and target independent interfaces used by the assembler backend to write nati...
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:41
This represents an "assembler immediate".
Definition: MCValue.h:36
virtual bool recordRelocation(const MCFixup &) const
static bool classof(const MCObjectTargetWriter *W)
virtual ~MCWinCOFFObjectTargetWriter()=default
virtual unsigned getRelocType(MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup, bool IsCrossSection, const MCAsmBackend &MAB) const =0
Triple::ObjectFormatType getFormat() const override
Target - Wrapper for Target specific information.
ObjectFormatType
Definition: Triple.h:299
LLVM Value Representation.
Definition: Value.h:74
void reset() override
lifetime management
void recordRelocation(MCAssembler &Asm, const MCFragment *Fragment, const MCFixup &Fixup, MCValue Target, uint64_t &FixedValue) override
Record a relocation entry.
void setIncrementalLinkerCompatible(bool Value)
bool isSymbolRefDifferenceFullyResolvedImpl(const MCAssembler &Asm, const MCSymbol &SymA, const MCFragment &FB, bool InSet, bool IsPCRel) const override
void executePostLayoutBinding(MCAssembler &Asm) override
Perform any late binding of symbols (for example, to assign symbol indices for use when generating re...
uint64_t writeObject(MCAssembler &Asm) override
Write the object file and returns the number of bytes written.
An abstract base class for streams implementations that also support a pwrite operation.
Definition: raw_ostream.h:434
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
std::unique_ptr< MCObjectWriter > createWinCOFFDwoObjectWriter(std::unique_ptr< MCWinCOFFObjectTargetWriter > MOTW, raw_pwrite_stream &OS, raw_pwrite_stream &DwoOS)
std::unique_ptr< MCObjectWriter > createWinCOFFObjectWriter(std::unique_ptr< MCWinCOFFObjectTargetWriter > MOTW, raw_pwrite_stream &OS)
Construct a new Win COFF writer instance.