brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 0229647 Raw
69 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8#ifndef LLVM_TOOLS_DSYMUTIL_MACHOUTILS_H9#define LLVM_TOOLS_DSYMUTIL_MACHOUTILS_H10 11#include "llvm/ADT/StringRef.h"12#include "llvm/Support/FileSystem.h"13#include "llvm/Support/VirtualFileSystem.h"14 15#include <string>16 17namespace llvm {18class MCStreamer;19class raw_fd_ostream;20namespace dsymutil {21class DebugMap;22struct LinkOptions;23namespace MachOUtils {24 25struct 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 34  ArchAndFile(StringRef Arch) : Arch(std::string(Arch)) {}35  ArchAndFile(ArchAndFile &&A) = default;36  ArchAndFile &operator=(ArchAndFile &&A) = default;37  ~ArchAndFile();38};39 40struct DwarfRelocationApplicationInfo {41  // The position in the stream that should be patched, starting from the42  // 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 before46  // writing it.47  bool ShouldSubtractDwarfVM;48 49  DwarfRelocationApplicationInfo(uint64_t AddressFromDwarfVM, uint32_t Value,50                                 bool ShouldSubtractDwarfVM)51      : AddressFromDwarfStart(AddressFromDwarfVM), Value(Value),52        ShouldSubtractDwarfVM(ShouldSubtractDwarfVM) {}53};54 55bool generateUniversalBinary(SmallVectorImpl<ArchAndFile> &ArchFiles,56                             StringRef OutputFileName, const LinkOptions &,57                             StringRef SDKPath, bool Fat64 = false);58bool 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 64std::string getArchName(StringRef Arch);65} // namespace MachOUtils66} // namespace dsymutil67} // namespace llvm68#endif // LLVM_TOOLS_DSYMUTIL_MACHOUTILS_H69