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 "SymbolMap.h"
13 #include "llvm/ADT/StringRef.h"
14 #include "llvm/Support/FileSystem.h"
15 #include "llvm/Support/VirtualFileSystem.h"
25 namespace MachOUtils
{
29 std::unique_ptr
<llvm::sys::fs::TempFile
> File
;
31 llvm::Error
createTempFile();
32 llvm::StringRef
path() 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
&,
58 bool generateDsymCompanion(
59 llvm::IntrusiveRefCntPtr
<llvm::vfs::FileSystem
> VFS
, const DebugMap
&DM
,
60 SymbolMapTranslator
&Translator
, 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