diff options
Diffstat (limited to 'contrib/llvm/tools/lldb/source/API')
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBBlock.cpp | 10 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBFrame.cpp | 58 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBFunction.cpp | 22 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBPlatform.cpp | 9 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBProcess.cpp | 10 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBSymbol.cpp | 16 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBTarget.cpp | 13 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBThread.cpp | 2 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBUnixSignals.cpp | 105 | ||||
-rw-r--r-- | contrib/llvm/tools/lldb/source/API/SystemInitializerFull.cpp | 5 |
10 files changed, 179 insertions, 71 deletions
diff --git a/contrib/llvm/tools/lldb/source/API/SBBlock.cpp b/contrib/llvm/tools/lldb/source/API/SBBlock.cpp index c8a665f..fdbbbc0 100644 --- a/contrib/llvm/tools/lldb/source/API/SBBlock.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBBlock.cpp @@ -75,7 +75,15 @@ SBBlock::GetInlinedName () const { const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); if (inlined_info) - return inlined_info->GetName().AsCString (NULL); + { + Function *function = m_opaque_ptr->CalculateSymbolContextFunction(); + LanguageType language; + if (function) + language = function->GetLanguage(); + else + language = lldb::eLanguageTypeUnknown; + return inlined_info->GetName(language).AsCString (NULL); + } } return NULL; } diff --git a/contrib/llvm/tools/lldb/source/API/SBFrame.cpp b/contrib/llvm/tools/lldb/source/API/SBFrame.cpp index e845aef..08a5822 100644 --- a/contrib/llvm/tools/lldb/source/API/SBFrame.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBFrame.cpp @@ -1571,7 +1571,7 @@ SBFrame::GetFunctionName() const if (inlined_block) { const InlineFunctionInfo* inlined_info = inlined_block->GetInlinedFunctionInfo(); - name = inlined_info->GetName().AsCString(); + name = inlined_info->GetName(sc.function->GetLanguage()).AsCString(); } } @@ -1602,3 +1602,59 @@ SBFrame::GetFunctionName() const } return name; } + +const char * +SBFrame::GetDisplayFunctionName() +{ + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + const char *name = NULL; + ExecutionContext exe_ctx(m_opaque_sp.get()); + StackFrame *frame = NULL; + Target *target = exe_ctx.GetTargetPtr(); + Process *process = exe_ctx.GetProcessPtr(); + if (target && process) + { + Process::StopLocker stop_locker; + if (stop_locker.TryLock(&process->GetRunLock())) + { + frame = exe_ctx.GetFramePtr(); + if (frame) + { + SymbolContext sc (frame->GetSymbolContext(eSymbolContextFunction | eSymbolContextBlock | eSymbolContextSymbol)); + if (sc.block) + { + Block *inlined_block = sc.block->GetContainingInlinedBlock (); + if (inlined_block) + { + const InlineFunctionInfo* inlined_info = inlined_block->GetInlinedFunctionInfo(); + name = inlined_info->GetDisplayName(sc.function->GetLanguage()).AsCString(); + } + } + + if (name == NULL) + { + if (sc.function) + name = sc.function->GetDisplayName().GetCString(); + } + + if (name == NULL) + { + if (sc.symbol) + name = sc.symbol->GetDisplayName().GetCString(); + } + } + else + { + if (log) + log->Printf ("SBFrame::GetDisplayFunctionName () => error: could not reconstruct frame object for this SBFrame."); + } + } + else + { + if (log) + log->Printf ("SBFrame::GetDisplayFunctionName() => error: process is running"); + + } + } + return name; +} diff --git a/contrib/llvm/tools/lldb/source/API/SBFunction.cpp b/contrib/llvm/tools/lldb/source/API/SBFunction.cpp index bf5e918..2ec6072 100644 --- a/contrib/llvm/tools/lldb/source/API/SBFunction.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBFunction.cpp @@ -60,7 +60,7 @@ SBFunction::GetName() const { const char *cstr = NULL; if (m_opaque_ptr) - cstr = m_opaque_ptr->GetMangled().GetName().AsCString(); + cstr = m_opaque_ptr->GetName().AsCString(); Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) @@ -76,6 +76,26 @@ SBFunction::GetName() const } const char * +SBFunction::GetDisplayName() const +{ + const char *cstr = NULL; + if (m_opaque_ptr) + cstr = m_opaque_ptr->GetMangled().GetDisplayDemangledName(m_opaque_ptr->GetLanguage()).AsCString(); + + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + if (log) + { + if (cstr) + log->Printf ("SBFunction(%p)::GetDisplayName () => \"%s\"", + static_cast<void*>(m_opaque_ptr), cstr); + else + log->Printf ("SBFunction(%p)::GetDisplayName () => NULL", + static_cast<void*>(m_opaque_ptr)); + } + return cstr; +} + +const char * SBFunction::GetMangledName () const { const char *cstr = NULL; diff --git a/contrib/llvm/tools/lldb/source/API/SBPlatform.cpp b/contrib/llvm/tools/lldb/source/API/SBPlatform.cpp index 5662f36..97ffcf1 100644 --- a/contrib/llvm/tools/lldb/source/API/SBPlatform.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBPlatform.cpp @@ -11,6 +11,7 @@ #include "lldb/API/SBError.h" #include "lldb/API/SBFileSpec.h" #include "lldb/API/SBLaunchInfo.h" +#include "lldb/API/SBUnixSignals.h" #include "lldb/Core/ArchSpec.h" #include "lldb/Core/Error.h" #include "lldb/Host/File.h" @@ -638,3 +639,11 @@ SBPlatform::SetFilePermissions (const char *path, uint32_t file_permissions) } +SBUnixSignals +SBPlatform::GetUnixSignals() const +{ + if (auto platform_sp = GetSP()) + return SBUnixSignals{platform_sp}; + + return {}; +} diff --git a/contrib/llvm/tools/lldb/source/API/SBProcess.cpp b/contrib/llvm/tools/lldb/source/API/SBProcess.cpp index a1dbf68..01bfaf9 100644 --- a/contrib/llvm/tools/lldb/source/API/SBProcess.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBProcess.cpp @@ -912,14 +912,10 @@ SBProcess::Signal (int signo) SBUnixSignals SBProcess::GetUnixSignals() { - SBUnixSignals sb_unix_signals; - ProcessSP process_sp(GetSP()); - if (process_sp) - { - sb_unix_signals.SetSP(process_sp); - } + if (auto process_sp = GetSP()) + return SBUnixSignals{process_sp}; - return sb_unix_signals; + return {}; } void diff --git a/contrib/llvm/tools/lldb/source/API/SBSymbol.cpp b/contrib/llvm/tools/lldb/source/API/SBSymbol.cpp index 246a455..22d1e54 100644 --- a/contrib/llvm/tools/lldb/source/API/SBSymbol.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBSymbol.cpp @@ -63,7 +63,7 @@ SBSymbol::GetName() const { const char *name = NULL; if (m_opaque_ptr) - name = m_opaque_ptr->GetMangled().GetName().AsCString(); + name = m_opaque_ptr->GetName().AsCString(); Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) @@ -73,6 +73,20 @@ SBSymbol::GetName() const } const char * +SBSymbol::GetDisplayName() const +{ + const char *name = NULL; + if (m_opaque_ptr) + name = m_opaque_ptr->GetMangled().GetDisplayDemangledName(m_opaque_ptr->GetLanguage()).AsCString(); + + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + if (log) + log->Printf ("SBSymbol(%p)::GetDisplayName () => \"%s\"", + static_cast<void*>(m_opaque_ptr), name ? name : ""); + return name; +} + +const char * SBSymbol::GetMangledName () const { const char *name = NULL; diff --git a/contrib/llvm/tools/lldb/source/API/SBTarget.cpp b/contrib/llvm/tools/lldb/source/API/SBTarget.cpp index 9238852..6597d4e 100644 --- a/contrib/llvm/tools/lldb/source/API/SBTarget.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBTarget.cpp @@ -2293,6 +2293,19 @@ SBTarget::FindSymbols (const char *name, lldb::SymbolType symbol_type) } +lldb::SBValue +SBTarget::EvaluateExpression (const char *expr) +{ + TargetSP target_sp(GetSP()); + if (!target_sp) + return SBValue(); + + SBExpressionOptions options; + lldb::DynamicValueType fetch_dynamic_value = target_sp->GetPreferDynamicValue(); + options.SetFetchDynamicValue (fetch_dynamic_value); + options.SetUnwindOnError (true); + return EvaluateExpression(expr, options); +} lldb::SBValue SBTarget::EvaluateExpression (const char *expr, const SBExpressionOptions &options) diff --git a/contrib/llvm/tools/lldb/source/API/SBThread.cpp b/contrib/llvm/tools/lldb/source/API/SBThread.cpp index dfc7ce9..42b5c9a 100644 --- a/contrib/llvm/tools/lldb/source/API/SBThread.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBThread.cpp @@ -392,7 +392,7 @@ SBThread::GetStopDescription (char *dst, size_t dst_len) case eStopReasonSignal: { - stop_desc = exe_ctx.GetProcessPtr()->GetUnixSignals ().GetSignalAsCString (stop_info_sp->GetValue()); + stop_desc = exe_ctx.GetProcessPtr()->GetUnixSignals()->GetSignalAsCString(stop_info_sp->GetValue()); if (stop_desc == NULL || stop_desc[0] == '\0') { static char signal_desc[] = "signal"; diff --git a/contrib/llvm/tools/lldb/source/API/SBUnixSignals.cpp b/contrib/llvm/tools/lldb/source/API/SBUnixSignals.cpp index ca321d8..531c978 100644 --- a/contrib/llvm/tools/lldb/source/API/SBUnixSignals.cpp +++ b/contrib/llvm/tools/lldb/source/API/SBUnixSignals.cpp @@ -9,6 +9,7 @@ #include "lldb/lldb-defines.h" #include "lldb/Target/Process.h" +#include "lldb/Target/Platform.h" #include "lldb/Target/UnixSignals.h" #include "lldb/Core/Log.h" @@ -25,8 +26,13 @@ SBUnixSignals::SBUnixSignals (const SBUnixSignals &rhs) : { } -SBUnixSignals::SBUnixSignals (ProcessSP &process_sp) : - m_opaque_wp(process_sp) +SBUnixSignals::SBUnixSignals(ProcessSP &process_sp) : + m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) +{ +} + +SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp) : + m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) { } @@ -42,16 +48,16 @@ SBUnixSignals::~SBUnixSignals() { } -ProcessSP +UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); } void -SBUnixSignals::SetSP (const ProcessSP &process_sp) +SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) { - m_opaque_wp = process_sp; + m_opaque_wp = signals_sp; } void @@ -63,30 +69,33 @@ SBUnixSignals::Clear () bool SBUnixSignals::IsValid() const { - return (bool) GetSP(); + return static_cast<bool>(GetSP()); } const char * SBUnixSignals::GetSignalAsCString (int32_t signo) const { - ProcessSP process_sp(GetSP()); - if (process_sp) return process_sp->GetUnixSignals().GetSignalAsCString(signo); - return NULL; + if (auto signals_sp = GetSP()) + return signals_sp->GetSignalAsCString(signo); + + return nullptr; } int32_t SBUnixSignals::GetSignalNumberFromName (const char *name) const { - ProcessSP process_sp(GetSP()); - if (process_sp) return process_sp->GetUnixSignals().GetSignalNumberFromName(name); - return -1; + if (auto signals_sp = GetSP()) + return signals_sp->GetSignalNumberFromName(name); + + return LLDB_INVALID_SIGNAL_NUMBER; } bool SBUnixSignals::GetShouldSuppress (int32_t signo) const { - ProcessSP process_sp(GetSP()); - if (process_sp) return process_sp->GetUnixSignals().GetShouldSuppress(signo); + if (auto signals_sp = GetSP()) + return signals_sp->GetShouldSuppress(signo); + return false; } @@ -94,25 +103,28 @@ bool SBUnixSignals::SetShouldSuppress (int32_t signo, bool value) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); - ProcessSP process_sp(GetSP()); + auto signals_sp = GetSP(); if (log) { log->Printf ("SBUnixSignals(%p)::SetShouldSuppress (signo=%d, value=%d)", - static_cast<void*>(process_sp.get()), + static_cast<void*>(signals_sp.get()), signo, value); } - if (process_sp) return process_sp->GetUnixSignals().SetShouldSuppress(signo, value); + if (signals_sp) + return signals_sp->SetShouldSuppress(signo, value); + return false; } bool SBUnixSignals::GetShouldStop (int32_t signo) const { - ProcessSP process_sp(GetSP()); - if (process_sp) return process_sp->GetUnixSignals().GetShouldStop(signo); + if (auto signals_sp = GetSP()) + return signals_sp->GetShouldStop(signo); + return false; } @@ -120,25 +132,28 @@ bool SBUnixSignals::SetShouldStop (int32_t signo, bool value) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); - ProcessSP process_sp(GetSP()); + auto signals_sp = GetSP(); if (log) { log->Printf ("SBUnixSignals(%p)::SetShouldStop (signo=%d, value=%d)", - static_cast<void*>(process_sp.get()), + static_cast<void*>(signals_sp.get()), signo, value); } - if (process_sp) return process_sp->GetUnixSignals().SetShouldStop(signo, value); + if (signals_sp) + return signals_sp->SetShouldStop(signo, value); + return false; } bool SBUnixSignals::GetShouldNotify (int32_t signo) const { - ProcessSP process_sp(GetSP()); - if (process_sp) return process_sp->GetUnixSignals().GetShouldNotify(signo); + if (auto signals_sp = GetSP()) + return signals_sp->GetShouldNotify(signo); + return false; } @@ -146,54 +161,36 @@ bool SBUnixSignals::SetShouldNotify (int32_t signo, bool value) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); - ProcessSP process_sp(GetSP()); + auto signals_sp = GetSP(); if (log) { log->Printf ("SBUnixSignals(%p)::SetShouldNotify (signo=%d, value=%d)", - static_cast<void*>(process_sp.get()), + static_cast<void*>(signals_sp.get()), signo, value); } - if (process_sp) return process_sp->GetUnixSignals().SetShouldNotify(signo, value); + if (signals_sp) + return signals_sp->SetShouldNotify(signo, value); + return false; } int32_t SBUnixSignals::GetNumSignals () const { - if (auto process_sp = GetSP()) - { - // only valid while we hold process_sp - UnixSignals *unix_signals_ptr = &process_sp->GetUnixSignals(); - int32_t num_signals = 0; - for (int32_t signo = unix_signals_ptr->GetFirstSignalNumber(); - signo != LLDB_INVALID_SIGNAL_NUMBER; - signo = unix_signals_ptr->GetNextSignalNumber(signo)) - { - num_signals++; - } - return num_signals; - } - return LLDB_INVALID_SIGNAL_NUMBER; + if (auto signals_sp = GetSP()) + return signals_sp->GetNumSignals(); + + return -1; } int32_t SBUnixSignals::GetSignalAtIndex (int32_t index) const { - if (auto process_sp = GetSP()) - { - // only valid while we hold process_sp - UnixSignals *unix_signals_ptr = &process_sp->GetUnixSignals(); - int32_t idx = 0; - for (int32_t signo = unix_signals_ptr->GetFirstSignalNumber(); - signo != LLDB_INVALID_SIGNAL_NUMBER; - signo = unix_signals_ptr->GetNextSignalNumber(signo)) - { - if (index == idx) return signo; - idx++; - } - } + if (auto signals_sp = GetSP()) + return signals_sp->GetSignalAtIndex(index); + return LLDB_INVALID_SIGNAL_NUMBER; } diff --git a/contrib/llvm/tools/lldb/source/API/SystemInitializerFull.cpp b/contrib/llvm/tools/lldb/source/API/SystemInitializerFull.cpp index 5ba355a..80a87d4 100644 --- a/contrib/llvm/tools/lldb/source/API/SystemInitializerFull.cpp +++ b/contrib/llvm/tools/lldb/source/API/SystemInitializerFull.cpp @@ -50,7 +50,6 @@ #if defined(_MSC_VER) #include "lldb/Host/windows/windows.h" -#include "Plugins/Process/Windows/DynamicLoaderWindows.h" #include "Plugins/Process/Windows/ProcessWindows.h" #endif @@ -249,7 +248,6 @@ SystemInitializerFull::Initialize() ItaniumABILanguageRuntime::Initialize(); #if defined(_MSC_VER) - DynamicLoaderWindows::Initialize(); ProcessWindows::Initialize(); #endif #if defined(__FreeBSD__) @@ -347,9 +345,6 @@ SystemInitializerFull::Terminate() ProcessKDP::Terminate(); SymbolVendorMacOSX::Terminate(); #endif -#if defined(_MSC_VER) - DynamicLoaderWindows::Terminate(); -#endif #if defined(__FreeBSD__) ProcessFreeBSD::Terminate(); |