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