1 //===-- MachOUtils.h - Mach-o specific helpers for dsymutil --------------===//
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
7 //===----------------------------------------------------------------------===//
8 #ifndef LLVM_TOOLS_DSYMUTIL_MACHOUTILS_H
9 #define LLVM_TOOLS_DSYMUTIL_MACHOUTILS_H
11 #include "llvm/ADT/StringRef.h"
12 #include "llvm/Support/FileSystem.h"
13 #include "llvm/Support/VirtualFileSystem.h"
23 namespace MachOUtils
{
30 llvm::Error
createTempFile();
31 llvm::StringRef
getPath() const;
34 ArchAndFile(StringRef Arch
) : Arch(std::string(Arch
)) {}
35 ArchAndFile(ArchAndFile
&&A
) = default;
36 ArchAndFile
&operator=(ArchAndFile
&&A
) = default;
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
;
45 // If we should subtract the Dwarf segment's VM address from value before
47 bool ShouldSubtractDwarfVM
;
49 DwarfRelocationApplicationInfo(uint64_t AddressFromDwarfVM
, uint32_t Value
,
50 bool ShouldSubtractDwarfVM
)
51 : AddressFromDwarfStart(AddressFromDwarfVM
), Value(Value
),
52 ShouldSubtractDwarfVM(ShouldSubtractDwarfVM
) {}
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
>
64 std::string
getArchName(StringRef Arch
);
65 } // namespace MachOUtils
66 } // namespace dsymutil
68 #endif // LLVM_TOOLS_DSYMUTIL_MACHOUTILS_H