brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 5da29df Raw
78 lines · c
1//===- MachOWriter.h --------------------------------------------*- 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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_LIB_OBJCOPY_MACHO_MACHOWRITER_H10#define LLVM_LIB_OBJCOPY_MACHO_MACHOWRITER_H11 12#include "MachOLayoutBuilder.h"13#include "MachOObject.h"14#include "llvm/BinaryFormat/MachO.h"15#include "llvm/ObjCopy/MachO/MachOObjcopy.h"16#include "llvm/Object/MachO.h"17 18namespace llvm {19class Error;20 21namespace objcopy {22namespace macho {23 24class MachOWriter {25  Object &O;26  bool Is64Bit;27  bool IsLittleEndian;28  uint64_t PageSize;29  std::unique_ptr<WritableMemoryBuffer> Buf;30  raw_ostream &Out;31  MachOLayoutBuilder LayoutBuilder;32 33  size_t headerSize() const;34  size_t loadCommandsSize() const;35  size_t symTableSize() const;36  size_t strTableSize() const;37 38  void writeHeader();39  void writeLoadCommands();40  template <typename StructType>41  void writeSectionInLoadCommand(const Section &Sec, uint8_t *&Out);42  void writeSections();43  void writeSymbolTable();44  void writeStringTable();45  void writeRebaseInfo();46  void writeBindInfo();47  void writeWeakBindInfo();48  void writeLazyBindInfo();49  void writeExportInfo();50  void writeIndirectSymbolTable();51  void writeLinkData(std::optional<size_t> LCIndex, const LinkData &LD);52  void writeCodeSignatureData();53  void writeDataInCodeData();54  void writeLinkerOptimizationHint();55  void writeFunctionStartsData();56  void writeDylibCodeSignDRsData();57  void writeChainedFixupsData();58  void writeExportsTrieData();59  void writeTail();60 61public:62  MachOWriter(Object &O, bool Is64Bit, bool IsLittleEndian,63              StringRef OutputFileName, uint64_t PageSize, raw_ostream &Out)64      : O(O), Is64Bit(Is64Bit), IsLittleEndian(IsLittleEndian),65        PageSize(PageSize), Out(Out),66        LayoutBuilder(O, Is64Bit, OutputFileName, PageSize) {}67 68  size_t totalSize() const;69  Error finalize();70  Error write();71};72 73} // end namespace macho74} // end namespace objcopy75} // end namespace llvm76 77#endif // LLVM_LIB_OBJCOPY_MACHO_MACHOWRITER_H78