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