Looking at it now. On Tue, Jan 12, 2016 at 11:25 AM, Siva Chandra <sivachan...@google.com> wrote: > This breaks the build: > http://lab.llvm.org:8011/builders/lldb-x86_64-ubuntu-14.04-buildserver/builds/4487 > > On Tue, Jan 12, 2016 at 11:02 AM, Stephane Sezer via lldb-commits > <lldb-commits@lists.llvm.org> wrote: >> Author: sas >> Date: Tue Jan 12 13:02:41 2016 >> New Revision: 257502 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=257502&view=rev >> Log: >> Increase use of svr4 packets to improve performance on POSIX remotes >> >> Summary: >> Allows the remote to enumerate the link map when adding and removing >> shared libraries, so that lldb doesn't need to read it manually from >> the remote's memory. >> >> This provides very large speedups (on the order of 50%) in total >> startup time when using the ds2 remote on android or Tizen devices. >> >> Reviewers: ADodds, tberghammer, tfiala >> >> Subscribers: tberghammer, sas, danalbert, llvm-commits, srhines >> >> Differential Revision: http://reviews.llvm.org/D16004 >> >> Change by Francis Ricci <fjri...@fb.com> >> >> Added: >> lldb/trunk/include/lldb/Core/LoadedModuleInfoList.h >> Modified: >> lldb/trunk/include/lldb/Target/Process.h >> lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp >> lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h >> lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp >> lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h >> >> Added: lldb/trunk/include/lldb/Core/LoadedModuleInfoList.h >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/LoadedModuleInfoList.h?rev=257502&view=auto >> ============================================================================== >> --- lldb/trunk/include/lldb/Core/LoadedModuleInfoList.h (added) >> +++ lldb/trunk/include/lldb/Core/LoadedModuleInfoList.h Tue Jan 12 13:02:41 >> 2016 >> @@ -0,0 +1,152 @@ >> +//===-- LoadedModuleInfoList.h ----------------------------------*- C++ >> -*-===// >> +// >> +// The LLVM Compiler Infrastructure >> +// >> +// This file is distributed under the University of Illinois Open Source >> +// License. See LICENSE.TXT for details. >> +// >> +//===----------------------------------------------------------------------===// >> + >> +#ifndef liblldb_LoadedModuleInfoList_h_ >> +#define liblldb_LoadedModuleInfoList_h_ >> + >> +// C Includes >> + >> +// C++ Includes >> +#include <vector> >> + >> +// Other libraries and framework includes >> +#include "lldb/lldb-private-forward.h" >> + >> +namespace lldb_private { >> +class LoadedModuleInfoList >> +{ >> +public: >> + >> + class LoadedModuleInfo >> + { >> + public: >> + >> + enum e_data_point >> + { >> + e_has_name = 0, >> + e_has_base , >> + e_has_dynamic , >> + e_has_link_map , >> + e_num >> + }; >> + >> + LoadedModuleInfo () >> + { >> + for (uint32_t i = 0; i < e_num; ++i) >> + m_has[i] = false; >> + }; >> + >> + void set_name (const std::string & name) >> + { >> + m_name = name; >> + m_has[e_has_name] = true; >> + } >> + bool get_name (std::string & out) const >> + { >> + out = m_name; >> + return m_has[e_has_name]; >> + } >> + >> + void set_base (const lldb::addr_t base) >> + { >> + m_base = base; >> + m_has[e_has_base] = true; >> + } >> + bool get_base (lldb::addr_t & out) const >> + { >> + out = m_base; >> + return m_has[e_has_base]; >> + } >> + >> + void set_base_is_offset (bool is_offset) >> + { >> + m_base_is_offset = is_offset; >> + } >> + bool get_base_is_offset(bool & out) const >> + { >> + out = m_base_is_offset; >> + return m_has[e_has_base]; >> + } >> + >> + void set_link_map (const lldb::addr_t addr) >> + { >> + m_link_map = addr; >> + m_has[e_has_link_map] = true; >> + } >> + bool get_link_map (lldb::addr_t & out) const >> + { >> + out = m_link_map; >> + return m_has[e_has_link_map]; >> + } >> + >> + void set_dynamic (const lldb::addr_t addr) >> + { >> + m_dynamic = addr; >> + m_has[e_has_dynamic] = true; >> + } >> + bool get_dynamic (lldb::addr_t & out) const >> + { >> + out = m_dynamic; >> + return m_has[e_has_dynamic]; >> + } >> + >> + bool has_info (e_data_point datum) const >> + { >> + assert (datum < e_num); >> + return m_has[datum]; >> + } >> + >> + bool >> + operator == (LoadedModuleInfo const &rhs) const >> + { >> + if (e_num != rhs.e_num) >> + return false; >> + >> + for (size_t i = 0; i < e_num; ++i) >> + { >> + if (m_has[i] != rhs.m_has[i]) >> + return false; >> + } >> + >> + return (m_base == rhs.m_base) && >> + (m_link_map == rhs.m_link_map) && >> + (m_dynamic == rhs.m_dynamic) && >> + (m_name == rhs.m_name); >> + } >> + protected: >> + >> + bool m_has[e_num]; >> + std::string m_name; >> + lldb::addr_t m_link_map; >> + lldb::addr_t m_base; >> + bool m_base_is_offset; >> + lldb::addr_t m_dynamic; >> + }; >> + >> + LoadedModuleInfoList () >> + : m_list () >> + , m_link_map (LLDB_INVALID_ADDRESS) >> + {} >> + >> + void add (const LoadedModuleInfo & mod) >> + { >> + m_list.push_back (mod); >> + } >> + >> + void clear () >> + { >> + m_list.clear (); >> + } >> + >> + std::vector<LoadedModuleInfo> m_list; >> + lldb::addr_t m_link_map; >> +}; >> +} // namespace lldb_private >> + >> +#endif // liblldb_LoadedModuleInfoList_h_ >> >> Modified: lldb/trunk/include/lldb/Target/Process.h >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Process.h?rev=257502&r1=257501&r2=257502&view=diff >> ============================================================================== >> --- lldb/trunk/include/lldb/Target/Process.h (original) >> +++ lldb/trunk/include/lldb/Target/Process.h Tue Jan 12 13:02:41 2016 >> @@ -30,6 +30,7 @@ >> #include "lldb/Core/Communication.h" >> #include "lldb/Core/Error.h" >> #include "lldb/Core/Event.h" >> +#include "lldb/Core/LoadedModuleInfoList.h" >> #include "lldb/Core/ThreadSafeValue.h" >> #include "lldb/Core/PluginInterface.h" >> #include "lldb/Core/StructuredData.h" >> @@ -1152,6 +1153,12 @@ public: >> return 0; >> } >> >> + virtual size_t >> + LoadModules (LoadedModuleInfoList &) >> + { >> + return 0; >> + } >> + >> protected: >> virtual JITLoaderList & >> GetJITLoaders (); >> >> Modified: >> lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp?rev=257502&r1=257501&r2=257502&view=diff >> ============================================================================== >> --- lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp >> (original) >> +++ lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp >> Tue Jan 12 13:02:41 2016 >> @@ -107,6 +107,7 @@ DYLDRendezvous::DYLDRendezvous(Process * >> m_rendezvous_addr(LLDB_INVALID_ADDRESS), >> m_current(), >> m_previous(), >> + m_loaded_modules(), >> m_soentries(), >> m_added_soentries(), >> m_removed_soentries() >> @@ -181,6 +182,9 @@ DYLDRendezvous::Resolve() >> m_previous = m_current; >> m_current = info; >> >> + if (UpdateSOEntries (true)) >> + return true; >> + >> return UpdateSOEntries(); >> } >> >> @@ -191,18 +195,23 @@ DYLDRendezvous::IsValid() >> } >> >> bool >> -DYLDRendezvous::UpdateSOEntries() >> +DYLDRendezvous::UpdateSOEntries(bool fromRemote) >> { >> SOEntry entry; >> + LoadedModuleInfoList module_list; >> >> - if (m_current.map_addr == 0) >> + // If we can't get the SO info from the remote, return failure. >> + if (fromRemote && m_process->LoadModules (module_list) == 0) >> + return false; >> + >> + if (!fromRemote && m_current.map_addr == 0) >> return false; >> >> // When the previous and current states are consistent this is the first >> // time we have been asked to update. Just take a snapshot of the >> currently >> // loaded modules. >> - if (m_previous.state == eConsistent && m_current.state == eConsistent) >> - return TakeSnapshot(m_soentries); >> + if (m_previous.state == eConsistent && m_current.state == eConsistent) >> + return fromRemote ? SaveSOEntriesFromRemote(module_list) : >> TakeSnapshot(m_soentries); >> >> // If we are about to add or remove a shared object clear out the >> current >> // state and take a snapshot of the currently loaded images. >> @@ -215,6 +224,9 @@ DYLDRendezvous::UpdateSOEntries() >> return false; >> >> m_soentries.clear(); >> + if (fromRemote) >> + return SaveSOEntriesFromRemote(module_list); >> + >> m_added_soentries.clear(); >> m_removed_soentries.clear(); >> return TakeSnapshot(m_soentries); >> @@ -224,15 +236,133 @@ DYLDRendezvous::UpdateSOEntries() >> // Otherwise check the previous state to determine what to expect and >> update >> // accordingly. >> if (m_previous.state == eAdd) >> - return UpdateSOEntriesForAddition(); >> + return fromRemote ? AddSOEntriesFromRemote(module_list) : >> AddSOEntries(); >> else if (m_previous.state == eDelete) >> - return UpdateSOEntriesForDeletion(); >> + return fromRemote ? RemoveSOEntriesFromRemote(module_list) : >> RemoveSOEntries(); >> >> return false; >> } >> - >> + >> +bool >> +DYLDRendezvous::FillSOEntryFromModuleInfo >> (LoadedModuleInfoList::LoadedModuleInfo const & modInfo, >> + SOEntry &entry) >> +{ >> + addr_t link_map_addr; >> + addr_t base_addr; >> + addr_t dyn_addr; >> + std::string name; >> + >> + if (!modInfo.get_link_map (link_map_addr) || >> + !modInfo.get_base (base_addr) || >> + !modInfo.get_dynamic (dyn_addr) || >> + !modInfo.get_name (name)) >> + return false; >> + >> + entry.link_addr = link_map_addr; >> + entry.base_addr = base_addr; >> + entry.dyn_addr = dyn_addr; >> + >> + entry.file_spec.SetFile(name, false); >> + >> + UpdateBaseAddrIfNecessary(entry, name); >> + >> + // not needed if we're using ModuleInfos >> + entry.next = 0; >> + entry.prev = 0; >> + entry.path_addr = 0; >> + >> + return true; >> +} >> + >> bool >> -DYLDRendezvous::UpdateSOEntriesForAddition() >> +DYLDRendezvous::SaveSOEntriesFromRemote(LoadedModuleInfoList &module_list) >> +{ >> + for (auto const & modInfo : module_list.m_list) >> + { >> + SOEntry entry; >> + if (!FillSOEntryFromModuleInfo(modInfo, entry)) >> + return false; >> + >> + // Only add shared libraries and not the executable. >> + if (!SOEntryIsMainExecutable(entry)) >> + m_soentries.push_back(entry); >> + } >> + >> + m_loaded_modules = module_list; >> + return true; >> + >> +} >> + >> +bool >> +DYLDRendezvous::AddSOEntriesFromRemote(LoadedModuleInfoList &module_list) >> +{ >> + for (auto const & modInfo : module_list.m_list) >> + { >> + bool found = false; >> + for (auto const & existing : m_loaded_modules.m_list) >> + { >> + if (modInfo == existing) >> + { >> + found = true; >> + break; >> + } >> + } >> + >> + if (found) >> + continue; >> + >> + SOEntry entry; >> + if (!FillSOEntryFromModuleInfo(modInfo, entry)) >> + return false; >> + >> + // Only add shared libraries and not the executable. >> + if (!SOEntryIsMainExecutable(entry)) >> + m_soentries.push_back(entry); >> + } >> + >> + m_loaded_modules = module_list; >> + return true; >> +} >> + >> +bool >> +DYLDRendezvous::RemoveSOEntriesFromRemote(LoadedModuleInfoList &module_list) >> +{ >> + for (auto const & existing : m_loaded_modules.m_list) >> + { >> + bool found = false; >> + for (auto const & modInfo : module_list.m_list) >> + { >> + if (modInfo == existing) >> + { >> + found = true; >> + break; >> + } >> + } >> + >> + if (found) >> + continue; >> + >> + SOEntry entry; >> + if (!FillSOEntryFromModuleInfo(existing, entry)) >> + return false; >> + >> + // Only add shared libraries and not the executable. >> + if (!SOEntryIsMainExecutable(entry)) >> + { >> + iterator pos = std::find(m_soentries.begin(), >> m_soentries.end(), entry); >> + if (pos == m_soentries.end()) >> + return false; >> + >> + m_soentries.erase(pos); >> + } >> + } >> + >> + m_loaded_modules = module_list; >> + return true; >> +} >> + >> +bool >> +DYLDRendezvous::AddSOEntries() >> { >> SOEntry entry; >> iterator pos; >> @@ -263,7 +393,7 @@ DYLDRendezvous::UpdateSOEntriesForAdditi >> } >> >> bool >> -DYLDRendezvous::UpdateSOEntriesForDeletion() >> +DYLDRendezvous::RemoveSOEntries() >> { >> SOEntryList entry_list; >> iterator pos; >> @@ -291,7 +421,8 @@ DYLDRendezvous::SOEntryIsMainExecutable( >> // FreeBSD and on Android it is the full path to the executable. >> >> auto triple = m_process->GetTarget().GetArchitecture().GetTriple(); >> - switch (triple.getOS()) { >> + switch (triple.getOS()) >> + { >> case llvm::Triple::FreeBSD: >> return entry.file_spec == m_exe_file_spec; >> case llvm::Triple::Linux: >> @@ -386,6 +517,21 @@ isLoadBiasIncorrect(Target& target, cons >> return false; >> } >> >> +void >> +DYLDRendezvous::UpdateBaseAddrIfNecessary(SOEntry &entry, std::string const >> &file_path) >> +{ >> + // If the load bias reported by the linker is incorrect then fetch the >> load address of the file >> + // from the proc file system. >> + if (isLoadBiasIncorrect(m_process->GetTarget(), file_path)) >> + { >> + lldb::addr_t load_addr = LLDB_INVALID_ADDRESS; >> + bool is_loaded = false; >> + Error error = m_process->GetFileLoadAddress(entry.file_spec, >> is_loaded, load_addr); >> + if (error.Success() && is_loaded) >> + entry.base_addr = load_addr; >> + } >> +} >> + >> bool >> DYLDRendezvous::ReadSOEntryFromMemory(lldb::addr_t addr, SOEntry &entry) >> { >> @@ -427,16 +573,7 @@ DYLDRendezvous::ReadSOEntryFromMemory(ll >> std::string file_path = ReadStringFromMemory(entry.path_addr); >> entry.file_spec.SetFile(file_path, false); >> >> - // If the load bias reported by the linker is incorrect then fetch the >> load address of the file >> - // from the proc file system. >> - if (isLoadBiasIncorrect(m_process->GetTarget(), file_path)) >> - { >> - lldb::addr_t load_addr = LLDB_INVALID_ADDRESS; >> - bool is_loaded = false; >> - Error error = m_process->GetFileLoadAddress(entry.file_spec, >> is_loaded, load_addr); >> - if (error.Success() && is_loaded) >> - entry.base_addr = load_addr; >> - } >> + UpdateBaseAddrIfNecessary(entry, file_path); >> >> return true; >> } >> >> Modified: lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h?rev=257502&r1=257501&r2=257502&view=diff >> ============================================================================== >> --- lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h >> (original) >> +++ lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h Tue >> Jan 12 13:02:41 2016 >> @@ -20,6 +20,10 @@ >> #include "lldb/lldb-types.h" >> #include "lldb/Host/FileSpec.h" >> >> +#include "lldb/Core/LoadedModuleInfoList.h" >> + >> +using lldb_private::LoadedModuleInfoList; >> + >> namespace lldb_private { >> class Process; >> } >> @@ -201,6 +205,9 @@ protected: >> Rendezvous m_current; >> Rendezvous m_previous; >> >> + /// List of currently loaded SO modules >> + LoadedModuleInfoList m_loaded_modules; >> + >> /// List of SOEntry objects corresponding to the current link map state. >> SOEntryList m_soentries; >> >> @@ -240,13 +247,29 @@ protected: >> /// Updates the current set of SOEntries, the set of added entries, and >> the >> /// set of removed entries. >> bool >> - UpdateSOEntries(); >> + UpdateSOEntries(bool fromRemote = false); >> + >> + bool >> + FillSOEntryFromModuleInfo (LoadedModuleInfoList::LoadedModuleInfo const >> & modInfo, >> + SOEntry &entry); >> + >> + bool >> + SaveSOEntriesFromRemote(LoadedModuleInfoList &module_list); >> >> bool >> - UpdateSOEntriesForAddition(); >> + AddSOEntriesFromRemote(LoadedModuleInfoList &module_list); >> >> bool >> - UpdateSOEntriesForDeletion(); >> + RemoveSOEntriesFromRemote(LoadedModuleInfoList &module_list); >> + >> + bool >> + AddSOEntries(); >> + >> + bool >> + RemoveSOEntries(); >> + >> + void >> + UpdateBaseAddrIfNecessary(SOEntry &entry, std::string const &file_path); >> >> bool >> SOEntryIsMainExecutable(const SOEntry &entry); >> >> Modified: lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp?rev=257502&r1=257501&r2=257502&view=diff >> ============================================================================== >> --- lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp >> (original) >> +++ lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp Tue >> Jan 12 13:02:41 2016 >> @@ -173,118 +173,6 @@ namespace { >> >> } // anonymous namespace end >> >> -class ProcessGDBRemote::GDBLoadedModuleInfoList >> -{ >> -public: >> - >> - class LoadedModuleInfo >> - { >> - public: >> - >> - enum e_data_point >> - { >> - e_has_name = 0, >> - e_has_base , >> - e_has_dynamic , >> - e_has_link_map , >> - e_num >> - }; >> - >> - LoadedModuleInfo () >> - { >> - for (uint32_t i = 0; i < e_num; ++i) >> - m_has[i] = false; >> - } >> - >> - void set_name (const std::string & name) >> - { >> - m_name = name; >> - m_has[e_has_name] = true; >> - } >> - bool get_name (std::string & out) const >> - { >> - out = m_name; >> - return m_has[e_has_name]; >> - } >> - >> - void set_base (const lldb::addr_t base) >> - { >> - m_base = base; >> - m_has[e_has_base] = true; >> - } >> - bool get_base (lldb::addr_t & out) const >> - { >> - out = m_base; >> - return m_has[e_has_base]; >> - } >> - >> - void set_base_is_offset (bool is_offset) >> - { >> - m_base_is_offset = is_offset; >> - } >> - bool get_base_is_offset(bool & out) const >> - { >> - out = m_base_is_offset; >> - return m_has[e_has_base]; >> - } >> - >> - void set_link_map (const lldb::addr_t addr) >> - { >> - m_link_map = addr; >> - m_has[e_has_link_map] = true; >> - } >> - bool get_link_map (lldb::addr_t & out) const >> - { >> - out = m_link_map; >> - return m_has[e_has_link_map]; >> - } >> - >> - void set_dynamic (const lldb::addr_t addr) >> - { >> - m_dynamic = addr; >> - m_has[e_has_dynamic] = true; >> - } >> - bool get_dynamic (lldb::addr_t & out) const >> - { >> - out = m_dynamic; >> - return m_has[e_has_dynamic]; >> - } >> - >> - bool has_info (e_data_point datum) >> - { >> - assert (datum < e_num); >> - return m_has[datum]; >> - } >> - >> - protected: >> - >> - bool m_has[e_num]; >> - std::string m_name; >> - lldb::addr_t m_link_map; >> - lldb::addr_t m_base; >> - bool m_base_is_offset; >> - lldb::addr_t m_dynamic; >> - }; >> - >> - GDBLoadedModuleInfoList () >> - : m_list () >> - , m_link_map (LLDB_INVALID_ADDRESS) >> - {} >> - >> - void add (const LoadedModuleInfo & mod) >> - { >> - m_list.push_back (mod); >> - } >> - >> - void clear () >> - { >> - m_list.clear (); >> - } >> - >> - std::vector<LoadedModuleInfo> m_list; >> - lldb::addr_t m_link_map; >> -}; >> - >> // TODO Randomly assigning a port is unsafe. We should get an unused >> // ephemeral port from the kernel and make sure we reserve it before passing >> // it to debugserver. >> @@ -3090,7 +2978,7 @@ ProcessGDBRemote::GetImageInfoAddress() >> // the loaded module list can also provides a link map address >> if (addr == LLDB_INVALID_ADDRESS) >> { >> - GDBLoadedModuleInfoList list; >> + LoadedModuleInfoList list; >> if (GetLoadedModuleList (list).Success()) >> addr = list.m_link_map; >> } >> @@ -4742,7 +4630,7 @@ ProcessGDBRemote::GetGDBServerRegisterIn >> } >> >> Error >> -ProcessGDBRemote::GetLoadedModuleList (GDBLoadedModuleInfoList & list) >> +ProcessGDBRemote::GetLoadedModuleList (LoadedModuleInfoList & list) >> { >> // Make sure LLDB has an XML parser it can use first >> if (!XMLDocument::XMLEnabled()) >> @@ -4786,7 +4674,7 @@ ProcessGDBRemote::GetLoadedModuleList (G >> >> root_element.ForEachChildElementWithName("library", [log, >> &list](const XMLNode &library) -> bool { >> >> - GDBLoadedModuleInfoList::LoadedModuleInfo module; >> + LoadedModuleInfoList::LoadedModuleInfo module; >> >> library.ForEachAttribute([log, &module](const llvm::StringRef >> &name, const llvm::StringRef &value) -> bool { >> >> @@ -4856,7 +4744,7 @@ ProcessGDBRemote::GetLoadedModuleList (G >> return Error(); >> >> root_element.ForEachChildElementWithName("library", [log, >> &list](const XMLNode &library) -> bool { >> - GDBLoadedModuleInfoList::LoadedModuleInfo module; >> + LoadedModuleInfoList::LoadedModuleInfo module; >> >> llvm::StringRef name = library.GetAttributeValue("name"); >> module.set_name(name.str()); >> @@ -4918,19 +4806,18 @@ ProcessGDBRemote::LoadModuleAtAddress (c >> } >> >> size_t >> -ProcessGDBRemote::LoadModules () >> +ProcessGDBRemote::LoadModules (LoadedModuleInfoList &module_list) >> { >> using lldb_private::process_gdb_remote::ProcessGDBRemote; >> >> // request a list of loaded libraries from GDBServer >> - GDBLoadedModuleInfoList module_list; >> if (GetLoadedModuleList (module_list).Fail()) >> return 0; >> >> // get a list of all the modules >> ModuleList new_modules; >> >> - for (GDBLoadedModuleInfoList::LoadedModuleInfo & modInfo : >> module_list.m_list) >> + for (LoadedModuleInfoList::LoadedModuleInfo & modInfo : >> module_list.m_list) >> { >> std::string mod_name; >> lldb::addr_t mod_base; >> @@ -4981,6 +4868,14 @@ ProcessGDBRemote::LoadModules () >> } >> >> return new_modules.GetSize(); >> + >> +} >> + >> +size_t >> +ProcessGDBRemote::LoadModules () >> +{ >> + LoadedModuleInfoList module_list; >> + return LoadModules (module_list); >> } >> >> Error >> >> Modified: lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h?rev=257502&r1=257501&r2=257502&view=diff >> ============================================================================== >> --- lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h >> (original) >> +++ lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h Tue Jan >> 12 13:02:41 2016 >> @@ -27,6 +27,7 @@ >> #include "lldb/Core/StringList.h" >> #include "lldb/Core/StructuredData.h" >> #include "lldb/Core/ThreadSafeValue.h" >> +#include "lldb/Core/LoadedModuleInfoList.h" >> #include "lldb/Host/HostThread.h" >> #include "lldb/lldb-private-forward.h" >> #include "lldb/Utility/StringExtractor.h" >> @@ -245,6 +246,9 @@ public: >> uint32_t &update) override; >> >> size_t >> + LoadModules(LoadedModuleInfoList &module_list) override; >> + >> + size_t >> LoadModules() override; >> >> Error >> @@ -261,8 +265,6 @@ protected: >> friend class GDBRemoteCommunicationClient; >> friend class GDBRemoteRegisterContext; >> >> - class GDBLoadedModuleInfoList; >> - >> //------------------------------------------------------------------ >> /// Broadcaster event bits definitions. >> //------------------------------------------------------------------ >> @@ -463,7 +465,7 @@ protected: >> >> // Query remote GDBServer for a detailed loaded library list >> Error >> - GetLoadedModuleList (GDBLoadedModuleInfoList &); >> + GetLoadedModuleList (LoadedModuleInfoList &); >> >> lldb::ModuleSP >> LoadModuleAtAddress (const FileSpec &file, lldb::addr_t base_addr, bool >> value_is_offset); >> >> >> _______________________________________________ >> lldb-commits mailing list >> lldb-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
-- Stephane Sezer _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits