1 //===-- MachOUtils.h - Mach-o specific helpers for dsymutil --------------===// 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 #ifndef LLVM_TOOLS_DSYMUTIL_MACHOUTILS_H 9 #define LLVM_TOOLS_DSYMUTIL_MACHOUTILS_H 10 11 #include "llvm/ADT/StringRef.h" 12 #include "llvm/Support/FileSystem.h" 13 #include "llvm/Support/VirtualFileSystem.h" 14 15 #include <string> 16 17 namespace llvm { 18 class MCStreamer; 19 class raw_fd_ostream; 20 namespace dsymutil { 21 class DebugMap; 22 struct LinkOptions; 23 namespace MachOUtils { 24 25 struct ArchAndFile { 26 std::string Arch; 27 std::string Path; 28 int FD = -1; 29 30 llvm::Error createTempFile(); 31 llvm::StringRef getPath() const; 32 int getFD() const; 33 ArchAndFileArchAndFile34 ArchAndFile(StringRef Arch) : Arch(std::string(Arch)) {} 35 ArchAndFile(ArchAndFile &&A) = default; 36 ArchAndFile &operator=(ArchAndFile &&A) = default; 37 ~ArchAndFile(); 38 }; 39 40 struct DwarfRelocationApplicationInfo { 41 // The position in the stream that should be patched, starting from the 42 // Dwarf's segment file address. 43 uint64_t AddressFromDwarfStart; 44 int32_t Value; 45 // If we should subtract the Dwarf segment's VM address from value before 46 // writing it. 47 bool ShouldSubtractDwarfVM; 48 DwarfRelocationApplicationInfoDwarfRelocationApplicationInfo49 DwarfRelocationApplicationInfo(uint64_t AddressFromDwarfVM, uint32_t Value, 50 bool ShouldSubtractDwarfVM) 51 : AddressFromDwarfStart(AddressFromDwarfVM), Value(Value), 52 ShouldSubtractDwarfVM(ShouldSubtractDwarfVM) {} 53 }; 54 55 bool generateUniversalBinary(SmallVectorImpl<ArchAndFile> &ArchFiles, 56 StringRef OutputFileName, const LinkOptions &, 57 StringRef SDKPath, bool Fat64 = false); 58 bool generateDsymCompanion( 59 llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, const DebugMap &DM, 60 MCStreamer &MS, raw_fd_ostream &OutFile, 61 const std::vector<MachOUtils::DwarfRelocationApplicationInfo> 62 &RelocationsToApply); 63 64 std::string getArchName(StringRef Arch); 65 } // namespace MachOUtils 66 } // namespace dsymutil 67 } // namespace llvm 68 #endif // LLVM_TOOLS_DSYMUTIL_MACHOUTILS_H 69