MCXCOFFObjectWriter.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. //===-- llvm/MC/MCXCOFFObjectWriter.h - XCOFF Object Writer ---------------===//
  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. #ifndef LLVM_MC_MCXCOFFOBJECTWRITER_H
  9. #define LLVM_MC_MCXCOFFOBJECTWRITER_H
  10. #include "llvm/MC/MCObjectWriter.h"
  11. namespace llvm {
  12. class raw_pwrite_stream;
  13. class MCXCOFFObjectTargetWriter : public MCObjectTargetWriter {
  14. protected:
  15. MCXCOFFObjectTargetWriter(bool Is64Bit);
  16. public:
  17. ~MCXCOFFObjectTargetWriter() override;
  18. Triple::ObjectFormatType getFormat() const override { return Triple::XCOFF; }
  19. static bool classof(const MCObjectTargetWriter *W) {
  20. return W->getFormat() == Triple::XCOFF;
  21. }
  22. bool is64Bit() const { return Is64Bit; }
  23. // Returns relocation info such as type, sign and size.
  24. // First element of the pair contains type,
  25. // second element contains sign and size.
  26. virtual std::pair<uint8_t, uint8_t>
  27. getRelocTypeAndSignSize(const MCValue &Target, const MCFixup &Fixup,
  28. bool IsPCRel) const = 0;
  29. private:
  30. bool Is64Bit;
  31. };
  32. std::unique_ptr<MCObjectWriter>
  33. createXCOFFObjectWriter(std::unique_ptr<MCXCOFFObjectTargetWriter> MOTW,
  34. raw_pwrite_stream &OS);
  35. } // end namespace llvm
  36. #endif // LLVM_MC_MCXCOFFOBJECTWRITER_H