
Remove support for obfuscated bitcode in dsymutil and the DWARF linker. We no longer support bitcode submissions and the obfuscation support has been removed from the rest of the compiler. rdar://123863918
164 lines
4.7 KiB
C++
164 lines
4.7 KiB
C++
//===- DWARFLinkerGlobalData.h ----------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_DWARFLINKER_PARALLEL_DWARFLINKERGLOBALDATA_H
|
|
#define LLVM_LIB_DWARFLINKER_PARALLEL_DWARFLINKERGLOBALDATA_H
|
|
|
|
#include "TypePool.h"
|
|
#include "llvm/DWARFLinker/Parallel/DWARFLinker.h"
|
|
#include "llvm/DWARFLinker/StringPool.h"
|
|
#include "llvm/Support/PerThreadBumpPtrAllocator.h"
|
|
|
|
namespace llvm {
|
|
|
|
class DWARFDie;
|
|
|
|
namespace dwarf_linker {
|
|
namespace parallel {
|
|
|
|
using MessageHandlerTy = std::function<void(
|
|
const Twine &Warning, StringRef Context, const DWARFDie *DIE)>;
|
|
|
|
/// linking options
|
|
struct DWARFLinkerOptions {
|
|
/// DWARF version for the output.
|
|
uint16_t TargetDWARFVersion = 0;
|
|
|
|
/// Generate processing log to the standard output.
|
|
bool Verbose = false;
|
|
|
|
/// Print statistics.
|
|
bool Statistics = false;
|
|
|
|
/// Verify the input DWARF.
|
|
bool VerifyInputDWARF = false;
|
|
|
|
/// Do not unique types according to ODR
|
|
bool NoODR = false;
|
|
|
|
/// Update index tables.
|
|
bool UpdateIndexTablesOnly = false;
|
|
|
|
/// Whether we want a static variable to force us to keep its enclosing
|
|
/// function.
|
|
bool KeepFunctionForStatic = false;
|
|
|
|
/// Allow to generate valid, but non deterministic output.
|
|
bool AllowNonDeterministicOutput = false;
|
|
|
|
/// Number of threads.
|
|
unsigned Threads = 1;
|
|
|
|
/// The accelerator table kinds
|
|
SmallVector<DWARFLinkerBase::AccelTableKind, 1> AccelTables;
|
|
|
|
/// Prepend path for the clang modules.
|
|
std::string PrependPath;
|
|
|
|
/// input verification handler(it might be called asynchronously).
|
|
DWARFLinkerBase::InputVerificationHandlerTy InputVerificationHandler =
|
|
nullptr;
|
|
|
|
/// A list of all .swiftinterface files referenced by the debug
|
|
/// info, mapping Module name to path on disk. The entries need to
|
|
/// be uniqued and sorted and there are only few entries expected
|
|
/// per compile unit, which is why this is a std::map.
|
|
/// this is dsymutil specific fag.
|
|
///
|
|
/// (it might be called asynchronously).
|
|
DWARFLinkerBase::SwiftInterfacesMapTy *ParseableSwiftInterfaces = nullptr;
|
|
|
|
/// A list of remappings to apply to file paths.
|
|
///
|
|
/// (it might be called asynchronously).
|
|
DWARFLinkerBase::ObjectPrefixMapTy *ObjectPrefixMap = nullptr;
|
|
};
|
|
|
|
class DWARFLinkerImpl;
|
|
|
|
/// This class keeps data and services common for the whole linking process.
|
|
class LinkingGlobalData {
|
|
friend DWARFLinkerImpl;
|
|
|
|
public:
|
|
/// Returns global per-thread allocator.
|
|
llvm::parallel::PerThreadBumpPtrAllocator &getAllocator() {
|
|
return Allocator;
|
|
}
|
|
|
|
/// Returns global string pool.
|
|
StringPool &getStringPool() { return Strings; }
|
|
|
|
/// Returns linking options.
|
|
const DWARFLinkerOptions &getOptions() const { return Options; }
|
|
|
|
/// Set warning handler.
|
|
void setWarningHandler(MessageHandlerTy Handler) { WarningHandler = Handler; }
|
|
|
|
/// Set error handler.
|
|
void setErrorHandler(MessageHandlerTy Handler) { ErrorHandler = Handler; }
|
|
|
|
/// Report warning.
|
|
void warn(const Twine &Warning, StringRef Context,
|
|
const DWARFDie *DIE = nullptr) {
|
|
if (WarningHandler)
|
|
(WarningHandler)(Warning, Context, DIE);
|
|
}
|
|
|
|
/// Report warning.
|
|
void warn(Error Warning, StringRef Context, const DWARFDie *DIE = nullptr) {
|
|
handleAllErrors(std::move(Warning), [&](ErrorInfoBase &Info) {
|
|
warn(Info.message(), Context, DIE);
|
|
});
|
|
}
|
|
|
|
/// Report error.
|
|
void error(const Twine &Err, StringRef Context,
|
|
const DWARFDie *DIE = nullptr) {
|
|
if (ErrorHandler)
|
|
(ErrorHandler)(Err, Context, DIE);
|
|
}
|
|
|
|
/// Report error.
|
|
void error(Error Err, StringRef Context, const DWARFDie *DIE = nullptr) {
|
|
handleAllErrors(std::move(Err), [&](ErrorInfoBase &Info) {
|
|
error(Info.message(), Context, DIE);
|
|
});
|
|
}
|
|
|
|
/// Set target triple.
|
|
void setTargetTriple(const Triple &TargetTriple) {
|
|
this->TargetTriple = TargetTriple;
|
|
}
|
|
|
|
/// Optionally return target triple.
|
|
std::optional<std::reference_wrapper<const Triple>> getTargetTriple() {
|
|
if (TargetTriple)
|
|
return std::cref(*TargetTriple);
|
|
|
|
return std::nullopt;
|
|
}
|
|
|
|
protected:
|
|
llvm::parallel::PerThreadBumpPtrAllocator Allocator;
|
|
StringPool Strings;
|
|
DWARFLinkerOptions Options;
|
|
MessageHandlerTy WarningHandler;
|
|
MessageHandlerTy ErrorHandler;
|
|
|
|
/// Triple for output data. May be not set if generation of output
|
|
/// data is not requested.
|
|
std::optional<Triple> TargetTriple;
|
|
};
|
|
|
|
} // end of namespace parallel
|
|
} // end of namespace dwarf_linker
|
|
} // end of namespace llvm
|
|
|
|
#endif // LLVM_LIB_DWARFLINKER_PARALLEL_DWARFLINKERGLOBALDATA_H
|