xref: /freebsd/contrib/llvm-project/llvm/include/llvm/MC/MCDXContainerWriter.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
1 //===- llvm/MC/MCDXContainerWriter.h - DXContainer 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_MCDXCONTAINERWRITER_H
10 #define LLVM_MC_MCDXCONTAINERWRITER_H
11 
12 #include "llvm/MC/MCObjectWriter.h"
13 #include "llvm/MC/MCValue.h"
14 #include "llvm/Support/EndianStream.h"
15 #include "llvm/TargetParser/Triple.h"
16 
17 namespace llvm {
18 
19 class raw_pwrite_stream;
20 
21 class MCDXContainerTargetWriter : public MCObjectTargetWriter {
22 protected:
MCDXContainerTargetWriter()23   MCDXContainerTargetWriter() {}
24 
25 public:
26   virtual ~MCDXContainerTargetWriter();
27 
getFormat()28   Triple::ObjectFormatType getFormat() const override {
29     return Triple::DXContainer;
30   }
classof(const MCObjectTargetWriter * W)31   static bool classof(const MCObjectTargetWriter *W) {
32     return W->getFormat() == Triple::DXContainer;
33   }
34 };
35 
36 class DXContainerObjectWriter final : public MCObjectWriter {
37   support::endian::Writer W;
38   std::unique_ptr<MCDXContainerTargetWriter> TargetObjectWriter;
39 
40 public:
DXContainerObjectWriter(std::unique_ptr<MCDXContainerTargetWriter> MOTW,raw_pwrite_stream & OS)41   DXContainerObjectWriter(std::unique_ptr<MCDXContainerTargetWriter> MOTW,
42                           raw_pwrite_stream &OS)
43       : W(OS, llvm::endianness::little), TargetObjectWriter(std::move(MOTW)) {}
44 
45   uint64_t writeObject() override;
46 };
47 } // end namespace llvm
48 
49 #endif // LLVM_MC_MCDXCONTAINERWRITER_H
50