1 //===- MachOReader.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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "MachOObjcopy.h" 10 #include "Object.h" 11 #include "llvm/BinaryFormat/MachO.h" 12 #include "llvm/Object/MachO.h" 13 #include <memory> 14 15 namespace llvm { 16 namespace objcopy { 17 namespace macho { 18 19 // The hierarchy of readers is responsible for parsing different inputs: 20 // raw binaries and regular MachO object files. 21 class Reader { 22 public: ~Reader()23 virtual ~Reader(){}; 24 virtual Expected<std::unique_ptr<Object>> create() const = 0; 25 }; 26 27 class MachOReader : public Reader { 28 const object::MachOObjectFile &MachOObj; 29 30 void readHeader(Object &O) const; 31 Error readLoadCommands(Object &O) const; 32 void readSymbolTable(Object &O) const; 33 void setSymbolInRelocationInfo(Object &O) const; 34 void readRebaseInfo(Object &O) const; 35 void readBindInfo(Object &O) const; 36 void readWeakBindInfo(Object &O) const; 37 void readLazyBindInfo(Object &O) const; 38 void readExportInfo(Object &O) const; 39 void readLinkData(Object &O, Optional<size_t> LCIndex, LinkData &LD) const; 40 void readCodeSignature(Object &O) const; 41 void readDataInCodeData(Object &O) const; 42 void readFunctionStartsData(Object &O) const; 43 void readIndirectSymbolTable(Object &O) const; 44 void readSwiftVersion(Object &O) const; 45 46 public: MachOReader(const object::MachOObjectFile & Obj)47 explicit MachOReader(const object::MachOObjectFile &Obj) : MachOObj(Obj) {} 48 49 Expected<std::unique_ptr<Object>> create() const override; 50 }; 51 52 } // end namespace macho 53 } // end namespace objcopy 54 } // end namespace llvm 55