aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/include/llvm/DWARFLinker/DWARFLinkerBase.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/llvm/include/llvm/DWARFLinker/DWARFLinkerBase.h')
-rw-r--r--contrib/llvm-project/llvm/include/llvm/DWARFLinker/DWARFLinkerBase.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/include/llvm/DWARFLinker/DWARFLinkerBase.h b/contrib/llvm-project/llvm/include/llvm/DWARFLinker/DWARFLinkerBase.h
new file mode 100644
index 000000000000..626fb53d90f9
--- /dev/null
+++ b/contrib/llvm-project/llvm/include/llvm/DWARFLinker/DWARFLinkerBase.h
@@ -0,0 +1,100 @@
+//===- DWARFLinkerBase.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_DWARFLINKER_DWARFLINKERBASE_H
+#define LLVM_DWARFLINKER_DWARFLINKERBASE_H
+#include "AddressesMap.h"
+#include "DWARFFile.h"
+#include "llvm/ADT/AddressRanges.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/DebugInfo/DWARF/DWARFContext.h"
+#include "llvm/DebugInfo/DWARF/DWARFDebugLine.h"
+#include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h"
+#include "llvm/DebugInfo/DWARF/DWARFDie.h"
+#include "llvm/DebugInfo/DWARF/DWARFExpression.h"
+#include <map>
+namespace llvm {
+class DWARFUnit;
+
+namespace dwarf_linker {
+
+/// The base interface for DWARFLinker implementations.
+class DWARFLinkerBase {
+public:
+ virtual ~DWARFLinkerBase() = default;
+ using MessageHandlerTy = std::function<void(
+ const Twine &Warning, StringRef Context, const DWARFDie *DIE)>;
+ using ObjFileLoaderTy = std::function<ErrorOr<DWARFFile &>(
+ StringRef ContainerName, StringRef Path)>;
+ using InputVerificationHandlerTy =
+ std::function<void(const DWARFFile &File, llvm::StringRef Output)>;
+ using ObjectPrefixMapTy = std::map<std::string, std::string>;
+ using CompileUnitHandlerTy = function_ref<void(const DWARFUnit &Unit)>;
+ using TranslatorFuncTy = std::function<StringRef(StringRef)>;
+ using SwiftInterfacesMapTy = std::map<std::string, std::string>;
+ /// Type of output file.
+ enum class OutputFileType : uint8_t {
+ Object,
+ Assembly,
+ };
+ /// The kind of accelerator tables to be emitted.
+ enum class AccelTableKind : uint8_t {
+ Apple, ///< .apple_names, .apple_namespaces, .apple_types, .apple_objc.
+ Pub, ///< .debug_pubnames, .debug_pubtypes
+ DebugNames ///< .debug_names.
+ };
+ /// Add an object file to be linked. Pre-load compile unit die. Call
+ /// \p OnCUDieLoaded for each compile unit die. If \p File has reference to
+ /// a Clang module and UpdateIndexTablesOnly == false then the module is be
+ /// pre-loaded by \p Loader.
+ ///
+ /// \pre a call to setNoODR(true) and/or setUpdateIndexTablesOnly(bool Update)
+ /// must be made when required.
+ virtual void addObjectFile(
+ DWARFFile &File, ObjFileLoaderTy Loader = nullptr,
+ CompileUnitHandlerTy OnCUDieLoaded = [](const DWARFUnit &) {}) = 0;
+ /// Link the debug info for all object files added through calls to
+ /// addObjectFile.
+ virtual Error link() = 0;
+ /// A number of methods setting various linking options:
+ /// Enable logging to standard output.
+ virtual void setVerbosity(bool Verbose) = 0;
+ /// Print statistics to standard output.
+ virtual void setStatistics(bool Statistics) = 0;
+ /// Verify the input DWARF.
+ virtual void setVerifyInputDWARF(bool Verify) = 0;
+ /// Do not unique types according to ODR.
+ virtual void setNoODR(bool NoODR) = 0;
+ /// Update index tables only (do not modify rest of DWARF).
+ virtual void setUpdateIndexTablesOnly(bool Update) = 0;
+ /// Allows generating non-deterministic output in exchange for more
+ /// parallelism.
+ virtual void setAllowNonDeterministicOutput(bool) = 0;
+ /// Set whether to keep the enclosing function for a static variable.
+ virtual void setKeepFunctionForStatic(bool KeepFunctionForStatic) = 0;
+ /// Use specified number of threads for parallel files linking.
+ virtual void setNumThreads(unsigned NumThreads) = 0;
+ /// Add kind of accelerator tables to be generated.
+ virtual void addAccelTableKind(AccelTableKind Kind) = 0;
+ /// Set prepend path for clang modules.
+ virtual void setPrependPath(StringRef Ppath) = 0;
+ /// Set estimated objects files amount, for preliminary data allocation.
+ virtual void setEstimatedObjfilesAmount(unsigned ObjFilesNum) = 0;
+ /// Set verification handler used to report verification errors.
+ virtual void
+ setInputVerificationHandler(InputVerificationHandlerTy Handler) = 0;
+ /// Set map for Swift interfaces.
+ virtual void setSwiftInterfacesMap(SwiftInterfacesMapTy *Map) = 0;
+ /// Set prefix map for objects.
+ virtual void setObjectPrefixMap(ObjectPrefixMapTy *Map) = 0;
+ /// Set target DWARF version.
+ virtual Error setTargetDWARFVersion(uint16_t TargetDWARFVersion) = 0;
+};
+} // end namespace dwarf_linker
+} // end namespace llvm
+#endif // LLVM_DWARFLINKER_DWARFLINKERBASE_H