LLDB mainline
Functions | Variables
InstrumentationRuntimeTSan.cpp File Reference
#include "InstrumentationRuntimeTSan.h"
#include "Plugins/Process/Utility/HistoryThread.h"
#include "lldb/Breakpoint/StoppointCallbackContext.h"
#include "lldb/Core/Debugger.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/PluginInterface.h"
#include "lldb/Core/PluginManager.h"
#include "lldb/Core/ValueObject.h"
#include "lldb/Expression/UserExpression.h"
#include "lldb/Host/StreamFile.h"
#include "lldb/Interpreter/CommandReturnObject.h"
#include "lldb/Symbol/Symbol.h"
#include "lldb/Symbol/SymbolContext.h"
#include "lldb/Symbol/Variable.h"
#include "lldb/Symbol/VariableList.h"
#include "lldb/Target/InstrumentationRuntimeStopInfo.h"
#include "lldb/Target/SectionLoadList.h"
#include "lldb/Target/StopInfo.h"
#include "lldb/Target/Target.h"
#include "lldb/Target/Thread.h"
#include "lldb/Utility/LLDBLog.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/RegularExpression.h"
#include "lldb/Utility/Stream.h"
#include <memory>

Go to the source code of this file.

Functions

static StructuredData::ArraySP CreateStackTrace (ValueObjectSP o, const std::string &trace_item_name=".trace")
 
static StructuredData::ArraySP ConvertToStructuredArray (ValueObjectSP return_value_sp, const std::string &items_name, const std::string &count_name, std::function< void(const ValueObjectSP &o, const StructuredData::DictionarySP &dict)> const &callback)
 
static std::string RetrieveString (ValueObjectSP return_value_sp, ProcessSP process_sp, const std::string &expression_path)
 
static void GetRenumberedThreadIds (ProcessSP process_sp, ValueObjectSP data, std::map< uint64_t, user_id_t > &thread_id_map)
 
static user_id_t Renumber (uint64_t id, std::map< uint64_t, user_id_t > &thread_id_map)
 
static std::string Sprintf (const char *format,...)
 
static std::string GetSymbolNameFromAddress (ProcessSP process_sp, addr_t addr)
 
static void GetSymbolDeclarationFromAddress (ProcessSP process_sp, addr_t addr, Declaration &decl)
 
static std::string GenerateThreadName (const std::string &path, StructuredData::Object *o, StructuredData::ObjectSP main_info)
 
static void AddThreadsForPath (const std::string &path, ThreadCollectionSP threads, ProcessSP process_sp, StructuredData::ObjectSP info)
 

Variables

const char * thread_sanitizer_retrieve_report_data_prefix
 
const char * thread_sanitizer_retrieve_report_data_command
 

Function Documentation

◆ AddThreadsForPath()

static void AddThreadsForPath ( const std::string &  path,
ThreadCollectionSP  threads,
ProcessSP  process_sp,
StructuredData::ObjectSP  info 
)
static

◆ ConvertToStructuredArray()

static StructuredData::ArraySP ConvertToStructuredArray ( ValueObjectSP  return_value_sp,
const std::string &  items_name,
const std::string &  count_name,
std::function< void(const ValueObjectSP &o, const StructuredData::DictionarySP &dict)> const &  callback 
)
static

◆ CreateStackTrace()

static StructuredData::ArraySP CreateStackTrace ( ValueObjectSP  o,
const std::string &  trace_item_name = ".trace" 
)
static

◆ GenerateThreadName()

static std::string GenerateThreadName ( const std::string &  path,
StructuredData::Object o,
StructuredData::ObjectSP  main_info 
)
static

◆ GetRenumberedThreadIds()

static void GetRenumberedThreadIds ( ProcessSP  process_sp,
ValueObjectSP  data,
std::map< uint64_t, user_id_t > &  thread_id_map 
)
static

◆ GetSymbolDeclarationFromAddress()

static void GetSymbolDeclarationFromAddress ( ProcessSP  process_sp,
addr_t  addr,
Declaration decl 
)
static

◆ GetSymbolNameFromAddress()

static std::string GetSymbolNameFromAddress ( ProcessSP  process_sp,
addr_t  addr 
)
static

◆ Renumber()

static user_id_t Renumber ( uint64_t  id,
std::map< uint64_t, user_id_t > &  thread_id_map 
)
static

◆ RetrieveString()

static std::string RetrieveString ( ValueObjectSP  return_value_sp,
ProcessSP  process_sp,
const std::string &  expression_path 
)
static

◆ Sprintf()

static std::string Sprintf ( const char *  format,
  ... 
)
static

Variable Documentation

◆ thread_sanitizer_retrieve_report_data_command

const char* thread_sanitizer_retrieve_report_data_command

◆ thread_sanitizer_retrieve_report_data_prefix

const char* thread_sanitizer_retrieve_report_data_prefix
Initial value:
= R"(
extern "C"
{
void *__tsan_get_current_report();
int __tsan_get_report_data(void *report, const char **description, int *count,
int *stack_count, int *mop_count, int *loc_count,
int *mutex_count, int *thread_count,
int *unique_tid_count, void **sleep_trace,
unsigned long trace_size);
int __tsan_get_report_stack(void *report, unsigned long idx, void **trace,
unsigned long trace_size);
int __tsan_get_report_mop(void *report, unsigned long idx, int *tid, void **addr,
int *size, int *write, int *atomic, void **trace,
unsigned long trace_size);
int __tsan_get_report_loc(void *report, unsigned long idx, const char **type,
void **addr, unsigned long *start, unsigned long *size, int *tid,
int *fd, int *suppressable, void **trace,
unsigned long trace_size);
int __tsan_get_report_mutex(void *report, unsigned long idx, unsigned long *mutex_id, void **addr,
int *destroyed, void **trace, unsigned long trace_size);
int __tsan_get_report_thread(void *report, unsigned long idx, int *tid, unsigned long *os_id,
int *running, const char **name, int *parent_tid,
void **trace, unsigned long trace_size);
int __tsan_get_report_unique_tid(void *report, unsigned long idx, int *tid);
// TODO: dlsym won't work on Windows.
void *dlsym(void* handle, const char* symbol);
int (*ptr__tsan_get_report_loc_object_type)(void *report, unsigned long idx, const char **object_type);
}
)"

Definition at line 63 of file InstrumentationRuntimeTSan.cpp.

Referenced by lldb_private::InstrumentationRuntimeTSan::RetrieveReportData().