Index: include/lldb/Target/Process.h =================================================================== --- include/lldb/Target/Process.h +++ include/lldb/Target/Process.h @@ -67,6 +67,9 @@ uint64_t GetMemoryCacheLineSize () const; + lldb::OptionValueSP + GetMemoryCacheLineSizeOption (); + Args GetExtraStartupCommands () const; Index: source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.h =================================================================== --- source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.h +++ source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.h @@ -36,10 +36,25 @@ Error DisconnectRemote () override; + lldb::ProcessSP + DebugProcess(ProcessLaunchInfo &launch_info, + Debugger &debugger, + Target *target, // Can be NULL, if NULL create a new target, else use existing one + Error &error) override; + + lldb::ProcessSP + Attach(ProcessAttachInfo &attach_info, + Debugger &debugger, + Target *target, // Can be NULL, if NULL create a new target, else use existing one + Error &error) override; + protected: std::string m_device_id; std::map m_port_forwards; + void + AdjustProcessProperties(const lldb::ProcessSP &process_sp); + uint16_t LaunchGDBserverAndGetPort (lldb::pid_t &pid) override; Index: source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp =================================================================== --- source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp +++ source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp @@ -11,6 +11,7 @@ #include "lldb/Core/Error.h" #include "lldb/Core/Log.h" #include "lldb/Host/common/TCPSocket.h" +#include "lldb/Target/ExecutionContext.h" #include "AdbClient.h" #include "PlatformAndroidRemoteGDBServer.h" #include "Utility/UriParser.h" @@ -22,6 +23,7 @@ using namespace platform_android; static const lldb::pid_t g_remote_platform_pid = 0; // Alias for the process id of lldb-platform +static const unsigned int g_android_default_cache_size = 2048; // Fits inside 4k adb packet. static Error ForwardPortWithAdb (const uint16_t local_port, const uint16_t remote_port, std::string& device_id) @@ -136,6 +138,40 @@ return PlatformRemoteGDBServer::DisconnectRemote (); } +lldb::ProcessSP +PlatformAndroidRemoteGDBServer::DebugProcess(ProcessLaunchInfo &launch_info, + Debugger &debugger, + Target *target, // Can be NULL, if NULL create a new target, else use existing one + Error &error) +{ + lldb::ProcessSP process_sp = PlatformRemoteGDBServer::DebugProcess(launch_info, debugger, target, error); + AdjustProcessProperties(process_sp); + return process_sp; +} + +lldb::ProcessSP +PlatformAndroidRemoteGDBServer::Attach(ProcessAttachInfo &attach_info, + Debugger &debugger, + Target *target, // Can be NULL, if NULL create a new target, else use existing one + Error &error) +{ + lldb::ProcessSP process_sp = PlatformRemoteGDBServer::Attach(attach_info, debugger, target, error); + AdjustProcessProperties(process_sp); + return process_sp; +} + +void +PlatformAndroidRemoteGDBServer::AdjustProcessProperties(const lldb::ProcessSP &process_sp) +{ + if (! process_sp) + return; + + lldb::OptionValueSP value_sp = process_sp->GetMemoryCacheLineSizeOption(); + + if (value_sp && ! value_sp->OptionWasSet()) + value_sp->SetUInt64Value(g_android_default_cache_size); +} + void PlatformAndroidRemoteGDBServer::DeleteForwardPort (lldb::pid_t pid) { Index: source/Target/Process.cpp =================================================================== --- source/Target/Process.cpp +++ source/Target/Process.cpp @@ -180,6 +180,14 @@ return m_collection_sp->GetPropertyAtIndexAsUInt64 (NULL, idx, g_properties[idx].default_uint_value); } +lldb::OptionValueSP +ProcessProperties::GetMemoryCacheLineSizeOption() +{ + const uint32_t idx = ePropertyMemCacheLineSize; + lldb_private::ExecutionContext exe_ctx(m_process); + return m_collection_sp->GetPropertyAtIndex(&exe_ctx, true, idx)->GetValue(); +} + Args ProcessProperties::GetExtraStartupCommands () const {