Path: blob/main/contrib/llvm-project/llvm/lib/ObjCopy/MachO/MachOWriter.h
35267 views
//===- MachOWriter.h --------------------------------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLVM_LIB_OBJCOPY_MACHO_MACHOWRITER_H9#define LLVM_LIB_OBJCOPY_MACHO_MACHOWRITER_H1011#include "MachOLayoutBuilder.h"12#include "MachOObject.h"13#include "llvm/BinaryFormat/MachO.h"14#include "llvm/ObjCopy/MachO/MachOObjcopy.h"15#include "llvm/Object/MachO.h"1617namespace llvm {18class Error;1920namespace objcopy {21namespace macho {2223class MachOWriter {24Object &O;25bool Is64Bit;26bool IsLittleEndian;27uint64_t PageSize;28std::unique_ptr<WritableMemoryBuffer> Buf;29raw_ostream &Out;30MachOLayoutBuilder LayoutBuilder;3132size_t headerSize() const;33size_t loadCommandsSize() const;34size_t symTableSize() const;35size_t strTableSize() const;3637void writeHeader();38void writeLoadCommands();39template <typename StructType>40void writeSectionInLoadCommand(const Section &Sec, uint8_t *&Out);41void writeSections();42void writeSymbolTable();43void writeStringTable();44void writeRebaseInfo();45void writeBindInfo();46void writeWeakBindInfo();47void writeLazyBindInfo();48void writeExportInfo();49void writeIndirectSymbolTable();50void writeLinkData(std::optional<size_t> LCIndex, const LinkData &LD);51void writeCodeSignatureData();52void writeDataInCodeData();53void writeLinkerOptimizationHint();54void writeFunctionStartsData();55void writeDylibCodeSignDRsData();56void writeChainedFixupsData();57void writeExportsTrieData();58void writeTail();5960public:61MachOWriter(Object &O, bool Is64Bit, bool IsLittleEndian,62StringRef OutputFileName, uint64_t PageSize, raw_ostream &Out)63: O(O), Is64Bit(Is64Bit), IsLittleEndian(IsLittleEndian),64PageSize(PageSize), Out(Out),65LayoutBuilder(O, Is64Bit, OutputFileName, PageSize) {}6667size_t totalSize() const;68Error finalize();69Error write();70};7172} // end namespace macho73} // end namespace objcopy74} // end namespace llvm7576#endif // LLVM_LIB_OBJCOPY_MACHO_MACHOWRITER_H777879