From c2409baa663d219bbe318d89f803dd6f1e10f29c Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Mon, 29 Jul 2019 15:53:36 +0000 Subject: [PATCH] SymbolVendor: Make SectionAddressesChanged a passthrough Summary: This moves the implementation of the function into the SymbolFile class, making it possible to excise the SymbolVendor passthrough functions in follow-up patches. Reviewers: clayborg, jingham, JDevlieghere Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D65266 llvm-svn: 367231 --- lldb/include/lldb/Symbol/SymbolFile.h | 3 ++- lldb/source/Symbol/SymbolFile.cpp | 14 +++++++++++++- lldb/source/Symbol/SymbolVendor.cpp | 15 ++------------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/lldb/include/lldb/Symbol/SymbolFile.h b/lldb/include/lldb/Symbol/SymbolFile.h index 183753a6c25d..29d561094214 100644 --- a/lldb/include/lldb/Symbol/SymbolFile.h +++ b/lldb/include/lldb/Symbol/SymbolFile.h @@ -212,6 +212,7 @@ public: ObjectFile *GetObjectFile() { return m_obj_file; } const ObjectFile *GetObjectFile() const { return m_obj_file; } + ObjectFile *GetMainObjectFile(); virtual std::vector ParseCallEdgesInFunction(UserID func_id) { return {}; @@ -221,7 +222,7 @@ public: /// Notify the SymbolFile that the file addresses in the Sections /// for this module have been changed. - virtual void SectionFileAddressesChanged() {} + virtual void SectionFileAddressesChanged(); struct RegisterInfoResolver { virtual ~RegisterInfoResolver(); // anchor diff --git a/lldb/source/Symbol/SymbolFile.cpp b/lldb/source/Symbol/SymbolFile.cpp index 223e678e98ee..be895b645cf7 100644 --- a/lldb/source/Symbol/SymbolFile.cpp +++ b/lldb/source/Symbol/SymbolFile.cpp @@ -31,6 +31,9 @@ void SymbolFile::PreloadSymbols() { std::recursive_mutex &SymbolFile::GetModuleMutex() const { return GetObjectFile()->GetModule()->GetMutex(); } +ObjectFile *SymbolFile::GetMainObjectFile() { + return m_obj_file->GetModule()->GetObjectFile(); +} SymbolFile *SymbolFile::FindPlugin(ObjectFile *obj_file) { std::unique_ptr best_symfile_up; @@ -206,7 +209,7 @@ Symtab *SymbolFile::GetSymtab() { return m_symtab; // Fetch the symtab from the main object file. - m_symtab = m_obj_file->GetModule()->GetObjectFile()->GetSymtab(); + m_symtab = GetMainObjectFile()->GetSymtab(); // Then add our symbols to it. if (m_symtab) @@ -215,6 +218,15 @@ Symtab *SymbolFile::GetSymtab() { return m_symtab; } +void SymbolFile::SectionFileAddressesChanged() { + ObjectFile *module_objfile = GetMainObjectFile(); + ObjectFile *symfile_objfile = GetObjectFile(); + if (symfile_objfile != module_objfile) + symfile_objfile->SectionFileAddressesChanged(); + if (m_symtab) + m_symtab->SectionFileAddressesChanged(); +} + void SymbolFile::Dump(Stream &s) { s.PutCString("Types:\n"); m_type_list.Dump(&s, /*show_context*/ false); diff --git a/lldb/source/Symbol/SymbolVendor.cpp b/lldb/source/Symbol/SymbolVendor.cpp index 5bb4ea3822ab..19b02da34c2f 100644 --- a/lldb/source/Symbol/SymbolVendor.cpp +++ b/lldb/source/Symbol/SymbolVendor.cpp @@ -390,19 +390,8 @@ Symtab *SymbolVendor::GetSymtab() { } void SymbolVendor::SectionFileAddressesChanged() { - ModuleSP module_sp(GetModule()); - if (module_sp) { - ObjectFile *module_objfile = module_sp->GetObjectFile(); - if (m_sym_file_up) { - ObjectFile *symfile_objfile = m_sym_file_up->GetObjectFile(); - if (symfile_objfile != module_objfile) - symfile_objfile->SectionFileAddressesChanged(); - } - Symtab *symtab = GetSymtab(); - if (symtab) { - symtab->SectionFileAddressesChanged(); - } - } + if (m_sym_file_up) + m_sym_file_up->SectionFileAddressesChanged(); } // PluginInterface protocol