3 changes: 3 additions & 0 deletions lldb/source/API/SystemInitializerFull.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include "Plugins/DynamicLoader/Static/DynamicLoaderStatic.h"
#include "Plugins/Instruction/ARM64/EmulateInstructionARM64.h"
#include "Plugins/InstrumentationRuntime/AddressSanitizer/AddressSanitizerRuntime.h"
#include "Plugins/InstrumentationRuntime/ThreadSanitizer/ThreadSanitizerRuntime.h"
#include "Plugins/JITLoader/GDB/JITLoaderGDB.h"
#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
#include "Plugins/Language/Go/GoLanguage.h"
Expand Down Expand Up @@ -306,6 +307,7 @@ SystemInitializerFull::Initialize()
#endif
MemoryHistoryASan::Initialize();
AddressSanitizerRuntime::Initialize();
ThreadSanitizerRuntime::Initialize();

SymbolVendorELF::Initialize();
SymbolFileDWARF::Initialize();
Expand Down Expand Up @@ -429,6 +431,7 @@ SystemInitializerFull::Terminate()
#endif
MemoryHistoryASan::Terminate();
AddressSanitizerRuntime::Terminate();
ThreadSanitizerRuntime::Terminate();
SymbolVendorELF::Terminate();
SymbolFileDWARF::Terminate();
SymbolFilePDB::Terminate();
Expand Down
1 change: 1 addition & 0 deletions lldb/source/Plugins/InstrumentationRuntime/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
add_subdirectory(AddressSanitizer)
add_subdirectory(ThreadSanitizer)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
add_lldb_library(lldbPluginInstrumentationRuntimeThreadSanitizer
ThreadSanitizerRuntime.cpp
)

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
//===-- ThreadSanitizerRuntime.h --------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef liblldb_ThreadSanitizerRuntime_h_
#define liblldb_ThreadSanitizerRuntime_h_

// C Includes
// C++ Includes
// Other libraries and framework includes
// Project includes
#include "lldb/lldb-private.h"
#include "lldb/Target/ABI.h"
#include "lldb/Target/InstrumentationRuntime.h"
#include "lldb/Target/Process.h"
#include "lldb/Core/StructuredData.h"

namespace lldb_private {

class ThreadSanitizerRuntime : public lldb_private::InstrumentationRuntime
{
public:
~ThreadSanitizerRuntime() override;

static lldb::InstrumentationRuntimeSP
CreateInstance (const lldb::ProcessSP &process_sp);

static void
Initialize();

static void
Terminate();

static lldb_private::ConstString
GetPluginNameStatic();

static lldb::InstrumentationRuntimeType
GetTypeStatic();

lldb_private::ConstString
GetPluginName() override
{
return GetPluginNameStatic();
}

virtual lldb::InstrumentationRuntimeType
GetType() { return GetTypeStatic(); }

uint32_t
GetPluginVersion() override
{
return 1;
}

void
ModulesDidLoad(lldb_private::ModuleList &module_list) override;

bool
IsActive() override;

private:
ThreadSanitizerRuntime(const lldb::ProcessSP &process_sp);

lldb::ProcessSP
GetProcessSP ()
{
return m_process_wp.lock();
}

lldb::ModuleSP
GetRuntimeModuleSP ()
{
return m_runtime_module_wp.lock();
}

void
Activate();

void
Deactivate();

static bool
NotifyBreakpointHit(void *baton, StoppointCallbackContext *context, lldb::user_id_t break_id, lldb::user_id_t break_loc_id);

StructuredData::ObjectSP
RetrieveReportData(ExecutionContextRef exe_ctx_ref);

std::string
FormatDescription(StructuredData::ObjectSP report);

bool m_is_active;
lldb::ModuleWP m_runtime_module_wp;
lldb::ProcessWP m_process_wp;
lldb::user_id_t m_breakpoint_id;
};

} // namespace lldb_private

#endif // liblldb_ThreadSanitizerRuntime_h_