1 //===-- InstrumentationRuntime.cpp ----------------------------------------===//
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 //===---------------------------------------------------------------------===//
9 #include "lldb/Target/InstrumentationRuntime.h"
10 #include "lldb/Core/Module.h"
11 #include "lldb/Core/ModuleList.h"
12 #include "lldb/Core/PluginManager.h"
13 #include "lldb/Target/Process.h"
14 #include "lldb/Utility/RegularExpression.h"
15 #include "lldb/lldb-private.h"
18 using namespace lldb_private
;
20 void InstrumentationRuntime::ModulesDidLoad(
21 lldb_private::ModuleList
&module_list
, lldb_private::Process
*process
,
22 InstrumentationRuntimeCollection
&runtimes
) {
23 InstrumentationRuntimeCreateInstance create_callback
= nullptr;
24 InstrumentationRuntimeGetType get_type_callback
;
25 for (uint32_t idx
= 0;; ++idx
) {
27 PluginManager::GetInstrumentationRuntimeCreateCallbackAtIndex(idx
);
28 if (create_callback
== nullptr)
31 PluginManager::GetInstrumentationRuntimeGetTypeCallbackAtIndex(idx
);
32 InstrumentationRuntimeType type
= get_type_callback();
34 InstrumentationRuntimeCollection::iterator pos
;
35 pos
= runtimes
.find(type
);
36 if (pos
== runtimes
.end()) {
37 runtimes
[type
] = create_callback(process
->shared_from_this());
42 void InstrumentationRuntime::ModulesDidLoad(
43 lldb_private::ModuleList
&module_list
) {
47 if (GetRuntimeModuleSP()) {
52 module_list
.ForEach([this](const lldb::ModuleSP module_sp
) -> bool {
53 const FileSpec
&file_spec
= module_sp
->GetFileSpec();
55 return true; // Keep iterating.
57 const RegularExpression
&runtime_regex
= GetPatternForRuntimeLibrary();
58 if (runtime_regex
.Execute(file_spec
.GetFilename().GetCString()) ||
59 module_sp
->IsExecutable()) {
60 if (CheckIfRuntimeIsValid(module_sp
)) {
61 SetRuntimeModuleSP(module_sp
);
63 return false; // Stop iterating, we're done.
71 lldb::ThreadCollectionSP
72 InstrumentationRuntime::GetBacktracesFromExtendedStopInfo(
73 StructuredData::ObjectSP info
) {
74 return ThreadCollectionSP(new ThreadCollection());