diff options
author | Jim Ingham <jingham@apple.com> | 2016-09-12 23:10:56 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2016-09-12 23:10:56 +0000 |
commit | e14dc26857470f248e5fc1dd14d89314eae47fa5 (patch) | |
tree | 4233b63c194167caeb8d013fa04bbbb88441b55d /lldb/source/Target/LanguageRuntime.cpp | |
parent | 9db7948e90133938079bc9bdb02b16cfd22f0015 (diff) | |
download | bcm5719-llvm-e14dc26857470f248e5fc1dd14d89314eae47fa5.tar.gz bcm5719-llvm-e14dc26857470f248e5fc1dd14d89314eae47fa5.zip |
This is the main part of a change to add breakpoint save and restore to lldb.
Still to come:
1) SB API's
2) Testcases
3) Loose ends:
a) serialize Thread options
b) serialize Exception resolvers
4) "break list --file" should list breakpoints contained in a file and
"break read -f 1 3 5" should then read in only those breakpoints.
<rdar://problem/12611863>
llvm-svn: 281273
Diffstat (limited to 'lldb/source/Target/LanguageRuntime.cpp')
-rw-r--r-- | lldb/source/Target/LanguageRuntime.cpp | 129 |
1 files changed, 66 insertions, 63 deletions
diff --git a/lldb/source/Target/LanguageRuntime.cpp b/lldb/source/Target/LanguageRuntime.cpp index 16cd12dde7a..83c6afadb21 100644 --- a/lldb/source/Target/LanguageRuntime.cpp +++ b/lldb/source/Target/LanguageRuntime.cpp @@ -23,80 +23,83 @@ using namespace lldb; using namespace lldb_private; -class ExceptionSearchFilter : public SearchFilter { -public: - ExceptionSearchFilter(const lldb::TargetSP &target_sp, - lldb::LanguageType language, - bool update_module_list = true) - : SearchFilter(target_sp), m_language(language), - m_language_runtime(nullptr), m_filter_sp() { - if (update_module_list) - UpdateModuleListIfNeeded(); - } - - ~ExceptionSearchFilter() override = default; - - bool ModulePasses(const lldb::ModuleSP &module_sp) override { - UpdateModuleListIfNeeded(); - if (m_filter_sp) - return m_filter_sp->ModulePasses(module_sp); - return false; - } - - bool ModulePasses(const FileSpec &spec) override { +ExceptionSearchFilter::ExceptionSearchFilter(const lldb::TargetSP &target_sp, + lldb::LanguageType language, + bool update_module_list) + : SearchFilter(target_sp, FilterTy::Exception), m_language(language), + m_language_runtime(nullptr), m_filter_sp() { + if (update_module_list) UpdateModuleListIfNeeded(); - if (m_filter_sp) - return m_filter_sp->ModulePasses(spec); - return false; - } +} - void Search(Searcher &searcher) override { - UpdateModuleListIfNeeded(); - if (m_filter_sp) - m_filter_sp->Search(searcher); - } +bool ExceptionSearchFilter::ModulePasses(const lldb::ModuleSP &module_sp) { + UpdateModuleListIfNeeded(); + if (m_filter_sp) + return m_filter_sp->ModulePasses(module_sp); + return false; +} - void GetDescription(Stream *s) override { - UpdateModuleListIfNeeded(); - if (m_filter_sp) - m_filter_sp->GetDescription(s); - } +bool ExceptionSearchFilter::ModulePasses(const FileSpec &spec) { + UpdateModuleListIfNeeded(); + if (m_filter_sp) + return m_filter_sp->ModulePasses(spec); + return false; +} -protected: - LanguageType m_language; - LanguageRuntime *m_language_runtime; - SearchFilterSP m_filter_sp; +void ExceptionSearchFilter::Search(Searcher &searcher) { + UpdateModuleListIfNeeded(); + if (m_filter_sp) + m_filter_sp->Search(searcher); +} - SearchFilterSP DoCopyForBreakpoint(Breakpoint &breakpoint) override { - return SearchFilterSP( - new ExceptionSearchFilter(TargetSP(), m_language, false)); - } +void ExceptionSearchFilter::GetDescription(Stream *s) { + UpdateModuleListIfNeeded(); + if (m_filter_sp) + m_filter_sp->GetDescription(s); +} - void UpdateModuleListIfNeeded() { - ProcessSP process_sp(m_target_sp->GetProcessSP()); - if (process_sp) { - bool refreash_filter = !m_filter_sp; - if (m_language_runtime == nullptr) { - m_language_runtime = process_sp->GetLanguageRuntime(m_language); +void ExceptionSearchFilter::UpdateModuleListIfNeeded() { + ProcessSP process_sp(m_target_sp->GetProcessSP()); + if (process_sp) { + bool refreash_filter = !m_filter_sp; + if (m_language_runtime == nullptr) { + m_language_runtime = process_sp->GetLanguageRuntime(m_language); + refreash_filter = true; + } else { + LanguageRuntime *language_runtime = + process_sp->GetLanguageRuntime(m_language); + if (m_language_runtime != language_runtime) { + m_language_runtime = language_runtime; refreash_filter = true; - } else { - LanguageRuntime *language_runtime = - process_sp->GetLanguageRuntime(m_language); - if (m_language_runtime != language_runtime) { - m_language_runtime = language_runtime; - refreash_filter = true; - } } + } - if (refreash_filter && m_language_runtime) { - m_filter_sp = m_language_runtime->CreateExceptionSearchFilter(); - } - } else { - m_filter_sp.reset(); - m_language_runtime = nullptr; + if (refreash_filter && m_language_runtime) { + m_filter_sp = m_language_runtime->CreateExceptionSearchFilter(); } + } else { + m_filter_sp.reset(); + m_language_runtime = nullptr; } -}; +} + +SearchFilterSP +ExceptionSearchFilter::DoCopyForBreakpoint(Breakpoint &breakpoint) { + return SearchFilterSP( + new ExceptionSearchFilter(TargetSP(), m_language, false)); +} + +SearchFilter *ExceptionSearchFilter::CreateFromStructuredData( + Target &target, StructuredData::Dictionary &data_dict, Error &error) { + SearchFilter *result = nullptr; + return result; +} + +StructuredData::ObjectSP ExceptionSearchFilter::SerializeToStructuredData() { + StructuredData::ObjectSP result_sp; + + return result_sp; +} // The Target is the one that knows how to create breakpoints, so this function // is meant to be used either by the target or internally in |