mirror of
https://github.com/intel/llvm.git
synced 2026-01-14 03:50:17 +08:00
Adapters for instrumentation runtimes have to do two basic things:
1) Load a runtime library.
2) Install breakpoints in that library.
This logic is duplicated in the adapters for asan and tsan. Factor it
out and document bits of it to make it easier to add new adapters.
I tested this with check-lldb, and double-checked
testcases/functionalities/{a,t}san.
Differential Revision: https://reviews.llvm.org/D23043
llvm-svn: 278367
48 lines
1.6 KiB
C++
48 lines
1.6 KiB
C++
//===-- InstrumentationRuntime.cpp ------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===---------------------------------------------------------------------===//
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
#include "lldb/lldb-private.h"
|
|
#include "lldb/Target/Process.h"
|
|
#include "lldb/Core/PluginManager.h"
|
|
#include "lldb/Target/InstrumentationRuntime.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());
|
|
}
|
|
}
|
|
}
|
|
|
|
lldb::ThreadCollectionSP
|
|
InstrumentationRuntime::GetBacktracesFromExtendedStopInfo(StructuredData::ObjectSP info)
|
|
{
|
|
return ThreadCollectionSP(new ThreadCollection());
|
|
}
|