|  | //===- MachOLayoutBuilder.h -------------------------------------*- C++ -*-===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_OBJCOPY_MACHO_MACHOLAYOUTBUILDER_H | 
|  | #define LLVM_OBJCOPY_MACHO_MACHOLAYOUTBUILDER_H | 
|  |  | 
|  | #include "MachOObjcopy.h" | 
|  | #include "Object.h" | 
|  |  | 
|  | namespace llvm { | 
|  | namespace objcopy { | 
|  | namespace macho { | 
|  |  | 
|  | class MachOLayoutBuilder { | 
|  | Object &O; | 
|  | bool Is64Bit; | 
|  | uint64_t PageSize; | 
|  |  | 
|  | // Points to the __LINKEDIT segment if it exists. | 
|  | MachO::macho_load_command *LinkEditLoadCommand = nullptr; | 
|  | StringTableBuilder StrTableBuilder{StringTableBuilder::MachO}; | 
|  |  | 
|  | uint32_t computeSizeOfCmds() const; | 
|  | void constructStringTable(); | 
|  | void updateSymbolIndexes(); | 
|  | void updateDySymTab(MachO::macho_load_command &MLC); | 
|  | uint64_t layoutSegments(); | 
|  | uint64_t layoutRelocations(uint64_t Offset); | 
|  | Error layoutTail(uint64_t Offset); | 
|  |  | 
|  | public: | 
|  | MachOLayoutBuilder(Object &O, bool Is64Bit, uint64_t PageSize) | 
|  | : O(O), Is64Bit(Is64Bit), PageSize(PageSize) {} | 
|  |  | 
|  | // Recomputes and updates fields in the given object such as file offsets. | 
|  | Error layout(); | 
|  |  | 
|  | StringTableBuilder &getStringTableBuilder() { return StrTableBuilder; } | 
|  | }; | 
|  |  | 
|  | } // end namespace macho | 
|  | } // end namespace objcopy | 
|  | } // end namespace llvm | 
|  |  | 
|  | #endif // LLVM_OBJCOPY_MACHO_MACHOLAYOUTBUILDER_H |