summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target/LanguageRuntime.cpp
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2016-09-12 23:10:56 +0000
committerJim Ingham <jingham@apple.com>2016-09-12 23:10:56 +0000
commite14dc26857470f248e5fc1dd14d89314eae47fa5 (patch)
tree4233b63c194167caeb8d013fa04bbbb88441b55d /lldb/source/Target/LanguageRuntime.cpp
parent9db7948e90133938079bc9bdb02b16cfd22f0015 (diff)
downloadbcm5719-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.cpp129
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
OpenPOWER on IntegriCloud