summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/source/Target/InstrumentationRuntime.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
commit061da546b983eb767bad15e67af1174fb0bcf31c (patch)
tree83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/source/Target/InstrumentationRuntime.cpp
parentImport LLVM 10.0.0 release including clang, lld and lldb. (diff)
downloadwireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz
wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/source/Target/InstrumentationRuntime.cpp')
-rw-r--r--gnu/llvm/lldb/source/Target/InstrumentationRuntime.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/source/Target/InstrumentationRuntime.cpp b/gnu/llvm/lldb/source/Target/InstrumentationRuntime.cpp
new file mode 100644
index 00000000000..4c2eb064fbb
--- /dev/null
+++ b/gnu/llvm/lldb/source/Target/InstrumentationRuntime.cpp
@@ -0,0 +1,75 @@
+//===-- InstrumentationRuntime.cpp ------------------------------*- 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
+//
+//===---------------------------------------------------------------------===//
+
+#include "lldb/Target/InstrumentationRuntime.h"
+#include "lldb/Core/Module.h"
+#include "lldb/Core/ModuleList.h"
+#include "lldb/Core/PluginManager.h"
+#include "lldb/Target/Process.h"
+#include "lldb/Utility/RegularExpression.h"
+#include "lldb/lldb-private.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+void InstrumentationRuntime::ModulesDidLoad(
+ lldb_private::ModuleList &module_list, lldb_private::Process *process,
+ InstrumentationRuntimeCollection &runtimes) {
+ InstrumentationRuntimeCreateInstance create_callback = nullptr;
+ InstrumentationRuntimeGetType get_type_callback;
+ for (uint32_t idx = 0;; ++idx) {
+ create_callback =
+ PluginManager::GetInstrumentationRuntimeCreateCallbackAtIndex(idx);
+ if (create_callback == nullptr)
+ break;
+ get_type_callback =
+ PluginManager::GetInstrumentationRuntimeGetTypeCallbackAtIndex(idx);
+ InstrumentationRuntimeType type = get_type_callback();
+
+ InstrumentationRuntimeCollection::iterator pos;
+ pos = runtimes.find(type);
+ if (pos == runtimes.end()) {
+ runtimes[type] = create_callback(process->shared_from_this());
+ }
+ }
+}
+
+void InstrumentationRuntime::ModulesDidLoad(
+ lldb_private::ModuleList &module_list) {
+ if (IsActive())
+ return;
+
+ if (GetRuntimeModuleSP()) {
+ Activate();
+ return;
+ }
+
+ module_list.ForEach([this](const lldb::ModuleSP module_sp) -> bool {
+ const FileSpec &file_spec = module_sp->GetFileSpec();
+ if (!file_spec)
+ return true; // Keep iterating.
+
+ const RegularExpression &runtime_regex = GetPatternForRuntimeLibrary();
+ if (runtime_regex.Execute(file_spec.GetFilename().GetCString()) ||
+ module_sp->IsExecutable()) {
+ if (CheckIfRuntimeIsValid(module_sp)) {
+ SetRuntimeModuleSP(module_sp);
+ Activate();
+ return false; // Stop iterating, we're done.
+ }
+ }
+
+ return true;
+ });
+}
+
+lldb::ThreadCollectionSP
+InstrumentationRuntime::GetBacktracesFromExtendedStopInfo(
+ StructuredData::ObjectSP info) {
+ return ThreadCollectionSP(new ThreadCollection());
+}