diff options
Diffstat (limited to 'contrib/llvm/tools/lldb/source/API')
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBCommandInterpreter.cpp | 125 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBData.cpp | 26 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBDebugger.cpp | 4 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBFileSpec.cpp | 2 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBFunction.cpp | 4 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBHostOS.cpp | 4 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBModuleSpec.cpp | 2 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBProcess.cpp | 40 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBSymbol.cpp | 4 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBTarget.cpp | 134 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBThread.cpp | 89 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBType.cpp | 84 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBTypeCategory.cpp | 41 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBTypeNameSpecifier.cpp | 2 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBValue.cpp | 174 |
15 files changed, 520 insertions, 215 deletions
diff --git a/contrib/llvm/tools/lldb/source/API/SBCommandInterpreter.cpp b/contrib/llvm/tools/lldb/source/API/SBCommandInterpreter.cpp index 0c83900..ac77e2e 100644 --- a/contrib/llvm/tools/lldb/source/API/SBCommandInterpreter.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBCommandInterpreter.cpp @@ -384,15 +384,103 @@ SBCommandInterpreter::SetCommandOverrideCallback (const char *command_name, extern "C" void init_lldb(void); -#else +// these are the Pythonic implementations of the required callbacks +// these are scripting-language specific, which is why they belong here +// we still need to use function pointers to them instead of relying +// on linkage-time resolution because the SWIG stuff and this file +// get built at different times +extern "C" bool +LLDBSwigPythonBreakpointCallbackFunction (const char *python_function_name, + const char *session_dictionary_name, + const lldb::StackFrameSP& sb_frame, + const lldb::BreakpointLocationSP& sb_bp_loc); + +extern "C" bool +LLDBSwigPythonWatchpointCallbackFunction (const char *python_function_name, + const char *session_dictionary_name, + const lldb::StackFrameSP& sb_frame, + const lldb::WatchpointSP& sb_wp); + +extern "C" bool +LLDBSwigPythonCallTypeScript (const char *python_function_name, + void *session_dictionary, + const lldb::ValueObjectSP& valobj_sp, + void** pyfunct_wrapper, + std::string& retval); + +extern "C" void* +LLDBSwigPythonCreateSyntheticProvider (const char *python_class_name, + const char *session_dictionary_name, + const lldb::ValueObjectSP& valobj_sp); + + +extern "C" uint32_t +LLDBSwigPython_CalculateNumChildren (void *implementor); + +extern "C" void * +LLDBSwigPython_GetChildAtIndex (void *implementor, uint32_t idx); + +extern "C" int +LLDBSwigPython_GetIndexOfChildWithName (void *implementor, const char* child_name); + +extern "C" void * +LLDBSWIGPython_CastPyObjectToSBValue (void* data); + +extern lldb::ValueObjectSP +LLDBSWIGPython_GetValueObjectSPFromSBValue (void* data); + +extern "C" bool +LLDBSwigPython_UpdateSynthProviderInstance (void* implementor); + +extern "C" bool +LLDBSwigPython_MightHaveChildrenSynthProviderInstance (void* implementor); + +extern "C" bool +LLDBSwigPythonCallCommand (const char *python_function_name, + const char *session_dictionary_name, + lldb::DebuggerSP& debugger, + const char* args, + lldb_private::CommandReturnObject &cmd_retobj); + +extern "C" bool +LLDBSwigPythonCallModuleInit (const char *python_module_name, + const char *session_dictionary_name, + lldb::DebuggerSP& debugger); + +extern "C" void* +LLDBSWIGPythonCreateOSPlugin (const char *python_class_name, + const char *session_dictionary_name, + const lldb::ProcessSP& process_sp); + +extern "C" bool +LLDBSWIGPythonRunScriptKeywordProcess (const char* python_function_name, + const char* session_dictionary_name, + lldb::ProcessSP& process, + std::string& output); + +extern "C" bool +LLDBSWIGPythonRunScriptKeywordThread (const char* python_function_name, + const char* session_dictionary_name, + lldb::ThreadSP& thread, + std::string& output); + +extern "C" bool +LLDBSWIGPythonRunScriptKeywordTarget (const char* python_function_name, + const char* session_dictionary_name, + lldb::TargetSP& target, + std::string& output); + +extern "C" bool +LLDBSWIGPythonRunScriptKeywordFrame (const char* python_function_name, + const char* session_dictionary_name, + lldb::StackFrameSP& frame, + std::string& output); + +extern "C" void* +LLDBSWIGPython_GetDynamicSetting (void* module, + const char* setting, + const lldb::TargetSP& target_sp); -extern "C" void init_lldb(void); - -// Usually defined in the SWIG source file, but we have sripting disabled -extern "C" void -init_lldb(void) -{ -} #endif @@ -404,7 +492,26 @@ SBCommandInterpreter::InitializeSWIG () { g_initialized = true; #ifndef LLDB_DISABLE_PYTHON - ScriptInterpreter::InitializeInterpreter (init_lldb); + ScriptInterpreter::InitializeInterpreter (init_lldb, + LLDBSwigPythonBreakpointCallbackFunction, + LLDBSwigPythonWatchpointCallbackFunction, + LLDBSwigPythonCallTypeScript, + LLDBSwigPythonCreateSyntheticProvider, + LLDBSwigPython_CalculateNumChildren, + LLDBSwigPython_GetChildAtIndex, + LLDBSwigPython_GetIndexOfChildWithName, + LLDBSWIGPython_CastPyObjectToSBValue, + LLDBSWIGPython_GetValueObjectSPFromSBValue, + LLDBSwigPython_UpdateSynthProviderInstance, + LLDBSwigPython_MightHaveChildrenSynthProviderInstance, + LLDBSwigPythonCallCommand, + LLDBSwigPythonCallModuleInit, + LLDBSWIGPythonCreateOSPlugin, + LLDBSWIGPythonRunScriptKeywordProcess, + LLDBSWIGPythonRunScriptKeywordThread, + LLDBSWIGPythonRunScriptKeywordTarget, + LLDBSWIGPythonRunScriptKeywordFrame, + LLDBSWIGPython_GetDynamicSetting); #endif } } diff --git a/contrib/llvm/tools/lldb/source/API/SBData.cpp b/contrib/llvm/tools/lldb/source/API/SBData.cpp index 5b2f075..06dcfc1 100644 --- a/contrib/llvm/tools/lldb/source/API/SBData.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBData.cpp @@ -122,7 +122,7 @@ SBData::GetByteSize () value = m_opaque_sp->GetByteSize(); if (log) log->Printf ("SBData::GetByteSize () => " - "(%lu)", value); + "(%zu)", value); return value; } @@ -479,7 +479,7 @@ SBData::ReadRawData (lldb::SBError& error, error.SetErrorString("unable to read data"); } if (log) - log->Printf ("SBData::ReadRawData (error=%p,offset=%" PRIu64 ",buf=%p,size=%lu) => " + log->Printf ("SBData::ReadRawData (error=%p,offset=%" PRIu64 ",buf=%p,size=%zu) => " "(%p)", error.get(), offset, buf, size, ok); return ok ? size : 0; } @@ -497,7 +497,7 @@ SBData::SetData (lldb::SBError& error, else m_opaque_sp->SetData(buf, size, endian); if (log) - log->Printf ("SBData::SetData (error=%p,buf=%p,size=%lu,endian=%d,addr_size=%c) => " + log->Printf ("SBData::SetData (error=%p,buf=%p,size=%zu,endian=%d,addr_size=%c) => " "(%p)", error.get(), buf, size, endian, addr_size, m_opaque_sp.get()); } @@ -647,7 +647,7 @@ SBData::SetDataFromUInt64Array (uint64_t* array, size_t array_len) if (!array || array_len == 0) { if (log) - log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => " + log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %zu) => " "false", array, array_len); return false; } @@ -662,7 +662,7 @@ SBData::SetDataFromUInt64Array (uint64_t* array, size_t array_len) m_opaque_sp->SetData(buffer_sp); if (log) - log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => " + log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %zu) => " "true", array, array_len); return true; @@ -676,7 +676,7 @@ SBData::SetDataFromUInt32Array (uint32_t* array, size_t array_len) if (!array || array_len == 0) { if (log) - log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => " + log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %zu) => " "false", array, array_len); return false; } @@ -691,7 +691,7 @@ SBData::SetDataFromUInt32Array (uint32_t* array, size_t array_len) m_opaque_sp->SetData(buffer_sp); if (log) - log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => " + log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %zu) => " "true", array, array_len); return true; @@ -705,7 +705,7 @@ SBData::SetDataFromSInt64Array (int64_t* array, size_t array_len) if (!array || array_len == 0) { if (log) - log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => " + log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %zu) => " "false", array, array_len); return false; } @@ -720,7 +720,7 @@ SBData::SetDataFromSInt64Array (int64_t* array, size_t array_len) m_opaque_sp->SetData(buffer_sp); if (log) - log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => " + log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %zu) => " "true", array, array_len); return true; @@ -734,7 +734,7 @@ SBData::SetDataFromSInt32Array (int32_t* array, size_t array_len) if (!array || array_len == 0) { if (log) - log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => " + log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %zu) => " "false", array, array_len); return false; } @@ -749,7 +749,7 @@ SBData::SetDataFromSInt32Array (int32_t* array, size_t array_len) m_opaque_sp->SetData(buffer_sp); if (log) - log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => " + log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %zu) => " "true", array, array_len); return true; @@ -763,7 +763,7 @@ SBData::SetDataFromDoubleArray (double* array, size_t array_len) if (!array || array_len == 0) { if (log) - log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => " + log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %zu) => " "false", array, array_len); return false; } @@ -778,7 +778,7 @@ SBData::SetDataFromDoubleArray (double* array, size_t array_len) m_opaque_sp->SetData(buffer_sp); if (log) - log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => " + log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %zu) => " "true", array, array_len); return true; diff --git a/contrib/llvm/tools/lldb/source/API/SBDebugger.cpp b/contrib/llvm/tools/lldb/source/API/SBDebugger.cpp index f5e71d5..88c991b 100644 --- a/contrib/llvm/tools/lldb/source/API/SBDebugger.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBDebugger.cpp @@ -480,7 +480,7 @@ SBDebugger::GetScriptingLanguage (const char *script_language_name) const char * SBDebugger::GetVersionString () { - return GetVersion(); + return lldb_private::GetVersion(); } const char * @@ -711,7 +711,7 @@ SBDebugger::GetIndexOfTarget (lldb::SBTarget target) } SBTarget -SBDebugger::FindTargetWithProcessID (pid_t pid) +SBDebugger::FindTargetWithProcessID (lldb::pid_t pid) { SBTarget sb_target; if (m_opaque_sp) diff --git a/contrib/llvm/tools/lldb/source/API/SBFileSpec.cpp b/contrib/llvm/tools/lldb/source/API/SBFileSpec.cpp index 4413689..fc207d0 100644 --- a/contrib/llvm/tools/lldb/source/API/SBFileSpec.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBFileSpec.cpp @@ -61,7 +61,7 @@ SBFileSpec::operator = (const SBFileSpec &rhs) bool SBFileSpec::IsValid() const { - return *m_opaque_ap; + return m_opaque_ap->operator bool(); } bool diff --git a/contrib/llvm/tools/lldb/source/API/SBFunction.cpp b/contrib/llvm/tools/lldb/source/API/SBFunction.cpp index 914d2d7..bb7ea2e 100644 --- a/contrib/llvm/tools/lldb/source/API/SBFunction.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBFunction.cpp @@ -143,11 +143,13 @@ SBFunction::GetInstructions (SBTarget target, const char *flavor) ModuleSP module_sp (m_opaque_ptr->GetAddressRange().GetBaseAddress().GetModule()); if (module_sp) { + const bool prefer_file_cache = false; sb_instructions.SetDisassembler (Disassembler::DisassembleRange (module_sp->GetArchitecture(), NULL, flavor, exe_ctx, - m_opaque_ptr->GetAddressRange())); + m_opaque_ptr->GetAddressRange(), + prefer_file_cache)); } } return sb_instructions; diff --git a/contrib/llvm/tools/lldb/source/API/SBHostOS.cpp b/contrib/llvm/tools/lldb/source/API/SBHostOS.cpp index a8f7db9..1664031 100644 --- a/contrib/llvm/tools/lldb/source/API/SBHostOS.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBHostOS.cpp @@ -42,7 +42,7 @@ lldb::thread_t SBHostOS::ThreadCreate ( const char *name, - void *(*thread_function)(void *), + thread_func_t thread_function, void *thread_arg, SBError *error_ptr ) @@ -77,7 +77,7 @@ SBHostOS::ThreadDetach (lldb::thread_t thread, SBError *error_ptr) } bool -SBHostOS::ThreadJoin (lldb::thread_t thread, void **result, SBError *error_ptr) +SBHostOS::ThreadJoin (lldb::thread_t thread, thread_result_t *result, SBError *error_ptr) { return Host::ThreadJoin (thread, result, error_ptr ? error_ptr->get() : NULL); } diff --git a/contrib/llvm/tools/lldb/source/API/SBModuleSpec.cpp b/contrib/llvm/tools/lldb/source/API/SBModuleSpec.cpp index 654a8ca..17c83ab 100644 --- a/contrib/llvm/tools/lldb/source/API/SBModuleSpec.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBModuleSpec.cpp @@ -44,7 +44,7 @@ SBModuleSpec::~SBModuleSpec () bool SBModuleSpec::IsValid () const { - return *m_opaque_ap; + return m_opaque_ap->operator bool(); } void diff --git a/contrib/llvm/tools/lldb/source/API/SBProcess.cpp b/contrib/llvm/tools/lldb/source/API/SBProcess.cpp index 259eb5e..d690da7 100644 --- a/contrib/llvm/tools/lldb/source/API/SBProcess.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBProcess.cpp @@ -11,6 +11,9 @@ #include "lldb/API/SBProcess.h" +// C Includes +#include <inttypes.h> + #include "lldb/lldb-defines.h" #include "lldb/lldb-types.h" @@ -23,6 +26,7 @@ #include "lldb/Core/StreamFile.h" #include "lldb/Target/Process.h" #include "lldb/Target/RegisterContext.h" +#include "lldb/Target/SystemRuntime.h" #include "lldb/Target/Target.h" #include "lldb/Target/Thread.h" @@ -334,7 +338,7 @@ SBProcess::PutSTDIN (const char *src, size_t src_len) } if (log) - log->Printf ("SBProcess(%p)::PutSTDIN (src=\"%s\", src_len=%d) => %lu", + log->Printf ("SBProcess(%p)::PutSTDIN (src=\"%s\", src_len=%d) => %zu", process_sp.get(), src, (uint32_t) src_len, @@ -1254,3 +1258,37 @@ SBProcess::UnloadImage (uint32_t image_token) sb_error.SetErrorString("invalid process"); return sb_error; } + +uint32_t +SBProcess::GetNumExtendedBacktraceTypes () +{ + ProcessSP process_sp(GetSP()); + if (process_sp && process_sp->GetSystemRuntime()) + { + SystemRuntime *runtime = process_sp->GetSystemRuntime(); + return runtime->GetExtendedBacktraceTypes().size(); + } + return 0; +} + +const char * +SBProcess::GetExtendedBacktraceTypeAtIndex (uint32_t idx) +{ + ProcessSP process_sp(GetSP()); + if (process_sp && process_sp->GetSystemRuntime()) + { + SystemRuntime *runtime = process_sp->GetSystemRuntime(); + std::vector<ConstString> names = runtime->GetExtendedBacktraceTypes(); + if (idx < names.size()) + { + return names[idx].AsCString(); + } + else + { + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + if (log) + log->Printf("SBProcess(%p)::GetExtendedBacktraceTypeAtIndex() => error: requested extended backtrace name out of bounds", process_sp.get()); + } + } + return NULL; +} diff --git a/contrib/llvm/tools/lldb/source/API/SBSymbol.cpp b/contrib/llvm/tools/lldb/source/API/SBSymbol.cpp index dd057e8..ef3d076 100644 --- a/contrib/llvm/tools/lldb/source/API/SBSymbol.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBSymbol.cpp @@ -139,11 +139,13 @@ SBSymbol::GetInstructions (SBTarget target, const char *flavor_string) if (module_sp) { AddressRange symbol_range (m_opaque_ptr->GetAddress(), m_opaque_ptr->GetByteSize()); + const bool prefer_file_cache = false; sb_instructions.SetDisassembler (Disassembler::DisassembleRange (module_sp->GetArchitecture (), NULL, flavor_string, exe_ctx, - symbol_range)); + symbol_range, + prefer_file_cache)); } } } diff --git a/contrib/llvm/tools/lldb/source/API/SBTarget.cpp b/contrib/llvm/tools/lldb/source/API/SBTarget.cpp index f37c8f8..cff6e4e 100644 --- a/contrib/llvm/tools/lldb/source/API/SBTarget.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBTarget.cpp @@ -41,6 +41,7 @@ #include "lldb/Core/SearchFilter.h" #include "lldb/Core/Section.h" #include "lldb/Core/STLUtils.h" +#include "lldb/Core/ValueObjectConstResult.h" #include "lldb/Core/ValueObjectList.h" #include "lldb/Core/ValueObjectVariable.h" #include "lldb/Host/FileSpec.h" @@ -1260,7 +1261,8 @@ SBTarget::ResolveLoadAddress (lldb::addr_t vm_addr) } SBSymbolContext -SBTarget::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) +SBTarget::ResolveSymbolContextForAddress (const SBAddress& addr, + uint32_t resolve_scope) { SBSymbolContext sc; if (addr.IsValid()) @@ -1274,13 +1276,15 @@ SBTarget::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolv SBBreakpoint -SBTarget::BreakpointCreateByLocation (const char *file, uint32_t line) +SBTarget::BreakpointCreateByLocation (const char *file, + uint32_t line) { return SBBreakpoint(BreakpointCreateByLocation (SBFileSpec (file, false), line)); } SBBreakpoint -SBTarget::BreakpointCreateByLocation (const SBFileSpec &sb_file_spec, uint32_t line) +SBTarget::BreakpointCreateByLocation (const SBFileSpec &sb_file_spec, + uint32_t line) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); @@ -1293,7 +1297,8 @@ SBTarget::BreakpointCreateByLocation (const SBFileSpec &sb_file_spec, uint32_t l const LazyBool check_inlines = eLazyBoolCalculate; const LazyBool skip_prologue = eLazyBoolCalculate; const bool internal = false; - *sb_bp = target_sp->CreateBreakpoint (NULL, *sb_file_spec, line, check_inlines, skip_prologue, internal); + const bool hardware = false; + *sb_bp = target_sp->CreateBreakpoint (NULL, *sb_file_spec, line, check_inlines, skip_prologue, internal, hardware); } if (log) @@ -1314,7 +1319,8 @@ SBTarget::BreakpointCreateByLocation (const SBFileSpec &sb_file_spec, uint32_t l } SBBreakpoint -SBTarget::BreakpointCreateByName (const char *symbol_name, const char *module_name) +SBTarget::BreakpointCreateByName (const char *symbol_name, + const char *module_name) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); @@ -1325,16 +1331,17 @@ SBTarget::BreakpointCreateByName (const char *symbol_name, const char *module_na Mutex::Locker api_locker (target_sp->GetAPIMutex()); const bool internal = false; + const bool hardware = false; const LazyBool skip_prologue = eLazyBoolCalculate; if (module_name && module_name[0]) { FileSpecList module_spec_list; module_spec_list.Append (FileSpec (module_name, false)); - *sb_bp = target_sp->CreateBreakpoint (&module_spec_list, NULL, symbol_name, eFunctionNameTypeAuto, skip_prologue, internal); + *sb_bp = target_sp->CreateBreakpoint (&module_spec_list, NULL, symbol_name, eFunctionNameTypeAuto, skip_prologue, internal, hardware); } else { - *sb_bp = target_sp->CreateBreakpoint (NULL, NULL, symbol_name, eFunctionNameTypeAuto, skip_prologue, internal); + *sb_bp = target_sp->CreateBreakpoint (NULL, NULL, symbol_name, eFunctionNameTypeAuto, skip_prologue, internal, hardware); } } @@ -1349,8 +1356,8 @@ SBTarget::BreakpointCreateByName (const char *symbol_name, const char *module_na lldb::SBBreakpoint SBTarget::BreakpointCreateByName (const char *symbol_name, - const SBFileSpecList &module_list, - const SBFileSpecList &comp_unit_list) + const SBFileSpecList &module_list, + const SBFileSpecList &comp_unit_list) { uint32_t name_type_mask = eFunctionNameTypeAuto; return BreakpointCreateByName (symbol_name, name_type_mask, module_list, comp_unit_list); @@ -1358,9 +1365,9 @@ SBTarget::BreakpointCreateByName (const char *symbol_name, lldb::SBBreakpoint SBTarget::BreakpointCreateByName (const char *symbol_name, - uint32_t name_type_mask, - const SBFileSpecList &module_list, - const SBFileSpecList &comp_unit_list) + uint32_t name_type_mask, + const SBFileSpecList &module_list, + const SBFileSpecList &comp_unit_list) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); @@ -1369,14 +1376,16 @@ SBTarget::BreakpointCreateByName (const char *symbol_name, if (target_sp && symbol_name && symbol_name[0]) { const bool internal = false; + const bool hardware = false; const LazyBool skip_prologue = eLazyBoolCalculate; Mutex::Locker api_locker (target_sp->GetAPIMutex()); *sb_bp = target_sp->CreateBreakpoint (module_list.get(), - comp_unit_list.get(), - symbol_name, - name_type_mask, - skip_prologue, - internal); + comp_unit_list.get(), + symbol_name, + name_type_mask, + skip_prologue, + internal, + hardware); } if (log) @@ -1403,6 +1412,7 @@ SBTarget::BreakpointCreateByNames (const char *symbol_names[], { Mutex::Locker api_locker (target_sp->GetAPIMutex()); const bool internal = false; + const bool hardware = false; const LazyBool skip_prologue = eLazyBoolCalculate; *sb_bp = target_sp->CreateBreakpoint (module_list.get(), comp_unit_list.get(), @@ -1410,7 +1420,8 @@ SBTarget::BreakpointCreateByNames (const char *symbol_names[], num_names, name_type_mask, skip_prologue, - internal); + internal, + hardware); } if (log) @@ -1436,7 +1447,8 @@ SBTarget::BreakpointCreateByNames (const char *symbol_names[], } SBBreakpoint -SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex, const char *module_name) +SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex, + const char *module_name) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); @@ -1447,6 +1459,7 @@ SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex, const char *mo Mutex::Locker api_locker (target_sp->GetAPIMutex()); RegularExpression regexp(symbol_name_regex); const bool internal = false; + const bool hardware = false; const LazyBool skip_prologue = eLazyBoolCalculate; if (module_name && module_name[0]) @@ -1454,11 +1467,11 @@ SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex, const char *mo FileSpecList module_spec_list; module_spec_list.Append (FileSpec (module_name, false)); - *sb_bp = target_sp->CreateFuncRegexBreakpoint (&module_spec_list, NULL, regexp, skip_prologue, internal); + *sb_bp = target_sp->CreateFuncRegexBreakpoint (&module_spec_list, NULL, regexp, skip_prologue, internal, hardware); } else { - *sb_bp = target_sp->CreateFuncRegexBreakpoint (NULL, NULL, regexp, skip_prologue, internal); + *sb_bp = target_sp->CreateFuncRegexBreakpoint (NULL, NULL, regexp, skip_prologue, internal, hardware); } } @@ -1473,8 +1486,8 @@ SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex, const char *mo lldb::SBBreakpoint SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex, - const SBFileSpecList &module_list, - const SBFileSpecList &comp_unit_list) + const SBFileSpecList &module_list, + const SBFileSpecList &comp_unit_list) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); @@ -1485,9 +1498,10 @@ SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex, Mutex::Locker api_locker (target_sp->GetAPIMutex()); RegularExpression regexp(symbol_name_regex); const bool internal = false; + const bool hardware = false; const LazyBool skip_prologue = eLazyBoolCalculate; - *sb_bp = target_sp->CreateFuncRegexBreakpoint (module_list.get(), comp_unit_list.get(), regexp, skip_prologue, internal); + *sb_bp = target_sp->CreateFuncRegexBreakpoint (module_list.get(), comp_unit_list.get(), regexp, skip_prologue, internal, hardware); } if (log) @@ -1509,7 +1523,8 @@ SBTarget::BreakpointCreateByAddress (addr_t address) if (target_sp) { Mutex::Locker api_locker (target_sp->GetAPIMutex()); - *sb_bp = target_sp->CreateBreakpoint (address, false); + const bool hardware = false; + *sb_bp = target_sp->CreateBreakpoint (address, false, hardware); } if (log) @@ -1521,7 +1536,9 @@ SBTarget::BreakpointCreateByAddress (addr_t address) } lldb::SBBreakpoint -SBTarget::BreakpointCreateBySourceRegex (const char *source_regex, const lldb::SBFileSpec &source_file, const char *module_name) +SBTarget::BreakpointCreateBySourceRegex (const char *source_regex, + const lldb::SBFileSpec &source_file, + const char *module_name) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); @@ -1532,6 +1549,7 @@ SBTarget::BreakpointCreateBySourceRegex (const char *source_regex, const lldb::S Mutex::Locker api_locker (target_sp->GetAPIMutex()); RegularExpression regexp(source_regex); FileSpecList source_file_spec_list; + const bool hardware = false; source_file_spec_list.Append (source_file.ref()); if (module_name && module_name[0]) @@ -1539,11 +1557,11 @@ SBTarget::BreakpointCreateBySourceRegex (const char *source_regex, const lldb::S FileSpecList module_spec_list; module_spec_list.Append (FileSpec (module_name, false)); - *sb_bp = target_sp->CreateSourceRegexBreakpoint (&module_spec_list, &source_file_spec_list, regexp, false); + *sb_bp = target_sp->CreateSourceRegexBreakpoint (&module_spec_list, &source_file_spec_list, regexp, false, hardware); } else { - *sb_bp = target_sp->CreateSourceRegexBreakpoint (NULL, &source_file_spec_list, regexp, false); + *sb_bp = target_sp->CreateSourceRegexBreakpoint (NULL, &source_file_spec_list, regexp, false, hardware); } } @@ -1560,8 +1578,8 @@ SBTarget::BreakpointCreateBySourceRegex (const char *source_regex, const lldb::S lldb::SBBreakpoint SBTarget::BreakpointCreateBySourceRegex (const char *source_regex, - const SBFileSpecList &module_list, - const lldb::SBFileSpecList &source_file_list) + const SBFileSpecList &module_list, + const lldb::SBFileSpecList &source_file_list) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); @@ -1570,8 +1588,9 @@ SBTarget::BreakpointCreateBySourceRegex (const char *source_regex, if (target_sp && source_regex && source_regex[0]) { Mutex::Locker api_locker (target_sp->GetAPIMutex()); + const bool hardware = false; RegularExpression regexp(source_regex); - *sb_bp = target_sp->CreateSourceRegexBreakpoint (module_list.get(), source_file_list.get(), regexp, false); + *sb_bp = target_sp->CreateSourceRegexBreakpoint (module_list.get(), source_file_list.get(), regexp, false, hardware); } if (log) @@ -1585,8 +1604,8 @@ SBTarget::BreakpointCreateBySourceRegex (const char *source_regex, lldb::SBBreakpoint SBTarget::BreakpointCreateForException (lldb::LanguageType language, - bool catch_bp, - bool throw_bp) + bool catch_bp, + bool throw_bp) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); @@ -1595,7 +1614,8 @@ SBTarget::BreakpointCreateForException (lldb::LanguageType language, if (target_sp) { Mutex::Locker api_locker (target_sp->GetAPIMutex()); - *sb_bp = target_sp->CreateExceptionBreakpoint (language, catch_bp, throw_bp); + const bool hardware = false; + *sb_bp = target_sp->CreateExceptionBreakpoint (language, catch_bp, throw_bp, hardware); } if (log) @@ -1862,6 +1882,50 @@ SBTarget::DisableAllWatchpoints () return false; } +SBValue +SBTarget::CreateValueFromAddress (const char *name, SBAddress addr, SBType type) +{ + SBValue sb_value; + lldb::ValueObjectSP new_value_sp; + if (IsValid() && name && *name && addr.IsValid() && type.IsValid()) + { + lldb::addr_t address(addr.GetLoadAddress(*this)); + lldb::TypeImplSP type_impl_sp (type.GetSP()); + ClangASTType pointer_ast_type(type_impl_sp->GetClangASTType(true).GetPointerType ()); + if (pointer_ast_type) + { + lldb::DataBufferSP buffer(new lldb_private::DataBufferHeap(&address,sizeof(lldb::addr_t))); + + ExecutionContext exe_ctx (ExecutionContextRef(ExecutionContext(m_opaque_sp.get(),false))); + ValueObjectSP ptr_result_valobj_sp(ValueObjectConstResult::Create (exe_ctx.GetBestExecutionContextScope(), + pointer_ast_type, + ConstString(name), + buffer, + exe_ctx.GetByteOrder(), + exe_ctx.GetAddressByteSize())); + + if (ptr_result_valobj_sp) + { + ptr_result_valobj_sp->GetValue().SetValueType(Value::eValueTypeLoadAddress); + Error err; + new_value_sp = ptr_result_valobj_sp->Dereference(err); + if (new_value_sp) + new_value_sp->SetName(ConstString(name)); + } + } + } + sb_value.SetSP(new_value_sp); + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + if (log) + { + if (new_value_sp) + log->Printf ("SBTarget(%p)::CreateValueFromAddress => \"%s\"", m_opaque_sp.get(), new_value_sp->GetName().AsCString()); + else + log->Printf ("SBTarget(%p)::CreateValueFromAddress => NULL", m_opaque_sp.get()); + } + return sb_value; +} + bool SBTarget::DeleteAllWatchpoints () { @@ -1905,6 +1969,8 @@ SBTarget::AddModule (const char *path, if (triple) module_spec.GetArchitecture().SetTriple (triple, target_sp->GetPlatform ().get()); + else + module_spec.GetArchitecture() = target_sp->GetArchitecture(); if (symfile) module_spec.GetSymbolFileSpec ().SetFile(symfile, false); diff --git a/contrib/llvm/tools/lldb/source/API/SBThread.cpp b/contrib/llvm/tools/lldb/source/API/SBThread.cpp index 2752620..4b54b1c 100644 --- a/contrib/llvm/tools/lldb/source/API/SBThread.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBThread.cpp @@ -20,6 +20,7 @@ #include "lldb/Core/Stream.h" #include "lldb/Core/StreamFile.h" #include "lldb/Interpreter/CommandInterpreter.h" +#include "lldb/Target/SystemRuntime.h" #include "lldb/Target/Thread.h" #include "lldb/Target/Process.h" #include "lldb/Symbol/SymbolContext.h" @@ -507,6 +508,34 @@ SBThread::GetQueueName () const return name; } +lldb::queue_id_t +SBThread::GetQueueID () const +{ + queue_id_t id = LLDB_INVALID_QUEUE_ID; + Mutex::Locker api_locker; + ExecutionContext exe_ctx (m_opaque_sp.get(), api_locker); + + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + if (exe_ctx.HasThreadScope()) + { + Process::StopLocker stop_locker; + if (stop_locker.TryLock(&exe_ctx.GetProcessPtr()->GetRunLock())) + { + id = exe_ctx.GetThreadPtr()->GetQueueID(); + } + else + { + if (log) + log->Printf ("SBThread(%p)::GetQueueID() => error: process is running", exe_ctx.GetThreadPtr()); + } + } + + if (log) + log->Printf ("SBThread(%p)::GetQueueID () => 0x%" PRIx64, exe_ctx.GetThreadPtr(), id); + + return id; +} + SBError SBThread::ResumeNewPlan (ExecutionContext &exe_ctx, ThreadPlan *new_plan) { @@ -910,6 +939,31 @@ SBThread::StepOverUntil (lldb::SBFrame &sb_frame, } SBError +SBThread::JumpToLine (lldb::SBFileSpec &file_spec, uint32_t line) +{ + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + SBError sb_error; + + Mutex::Locker api_locker; + ExecutionContext exe_ctx (m_opaque_sp.get(), api_locker); + + if (log) + log->Printf ("SBThread(%p)::JumpToLine (file+line = %s:%u)", exe_ctx.GetThreadPtr(), file_spec->GetPath().c_str(), line); + + if (!exe_ctx.HasThreadScope()) + { + sb_error.SetErrorString("this SBThread object is invalid"); + return sb_error; + } + + Thread *thread = exe_ctx.GetThreadPtr(); + + Error err = thread->JumpToLine (file_spec.get(), line, true); + sb_error.SetError (err); + return sb_error; +} + +SBError SBThread::ReturnFromFrame (SBFrame &frame, SBValue &return_value) { SBError sb_error; @@ -1227,3 +1281,38 @@ SBThread::GetDescription (SBStream &description) const return true; } + +SBThread +SBThread::GetExtendedBacktrace (const char *type) +{ + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + Mutex::Locker api_locker; + ExecutionContext exe_ctx (m_opaque_sp.get(), api_locker); + SBThread sb_origin_thread; + + if (exe_ctx.HasThreadScope()) + { + Process::StopLocker stop_locker; + if (stop_locker.TryLock(&exe_ctx.GetProcessPtr()->GetRunLock())) + { + ThreadSP real_thread(exe_ctx.GetThreadPtr()); + if (real_thread) + { + ConstString type_const (type); + SystemRuntime *runtime = exe_ctx.GetProcessPtr()->GetSystemRuntime(); + if (runtime) + { + ThreadSP origin_thread = runtime->GetExtendedBacktrace (real_thread, type_const); + sb_origin_thread.SetThread (origin_thread); + } + } + } + else + { + if (log) + log->Printf ("SBThread(%p)::GetExtendedBacktrace() => error: process is running", exe_ctx.GetThreadPtr()); + } + } + + return sb_origin_thread; +} diff --git a/contrib/llvm/tools/lldb/source/API/SBType.cpp b/contrib/llvm/tools/lldb/source/API/SBType.cpp index 372d073..3055c27 100644 --- a/contrib/llvm/tools/lldb/source/API/SBType.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBType.cpp @@ -7,12 +7,6 @@ // //===----------------------------------------------------------------------===// -#include <string.h> - -#include "clang/AST/ASTContext.h" -#include "clang/AST/TemplateBase.h" -#include "clang/AST/Type.h" - #include "lldb/API/SBDefines.h" #include "lldb/API/SBType.h" #include "lldb/API/SBStream.h" @@ -69,8 +63,10 @@ SBType::operator == (SBType &rhs) if (IsValid() == false) return !rhs.IsValid(); - return (rhs.m_opaque_sp->GetASTContext() == m_opaque_sp->GetASTContext()) && - (rhs.m_opaque_sp->GetOpaqueQualType() == m_opaque_sp->GetOpaqueQualType()); + if (rhs.IsValid() == false) + return false; + + return *m_opaque_sp.get() == *rhs.m_opaque_sp.get(); } bool @@ -78,9 +74,11 @@ SBType::operator != (SBType &rhs) { if (IsValid() == false) return rhs.IsValid(); - - return (rhs.m_opaque_sp->GetASTContext() != m_opaque_sp->GetASTContext()) || - (rhs.m_opaque_sp->GetOpaqueQualType() != m_opaque_sp->GetOpaqueQualType()); + + if (rhs.IsValid() == false) + return true; + + return *m_opaque_sp.get() != *rhs.m_opaque_sp.get(); } lldb::TypeImplSP @@ -142,7 +140,7 @@ SBType::GetByteSize() if (!IsValid()) return 0; - return m_opaque_sp->GetClangASTType().GetByteSize(); + return m_opaque_sp->GetClangASTType(false).GetByteSize(); } @@ -151,7 +149,7 @@ SBType::IsPointerType() { if (!IsValid()) return false; - return m_opaque_sp->GetClangASTType().IsPointerType(); + return m_opaque_sp->GetClangASTType(true).IsPointerType(); } bool @@ -159,7 +157,7 @@ SBType::IsReferenceType() { if (!IsValid()) return false; - return m_opaque_sp->GetClangASTType().IsReferenceType(); + return m_opaque_sp->GetClangASTType(true).IsReferenceType(); } SBType @@ -168,7 +166,7 @@ SBType::GetPointerType() if (!IsValid()) return SBType(); - return SBType(ClangASTType(m_opaque_sp->GetClangASTType().GetPointerType())); + return SBType(TypeImplSP(new TypeImpl(m_opaque_sp->GetPointerType()))); } SBType @@ -176,7 +174,7 @@ SBType::GetPointeeType() { if (!IsValid()) return SBType(); - return SBType(ClangASTType(m_opaque_sp->GetClangASTType().GetPointeeType())); + return SBType(TypeImplSP(new TypeImpl(m_opaque_sp->GetPointeeType()))); } SBType @@ -184,7 +182,7 @@ SBType::GetReferenceType() { if (!IsValid()) return SBType(); - return SBType(ClangASTType(m_opaque_sp->GetClangASTType().GetLValueReferenceType())); + return SBType(TypeImplSP(new TypeImpl(m_opaque_sp->GetReferenceType()))); } SBType @@ -192,7 +190,7 @@ SBType::GetDereferencedType() { if (!IsValid()) return SBType(); - return SBType(ClangASTType(m_opaque_sp->GetClangASTType().GetNonReferenceType())); + return SBType(TypeImplSP(new TypeImpl(m_opaque_sp->GetDereferencedType()))); } bool @@ -200,7 +198,7 @@ SBType::IsFunctionType () { if (!IsValid()) return false; - return m_opaque_sp->GetClangASTType().IsFunctionType(); + return m_opaque_sp->GetClangASTType(true).IsFunctionType(); } bool @@ -208,7 +206,7 @@ SBType::IsPolymorphicClass () { if (!IsValid()) return false; - return m_opaque_sp->GetClangASTType().IsPolymorphicClass(); + return m_opaque_sp->GetClangASTType(true).IsPolymorphicClass(); } @@ -218,7 +216,7 @@ SBType::GetFunctionReturnType () { if (IsValid()) { - ClangASTType return_clang_type (m_opaque_sp->GetClangASTType().GetFunctionReturnType()); + ClangASTType return_clang_type (m_opaque_sp->GetClangASTType(true).GetFunctionReturnType()); if (return_clang_type.IsValid()) return SBType(return_clang_type); } @@ -231,13 +229,13 @@ SBType::GetFunctionArgumentTypes () SBTypeList sb_type_list; if (IsValid()) { - QualType qual_type(QualType::getFromOpaquePtr(m_opaque_sp->GetOpaqueQualType())); - const FunctionProtoType* func = dyn_cast<FunctionProtoType>(qual_type.getTypePtr()); - if (func) + ClangASTType func_type(m_opaque_sp->GetClangASTType(true)); + size_t count = func_type.GetNumberOfFunctionArguments(); + for (size_t i = 0; + i < count; + i++) { - const uint32_t num_args = func->getNumArgs(); - for (uint32_t i=0; i<num_args; ++i) - sb_type_list.Append (SBType(ClangASTType(m_opaque_sp->GetASTContext(), func->getArgType(i).getAsOpaquePtr()))); + sb_type_list.Append(SBType(func_type.GetFunctionArgumentAtIndex(i))); } } return sb_type_list; @@ -248,14 +246,14 @@ SBType::GetUnqualifiedType() { if (!IsValid()) return SBType(); - return SBType(m_opaque_sp->GetClangASTType().GetFullyUnqualifiedType()); + return SBType(TypeImplSP(new TypeImpl(m_opaque_sp->GetUnqualifiedType()))); } lldb::SBType SBType::GetCanonicalType() { if (IsValid()) - return SBType(m_opaque_sp->GetClangASTType().GetCanonicalType()); + return SBType(TypeImplSP(new TypeImpl(m_opaque_sp->GetCanonicalType()))); return SBType(); } @@ -264,7 +262,7 @@ lldb::BasicType SBType::GetBasicType() { if (IsValid()) - return m_opaque_sp->GetClangASTType().GetBasicTypeEnumeration (); + return m_opaque_sp->GetClangASTType(false).GetBasicTypeEnumeration (); return eBasicTypeInvalid; } @@ -272,7 +270,7 @@ SBType SBType::GetBasicType(lldb::BasicType basic_type) { if (IsValid()) - return SBType (ClangASTContext::GetBasicType (m_opaque_sp->GetASTContext(), basic_type)); + return SBType (ClangASTContext::GetBasicType (m_opaque_sp->GetClangASTContext(false), basic_type)); return SBType(); } @@ -280,7 +278,7 @@ uint32_t SBType::GetNumberOfDirectBaseClasses () { if (IsValid()) - return m_opaque_sp->GetClangASTType().GetNumDirectBaseClasses(); + return m_opaque_sp->GetClangASTType(true).GetNumDirectBaseClasses(); return 0; } @@ -288,7 +286,7 @@ uint32_t SBType::GetNumberOfVirtualBaseClasses () { if (IsValid()) - return m_opaque_sp->GetClangASTType().GetNumVirtualBaseClasses(); + return m_opaque_sp->GetClangASTType(true).GetNumVirtualBaseClasses(); return 0; } @@ -296,7 +294,7 @@ uint32_t SBType::GetNumberOfFields () { if (IsValid()) - return m_opaque_sp->GetClangASTType().GetNumFields(); + return m_opaque_sp->GetClangASTType(false).GetNumFields(); return 0; } @@ -323,7 +321,7 @@ SBType::GetDirectBaseClassAtIndex (uint32_t idx) SBTypeMember sb_type_member; if (IsValid()) { - ClangASTType this_type (m_opaque_sp->GetClangASTType ()); + ClangASTType this_type (m_opaque_sp->GetClangASTType (true)); if (this_type.IsValid()) { uint32_t bit_offset = 0; @@ -344,7 +342,7 @@ SBType::GetVirtualBaseClassAtIndex (uint32_t idx) SBTypeMember sb_type_member; if (IsValid()) { - ClangASTType this_type (m_opaque_sp->GetClangASTType ()); + ClangASTType this_type (m_opaque_sp->GetClangASTType (true)); if (this_type.IsValid()) { uint32_t bit_offset = 0; @@ -364,7 +362,7 @@ SBType::GetFieldAtIndex (uint32_t idx) SBTypeMember sb_type_member; if (IsValid()) { - ClangASTType this_type (m_opaque_sp->GetClangASTType ()); + ClangASTType this_type (m_opaque_sp->GetClangASTType (false)); if (this_type.IsValid()) { uint64_t bit_offset = 0; @@ -397,7 +395,7 @@ SBType::IsTypeComplete() { if (!IsValid()) return false; - return m_opaque_sp->GetClangASTType().IsCompleteType(); + return m_opaque_sp->GetClangASTType(false).IsCompleteType(); } const char* @@ -405,14 +403,14 @@ SBType::GetName() { if (!IsValid()) return ""; - return m_opaque_sp->GetClangASTType().GetConstTypeName().GetCString(); + return m_opaque_sp->GetName().GetCString(); } lldb::TypeClass SBType::GetTypeClass () { if (IsValid()) - return m_opaque_sp->GetClangASTType().GetTypeClass(); + return m_opaque_sp->GetClangASTType(false).GetTypeClass(); return lldb::eTypeClassInvalid; } @@ -420,7 +418,7 @@ uint32_t SBType::GetNumberOfTemplateArguments () { if (IsValid()) - return m_opaque_sp->GetClangASTType().GetNumTemplateArguments(); + return m_opaque_sp->GetClangASTType(false).GetNumTemplateArguments(); return 0; } @@ -430,7 +428,7 @@ SBType::GetTemplateArgumentType (uint32_t idx) if (IsValid()) { TemplateArgumentKind kind = eTemplateArgumentKindNull; - ClangASTType template_arg_type = m_opaque_sp->GetClangASTType().GetTemplateArgument (idx, kind); + ClangASTType template_arg_type = m_opaque_sp->GetClangASTType(false).GetTemplateArgument (idx, kind); if (template_arg_type.IsValid()) return SBType(template_arg_type); } @@ -443,7 +441,7 @@ SBType::GetTemplateArgumentKind (uint32_t idx) { TemplateArgumentKind kind = eTemplateArgumentKindNull; if (IsValid()) - m_opaque_sp->GetClangASTType().GetTemplateArgument (idx, kind); + m_opaque_sp->GetClangASTType(false).GetTemplateArgument (idx, kind); return kind; } diff --git a/contrib/llvm/tools/lldb/source/API/SBTypeCategory.cpp b/contrib/llvm/tools/lldb/source/API/SBTypeCategory.cpp index e397869..08fdefa 100644 --- a/contrib/llvm/tools/lldb/source/API/SBTypeCategory.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBTypeCategory.cpp @@ -84,10 +84,10 @@ SBTypeCategory::GetName() uint32_t SBTypeCategory::GetNumFormats () { - if (!IsDefaultCategory()) + if (!IsValid()) return 0; - return DataVisualization::ValueFormats::GetCount(); + return m_opaque_sp->GetValueNavigator()->GetCount() + m_opaque_sp->GetRegexValueNavigator()->GetCount(); } uint32_t @@ -127,9 +127,9 @@ SBTypeCategory::GetTypeNameSpecifierForFilterAtIndex (uint32_t index) lldb::SBTypeNameSpecifier SBTypeCategory::GetTypeNameSpecifierForFormatAtIndex (uint32_t index) { - if (!IsDefaultCategory()) + if (!IsValid()) return SBTypeNameSpecifier(); - return SBTypeNameSpecifier(DataVisualization::ValueFormats::GetTypeNameSpecifierForFormatAtIndex(index)); + return SBTypeNameSpecifier(m_opaque_sp->GetTypeNameSpecifierForFormatAtIndex(index)); } lldb::SBTypeNameSpecifier @@ -177,16 +177,23 @@ SBTypeCategory::GetFilterForType (SBTypeNameSpecifier spec) SBTypeFormat SBTypeCategory::GetFormatForType (SBTypeNameSpecifier spec) { - if (!IsDefaultCategory()) + if (!IsValid()) return SBTypeFormat(); if (!spec.IsValid()) return SBTypeFormat(); + lldb::TypeFormatImplSP format_sp; + if (spec.IsRegex()) - return SBTypeFormat(); + m_opaque_sp->GetRegexValueNavigator()->GetExact(ConstString(spec.GetName()), format_sp); + else + m_opaque_sp->GetValueNavigator()->GetExact(ConstString(spec.GetName()), format_sp); - return SBTypeFormat(DataVisualization::ValueFormats::GetFormat(ConstString(spec.GetName()))); + if (!format_sp) + return lldb::SBTypeFormat(); + + return lldb::SBTypeFormat(format_sp); } #ifndef LLDB_DISABLE_PYTHON @@ -259,9 +266,9 @@ SBTypeCategory::GetFilterAtIndex (uint32_t index) SBTypeFormat SBTypeCategory::GetFormatAtIndex (uint32_t index) { - if (!IsDefaultCategory()) + if (!IsValid()) return SBTypeFormat(); - return SBTypeFormat(DataVisualization::ValueFormats::GetFormatAtIndex((index))); + return SBTypeFormat(m_opaque_sp->GetFormatAtIndex((index))); } #ifndef LLDB_DISABLE_PYTHON @@ -295,7 +302,7 @@ bool SBTypeCategory::AddTypeFormat (SBTypeNameSpecifier type_name, SBTypeFormat format) { - if (!IsDefaultCategory()) + if (!IsValid()) return false; if (!type_name.IsValid()) @@ -305,9 +312,9 @@ SBTypeCategory::AddTypeFormat (SBTypeNameSpecifier type_name, return false; if (type_name.IsRegex()) - return false; - - DataVisualization::ValueFormats::Add(ConstString(type_name.GetName()), format.GetSP()); + m_opaque_sp->GetRegexValueNavigator()->Add(lldb::RegularExpressionSP(new RegularExpression(type_name.GetName())), format.GetSP()); + else + m_opaque_sp->GetValueNavigator()->Add(ConstString(type_name.GetName()), format.GetSP()); return true; } @@ -315,16 +322,16 @@ SBTypeCategory::AddTypeFormat (SBTypeNameSpecifier type_name, bool SBTypeCategory::DeleteTypeFormat (SBTypeNameSpecifier type_name) { - if (!IsDefaultCategory()) + if (!IsValid()) return false; if (!type_name.IsValid()) return false; if (type_name.IsRegex()) - return false; - - return DataVisualization::ValueFormats::Delete(ConstString(type_name.GetName())); + return m_opaque_sp->GetRegexValueNavigator()->Delete(ConstString(type_name.GetName())); + else + return m_opaque_sp->GetValueNavigator()->Delete(ConstString(type_name.GetName())); } #ifndef LLDB_DISABLE_PYTHON diff --git a/contrib/llvm/tools/lldb/source/API/SBTypeNameSpecifier.cpp b/contrib/llvm/tools/lldb/source/API/SBTypeNameSpecifier.cpp index d417499..3d03c6a 100644 --- a/contrib/llvm/tools/lldb/source/API/SBTypeNameSpecifier.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBTypeNameSpecifier.cpp @@ -36,7 +36,7 @@ SBTypeNameSpecifier::SBTypeNameSpecifier (SBType type) : m_opaque_sp() { if (type.IsValid()) - m_opaque_sp = TypeNameSpecifierImplSP(new TypeNameSpecifierImpl(type.m_opaque_sp->GetClangASTType())); + m_opaque_sp = TypeNameSpecifierImplSP(new TypeNameSpecifierImpl(type.m_opaque_sp->GetClangASTType(true))); } SBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::SBTypeNameSpecifier &rhs) : diff --git a/contrib/llvm/tools/lldb/source/API/SBValue.cpp b/contrib/llvm/tools/lldb/source/API/SBValue.cpp index aa9b23a..51b6790 100644 --- a/contrib/llvm/tools/lldb/source/API/SBValue.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBValue.cpp @@ -63,20 +63,20 @@ public: lldb::DynamicValueType use_dynamic, bool use_synthetic, const char *name = NULL) : - m_valobj_sp(in_valobj_sp), - m_use_dynamic(use_dynamic), - m_use_synthetic(use_synthetic), - m_name (name) + m_valobj_sp(in_valobj_sp), + m_use_dynamic(use_dynamic), + m_use_synthetic(use_synthetic), + m_name (name) { if (!m_name.IsEmpty() && m_valobj_sp) m_valobj_sp->SetName(m_name); } ValueImpl (const ValueImpl& rhs) : - m_valobj_sp(rhs.m_valobj_sp), - m_use_dynamic(rhs.m_use_dynamic), - m_use_synthetic(rhs.m_use_synthetic), - m_name (rhs.m_name) + m_valobj_sp(rhs.m_valobj_sp), + m_use_dynamic(rhs.m_use_dynamic), + m_use_synthetic(rhs.m_use_synthetic), + m_name (rhs.m_name) { } @@ -120,7 +120,7 @@ public: Target *target = value_sp->GetTargetSP().get(); if (target) api_locker.Lock(target->GetAPIMutex()); - + ProcessSP process_sp(value_sp->GetProcessSP()); if (process_sp && !stop_locker.TryLock (&process_sp->GetRunLock())) { @@ -131,7 +131,7 @@ public: error.SetErrorString ("process must be stopped."); return ValueObjectSP(); } - + if (value_sp->GetDynamicValue(m_use_dynamic)) value_sp = value_sp->GetDynamicValue(m_use_dynamic); if (value_sp->GetSyntheticValue(m_use_synthetic)) @@ -167,7 +167,7 @@ public: { return m_use_synthetic; } - + // All the derived values that we would make from the m_valobj_sp will share // the ExecutionContext with m_valobj_sp, so we don't need to do the calculations // in GetSP to return the Target, Process, Thread or Frame. It is convenient to @@ -207,7 +207,7 @@ public: else return StackFrameSP(); } - + private: lldb::ValueObjectSP m_valobj_sp; lldb::DynamicValueType m_use_dynamic; @@ -227,7 +227,7 @@ public: { return in_value.GetSP(m_stop_locker, m_api_locker, m_lock_error); } - + Error & GetError() { @@ -238,11 +238,11 @@ private: Process::StopLocker m_stop_locker; Mutex::Locker m_api_locker; Error m_lock_error; - + }; SBValue::SBValue () : - m_opaque_sp () +m_opaque_sp () { } @@ -318,7 +318,7 @@ SBValue::GetName() lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) name = value_sp->GetName().GetCString(); - + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) { @@ -327,7 +327,7 @@ SBValue::GetName() else log->Printf ("SBValue(%p)::GetName () => NULL", value_sp.get()); } - + return name; } @@ -350,7 +350,7 @@ SBValue::GetTypeName () else log->Printf ("SBValue(%p)::GetTypeName () => NULL", value_sp.get()); } - + return name; } @@ -359,17 +359,17 @@ SBValue::GetByteSize () { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); size_t result = 0; - + ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { result = value_sp->GetByteSize(); } - + if (log) log->Printf ("SBValue(%p)::GetByteSize () => %" PRIu64, value_sp.get(), (uint64_t)result); - + return result; } @@ -377,18 +377,18 @@ bool SBValue::IsInScope () { bool result = false; - + ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { result = value_sp->IsInScope (); } - + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) log->Printf ("SBValue(%p)::IsInScope () => %i", value_sp.get(), result); - + return result; } @@ -396,7 +396,7 @@ const char * SBValue::GetValue () { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); - + const char *cstr = NULL; ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); @@ -411,7 +411,7 @@ SBValue::GetValue () else log->Printf ("SBValue(%p)::GetValue() => NULL", value_sp.get()); } - + return cstr; } @@ -429,14 +429,14 @@ SBValue::GetValueType () { switch (result) { - case eValueTypeInvalid: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeInvalid", value_sp.get()); break; - case eValueTypeVariableGlobal: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableGlobal", value_sp.get()); break; - case eValueTypeVariableStatic: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableStatic", value_sp.get()); break; - case eValueTypeVariableArgument:log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableArgument", value_sp.get()); break; - case eValueTypeVariableLocal: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableLocal", value_sp.get()); break; - case eValueTypeRegister: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeRegister", value_sp.get()); break; - case eValueTypeRegisterSet: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeRegisterSet", value_sp.get()); break; - case eValueTypeConstResult: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeConstResult", value_sp.get()); break; + case eValueTypeInvalid: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeInvalid", value_sp.get()); break; + case eValueTypeVariableGlobal: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableGlobal", value_sp.get()); break; + case eValueTypeVariableStatic: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableStatic", value_sp.get()); break; + case eValueTypeVariableArgument:log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableArgument", value_sp.get()); break; + case eValueTypeVariableLocal: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableLocal", value_sp.get()); break; + case eValueTypeRegister: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeRegister", value_sp.get()); break; + case eValueTypeRegisterSet: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeRegisterSet", value_sp.get()); break; + case eValueTypeConstResult: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeConstResult", value_sp.get()); break; } } return result; @@ -473,7 +473,7 @@ SBValue::GetType() TypeImplSP type_sp; if (value_sp) { - type_sp.reset (new TypeImpl(value_sp->GetClangType())); + type_sp.reset (new TypeImpl(value_sp->GetTypeImpl())); sb_type.SetSP(type_sp); } if (log) @@ -499,7 +499,7 @@ SBValue::GetValueDidChange () } if (log) log->Printf ("SBValue(%p)::GetValueDidChange() => %i", value_sp.get(), result); - + return result; } @@ -571,7 +571,7 @@ SBValue::SetValueFromCString (const char *value_str, lldb::SBError& error) if (log) log->Printf ("SBValue(%p)::SetValueFromCString(\"%s\") => %i", value_sp.get(), value_str, success); - + return success; } @@ -671,7 +671,7 @@ SBValue::CreateChildAtOffset (const char *name, uint32_t offset, SBType type) TypeImplSP type_sp (type.GetSP()); if (type.IsValid()) { - sb_value.SetSP(value_sp->GetSyntheticChildAtOffset(offset, type_sp->GetClangASTType(), true),GetPreferDynamicValue(),GetPreferSyntheticValue(), name); + sb_value.SetSP(value_sp->GetSyntheticChildAtOffset(offset, type_sp->GetClangASTType(false), true),GetPreferDynamicValue(),GetPreferSyntheticValue(), name); } } Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); @@ -696,7 +696,7 @@ SBValue::Cast (SBType type) lldb::ValueObjectSP value_sp(GetSP(locker)); TypeImplSP type_sp (type.GetSP()); if (value_sp && type_sp) - sb_value.SetSP(value_sp->Cast(type_sp->GetClangASTType()),GetPreferDynamicValue(),GetPreferSyntheticValue()); + sb_value.SetSP(value_sp->Cast(type_sp->GetClangASTType(false)),GetPreferDynamicValue(),GetPreferSyntheticValue()); return sb_value; } @@ -761,19 +761,19 @@ SBValue::CreateValueFromAddress(const char* name, lldb::addr_t address, SBType s lldb::TypeImplSP type_impl_sp (sb_type.GetSP()); if (value_sp && type_impl_sp) { - ClangASTType pointee_ast_type(type_impl_sp->GetClangASTType().GetPointerType ()); - if (pointee_ast_type) + ClangASTType pointer_ast_type(type_impl_sp->GetClangASTType(false).GetPointerType ()); + if (pointer_ast_type) { lldb::DataBufferSP buffer(new lldb_private::DataBufferHeap(&address,sizeof(lldb::addr_t))); - + ExecutionContext exe_ctx (value_sp->GetExecutionContextRef()); ValueObjectSP ptr_result_valobj_sp(ValueObjectConstResult::Create (exe_ctx.GetBestExecutionContextScope(), - pointee_ast_type, + pointer_ast_type, ConstString(name), buffer, - lldb::endian::InlHostByteOrder(), + exe_ctx.GetByteOrder(), exe_ctx.GetAddressByteSize())); - + if (ptr_result_valobj_sp) { ptr_result_valobj_sp->GetValue().SetValueType(Value::eValueTypeLoadAddress); @@ -806,9 +806,9 @@ SBValue::CreateValueFromData (const char* name, SBData data, SBType type) if (value_sp) { ExecutionContext exe_ctx (value_sp->GetExecutionContextRef()); - + new_value_sp = ValueObjectConstResult::Create (exe_ctx.GetBestExecutionContextScope(), - type.m_opaque_sp->GetClangASTType(), + type.m_opaque_sp->GetClangASTType(false), ConstString(name), *data.m_opaque_sp, LLDB_INVALID_ADDRESS); @@ -837,7 +837,7 @@ SBValue::GetChildAtIndex (uint32_t idx) if (target_sp) use_dynamic = target_sp->GetPreferDynamicValue(); - + return GetChildAtIndex (idx, use_dynamic, can_create_synthetic); } @@ -846,7 +846,7 @@ SBValue::GetChildAtIndex (uint32_t idx, lldb::DynamicValueType use_dynamic, bool { lldb::ValueObjectSP child_sp; Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); - + ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) @@ -870,7 +870,7 @@ SBValue::GetChildAtIndex (uint32_t idx, lldb::DynamicValueType use_dynamic, bool sb_value.SetSP (child_sp, use_dynamic, GetPreferSyntheticValue()); if (log) log->Printf ("SBValue(%p)::GetChildAtIndex (%u) => SBValue(%p)", value_sp.get(), idx, value_sp.get()); - + return sb_value; } @@ -913,9 +913,9 @@ SBValue::GetChildMemberWithName (const char *name, lldb::DynamicValueType use_dy { lldb::ValueObjectSP child_sp; const ConstString str_name (name); - + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); - + ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) @@ -925,10 +925,10 @@ SBValue::GetChildMemberWithName (const char *name, lldb::DynamicValueType use_dy SBValue sb_value; sb_value.SetSP(child_sp, use_dynamic_value, GetPreferSyntheticValue()); - + if (log) log->Printf ("SBValue(%p)::GetChildMemberWithName (name=\"%s\") => SBValue(%p)", value_sp.get(), name, value_sp.get()); - + return sb_value; } @@ -1048,11 +1048,12 @@ SBValue::GetValueAsSigned(SBError& error, int64_t fail_value) lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { - Scalar scalar; - if (value_sp->ResolveValue (scalar)) - return scalar.SLongLong (fail_value); - else - error.SetErrorString ("could not resolve value"); + bool success = true; + uint64_t ret_val = fail_value; + ret_val = value_sp->GetValueAsSigned(fail_value, &success); + if (!success) + error.SetErrorString("could not resolve value"); + return ret_val; } else error.SetErrorStringWithFormat ("could not get SBValue: %s", locker.GetError().AsCString()); @@ -1068,11 +1069,12 @@ SBValue::GetValueAsUnsigned(SBError& error, uint64_t fail_value) lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { - Scalar scalar; - if (value_sp->ResolveValue (scalar)) - return scalar.ULongLong(fail_value); - else + bool success = true; + uint64_t ret_val = fail_value; + ret_val = value_sp->GetValueAsUnsigned(fail_value, &success); + if (!success) error.SetErrorString("could not resolve value"); + return ret_val; } else error.SetErrorStringWithFormat ("could not get SBValue: %s", locker.GetError().AsCString()); @@ -1087,9 +1089,7 @@ SBValue::GetValueAsSigned(int64_t fail_value) lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { - Scalar scalar; - if (value_sp->ResolveValue (scalar)) - return scalar.SLongLong(fail_value); + return value_sp->GetValueAsSigned(fail_value); } return fail_value; } @@ -1101,9 +1101,7 @@ SBValue::GetValueAsUnsigned(uint64_t fail_value) lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { - Scalar scalar; - if (value_sp->ResolveValue (scalar)) - return scalar.ULongLong(fail_value); + return value_sp->GetValueAsUnsigned(fail_value); } return fail_value; } @@ -1117,7 +1115,7 @@ SBValue::MightHaveChildren () lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) has_children = value_sp->MightHaveChildren(); - + if (log) log->Printf ("SBValue(%p)::MightHaveChildren() => %i", value_sp.get(), has_children); return has_children; @@ -1127,16 +1125,16 @@ uint32_t SBValue::GetNumChildren () { uint32_t num_children = 0; - + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) num_children = value_sp->GetNumChildren(); - + if (log) log->Printf ("SBValue(%p)::GetNumChildren () => %u", value_sp.get(), num_children); - + return num_children; } @@ -1149,13 +1147,13 @@ SBValue::Dereference () lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { - Error error; - sb_value = value_sp->Dereference (error); + Error error; + sb_value = value_sp->Dereference (error); } Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) log->Printf ("SBValue(%p)::Dereference () => SBValue(%p)", value_sp.get(), value_sp.get()); - + return sb_value; } @@ -1163,17 +1161,17 @@ bool SBValue::TypeIsPointerType () { bool is_ptr_type = false; - + ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) is_ptr_type = value_sp->IsPointerType(); - + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) log->Printf ("SBValue(%p)::TypeIsPointerType () => %i", value_sp.get(), is_ptr_type); - - + + return is_ptr_type; } @@ -1390,16 +1388,14 @@ bool SBValue::GetDescription (SBStream &description) { Stream &strm = description.ref(); - + ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) - { - ValueObject::DumpValueObject (strm, value_sp.get()); - } + value_sp->Dump(strm); else strm.PutCString ("No value"); - + return true; } @@ -1653,7 +1649,7 @@ SBValue::Watch (bool resolve_location, bool read, bool write, SBError &error) size_t byte_size = GetByteSize(); if (byte_size == 0) return sb_watchpoint; - + uint32_t watch_type = 0; if (read) watch_type |= LLDB_WATCH_TYPE_READ; @@ -1664,14 +1660,14 @@ SBValue::Watch (bool resolve_location, bool read, bool write, SBError &error) ClangASTType type (value_sp->GetClangType()); WatchpointSP watchpoint_sp = target_sp->CreateWatchpoint(addr, byte_size, &type, watch_type, rc); error.SetError(rc); - - if (watchpoint_sp) + + if (watchpoint_sp) { sb_watchpoint.SetSP (watchpoint_sp); Declaration decl; if (value_sp->GetDeclaration (decl)) { - if (decl.GetFile()) + if (decl.GetFile()) { StreamString ss; // True to show fullpath for declaration file. |