1*cb14a3feSDimitry Andric //===- TextAPI/DylibReader.h - TAPI MachO Dylib Reader ----------*- C++ -*-===// 2*cb14a3feSDimitry Andric // 3*cb14a3feSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*cb14a3feSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*cb14a3feSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*cb14a3feSDimitry Andric // 7*cb14a3feSDimitry Andric //===----------------------------------------------------------------------===// 8*cb14a3feSDimitry Andric /// 9*cb14a3feSDimitry Andric /// Defines the MachO Dynamic Library Reader. 10*cb14a3feSDimitry Andric /// 11*cb14a3feSDimitry Andric //===----------------------------------------------------------------------===// 12*cb14a3feSDimitry Andric 13*cb14a3feSDimitry Andric #ifndef LLVM_TEXTAPI_DYLIBREADER_H 14*cb14a3feSDimitry Andric #define LLVM_TEXTAPI_DYLIBREADER_H 15*cb14a3feSDimitry Andric 16*cb14a3feSDimitry Andric #include "llvm/Support/Error.h" 17*cb14a3feSDimitry Andric #include "llvm/Support/MemoryBuffer.h" 18*cb14a3feSDimitry Andric #include "llvm/TextAPI/ArchitectureSet.h" 19*cb14a3feSDimitry Andric #include "llvm/TextAPI/RecordsSlice.h" 20*cb14a3feSDimitry Andric 21*cb14a3feSDimitry Andric namespace llvm::MachO::DylibReader { 22*cb14a3feSDimitry Andric 23*cb14a3feSDimitry Andric struct ParseOption { 24*cb14a3feSDimitry Andric /// Determines arch slice to parse. 25*cb14a3feSDimitry Andric ArchitectureSet Archs = ArchitectureSet::All(); 26*cb14a3feSDimitry Andric /// Capture Mach-O header from binary, primarily load commands. 27*cb14a3feSDimitry Andric bool MachOHeader = true; 28*cb14a3feSDimitry Andric /// Capture defined symbols out of export trie and n-list. 29*cb14a3feSDimitry Andric bool SymbolTable = true; 30*cb14a3feSDimitry Andric /// Capture undefined symbols too. 31*cb14a3feSDimitry Andric bool Undefineds = true; 32*cb14a3feSDimitry Andric }; 33*cb14a3feSDimitry Andric 34*cb14a3feSDimitry Andric /// Parse Mach-O dynamic libraries to extract TAPI attributes. 35*cb14a3feSDimitry Andric /// 36*cb14a3feSDimitry Andric /// \param Buffer Data that points to dylib. 37*cb14a3feSDimitry Andric /// \param Options Determines which attributes to extract. 38*cb14a3feSDimitry Andric /// \return List of record slices. 39*cb14a3feSDimitry Andric Expected<Records> readFile(MemoryBufferRef Buffer, const ParseOption &Opt); 40*cb14a3feSDimitry Andric 41*cb14a3feSDimitry Andric /// Get TAPI file representation of binary dylib. 42*cb14a3feSDimitry Andric /// 43*cb14a3feSDimitry Andric /// \param Buffer Data that points to dylib. 44*cb14a3feSDimitry Andric Expected<std::unique_ptr<InterfaceFile>> get(MemoryBufferRef Buffer); 45*cb14a3feSDimitry Andric 46*cb14a3feSDimitry Andric } // namespace llvm::MachO::DylibReader 47*cb14a3feSDimitry Andric 48*cb14a3feSDimitry Andric #endif // LLVM_TEXTAPI_DYLIBREADER_H 49