From 2352eecfc9e84c4429aa057fe0f38cc6724fc407 Mon Sep 17 00:00:00 2001 From: Bar Soloveychik Date: Mon, 15 Sep 2025 17:12:18 -0700 Subject: [PATCH 1/5] GPUActions are ignored on first stop-reply packet fix --- .../lldb/Utility/StringExtractorGDBRemote.h | 2 ++ .../gdb-server/PlatformRemoteGDBServer.cpp | 4 +++- .../GDBRemoteCommunicationClient.cpp | 5 ++-- .../gdb-remote/GDBRemoteCommunicationClient.h | 3 ++- .../Process/gdb-remote/ProcessGDBRemote.cpp | 6 ++--- .../Utility/StringExtractorGDBRemote.cpp | 10 ++++++++ .../gpu/mock/basic/TestBasicMockGpuPlugin.py | 13 ++++++++++ lldb/test/API/gpu/mock/basic/hello_world.cpp | 2 ++ .../MockGPU/LLDBServerPluginMockGPU.cpp | 24 +++++++++++++++---- 9 files changed, 56 insertions(+), 13 deletions(-) diff --git a/lldb/include/lldb/Utility/StringExtractorGDBRemote.h b/lldb/include/lldb/Utility/StringExtractorGDBRemote.h index 3dc43c5407cd4..4e847c0a29eef 100644 --- a/lldb/include/lldb/Utility/StringExtractorGDBRemote.h +++ b/lldb/include/lldb/Utility/StringExtractorGDBRemote.h @@ -207,6 +207,8 @@ class StringExtractorGDBRemote : public StringExtractor { bool IsErrorResponse() const; + bool IsStopReply() const; + // Returns zero if the packet isn't a EXX packet where XX are two hex digits. // Otherwise the error encoded in XX is returned. uint8_t GetError(); diff --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp index 4a77423bac526..6483cb1c8755c 100644 --- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp +++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp @@ -371,7 +371,9 @@ Status PlatformRemoteGDBServer::LaunchProcess(ProcessLaunchInfo &launch_info) { Args args = launch_info.GetArguments(); if (FileSpec exe_file = launch_info.GetExecutableFile()) args.ReplaceArgumentAtIndex(0, exe_file.GetPath(false)); - if (llvm::Error err = m_gdb_client_up->LaunchProcess(args)) { + StringExtractorGDBRemote launch_response; + if (llvm::Error err = + m_gdb_client_up->LaunchProcess(args, launch_response)) { error = Status::FromErrorStringWithFormatv( "Cannot launch '{0}': {1}", args.GetArgumentAtIndex(0), llvm::fmt_consume(std::move(err))); diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp index 5452726a0a1a1..f60244e26e2c2 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp @@ -916,7 +916,8 @@ lldb::pid_t GDBRemoteCommunicationClient::GetCurrentProcessID(bool allow_lazy) { return LLDB_INVALID_PROCESS_ID; } -llvm::Error GDBRemoteCommunicationClient::LaunchProcess(const Args &args) { +llvm::Error GDBRemoteCommunicationClient::LaunchProcess( + const Args &args, StringExtractorGDBRemote &response) { if (!args.GetArgumentAtIndex(0)) return llvm::createStringError(llvm::inconvertibleErrorCode(), "Nothing to launch"); @@ -929,7 +930,6 @@ llvm::Error GDBRemoteCommunicationClient::LaunchProcess(const Args &args) { packet.PutStringAsRawHex8(arg.ref()); } - StringExtractorGDBRemote response; if (SendPacketAndWaitForResponse(packet.GetString(), response) != PacketResult::Success) return llvm::createStringError(llvm::inconvertibleErrorCode(), @@ -957,7 +957,6 @@ llvm::Error GDBRemoteCommunicationClient::LaunchProcess(const Args &args) { packet.PutStringAsRawHex8(arg.value().ref()); } - StringExtractorGDBRemote response; if (SendPacketAndWaitForResponse(packet.GetString(), response) != PacketResult::Success) { return llvm::createStringError(llvm::inconvertibleErrorCode(), diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h index 5625185d28801..5d1f5aae04fb4 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h @@ -96,7 +96,8 @@ class GDBRemoteCommunicationClient : public GDBRemoteClientBase { /// /// \param[in] args /// A list of program arguments. The first entry is the program being run. - llvm::Error LaunchProcess(const Args &args); + llvm::Error LaunchProcess(const Args &args, + StringExtractorGDBRemote &response); /// Sends a "QEnvironment:NAME=VALUE" packet that will build up the /// environment that will get used when launching an application diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index a8f30ffbc0ed0..4bb50a46bcf22 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -795,6 +795,7 @@ Status ProcessGDBRemote::DoLaunch(lldb_private::Module *exe_module, // Send the environment and the program + arguments after we connect m_gdb_comm.SendEnvironment(launch_info.GetEnvironment()); + StringExtractorGDBRemote response; { // Scope for the scoped timeout object GDBRemoteCommunication::ScopedTimeout timeout(m_gdb_comm, @@ -805,7 +806,7 @@ Status ProcessGDBRemote::DoLaunch(lldb_private::Module *exe_module, Args args = launch_info.GetArguments(); if (FileSpec exe_file = launch_info.GetExecutableFile()) args.ReplaceArgumentAtIndex(0, exe_file.GetPath(false)); - if (llvm::Error err = m_gdb_comm.LaunchProcess(args)) { + if (llvm::Error err = m_gdb_comm.LaunchProcess(args, response)) { error = Status::FromErrorStringWithFormatv( "Cannot launch '{0}': {1}", args.GetArgumentAtIndex(0), llvm::fmt_consume(std::move(err))); @@ -820,8 +821,7 @@ Status ProcessGDBRemote::DoLaunch(lldb_private::Module *exe_module, return error; } - StringExtractorGDBRemote response; - if (m_gdb_comm.GetStopReply(response)) { + if (response.IsStopReply() || m_gdb_comm.GetStopReply(response)) { SetLastStopPacket(response); const ArchSpec &process_arch = m_gdb_comm.GetProcessArchitecture(); diff --git a/lldb/source/Utility/StringExtractorGDBRemote.cpp b/lldb/source/Utility/StringExtractorGDBRemote.cpp index dfdf08fa19a1e..7db4edea2a596 100644 --- a/lldb/source/Utility/StringExtractorGDBRemote.cpp +++ b/lldb/source/Utility/StringExtractorGDBRemote.cpp @@ -496,6 +496,16 @@ bool StringExtractorGDBRemote::IsErrorResponse() const { isxdigit(m_packet[2]); } +bool StringExtractorGDBRemote::IsStopReply() const { + if (!IsNormalResponse()) + return false; + + char first_char = m_packet.empty() ? '\0' : m_packet[0]; + return first_char == 'T' || first_char == 'S' || first_char == 'W' || + first_char == 'X' || first_char == 'w' || first_char == 'N' || + first_char == 'O' || first_char == 'F'; +} + uint8_t StringExtractorGDBRemote::GetError() { if (GetResponseType() == eError) { SetFilePos(1); diff --git a/lldb/test/API/gpu/mock/basic/TestBasicMockGpuPlugin.py b/lldb/test/API/gpu/mock/basic/TestBasicMockGpuPlugin.py index 525bd0e2d8f46..47fb9d56ef34b 100644 --- a/lldb/test/API/gpu/mock/basic/TestBasicMockGpuPlugin.py +++ b/lldb/test/API/gpu/mock/basic/TestBasicMockGpuPlugin.py @@ -151,3 +151,16 @@ def test_mock_gpu_target_switch(self): self.runCmd("target switch cpu") self.assertTrue(self.dbg.GetSelectedTarget() == self.cpu_target) + def test_mock_gpu_first_breakpoint_hit(self): + """ + Test that we can hit the first breakpoint on the cpu target, + Making sure we handle the GPUActions on the first stop-reply. + """ + lldbutil.continue_to_source_breakpoint( + self, self.cpu_process, CPU_AFTER_BREAKPOINT_COMMENT, self.source_spec + ) + self.select_cpu() + self.expect( + "breakpoint list --internal", + patterns=[r"name = 'gpu_first_stop'.*hit count = 1"], + ) diff --git a/lldb/test/API/gpu/mock/basic/hello_world.cpp b/lldb/test/API/gpu/mock/basic/hello_world.cpp index a6a7808160e80..b2c1da001dd7c 100644 --- a/lldb/test/API/gpu/mock/basic/hello_world.cpp +++ b/lldb/test/API/gpu/mock/basic/hello_world.cpp @@ -7,6 +7,7 @@ struct ShlibInfo { ShlibInfo g_shlib_list = {"/tmp/a.out", nullptr}; +int gpu_first_stop() { return puts(__FUNCTION__); } int gpu_initialize() { return puts(__FUNCTION__); } int gpu_shlib_load() { return puts(__FUNCTION__); } int gpu_third_stop() { return puts(__FUNCTION__); } @@ -16,6 +17,7 @@ int gpu_kernel() { } int main(int argc, const char **argv) { + gpu_first_stop(); // CPU BREAKPOINT - BEFORE INITIALIZE gpu_initialize(); // CPU BREAKPOINT - AFTER INITIALIZE diff --git a/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp b/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp index 4e517408bdff4..4ae60da50df7d 100644 --- a/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp +++ b/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp @@ -25,11 +25,12 @@ using namespace lldb_private::lldb_server; using namespace lldb_private::process_gdb_remote; enum { - BreakpointIDInitialize = 1, - BreakpointIDShlibLoad = 2, - BreakpointIDThirdStop = 3, - BreakpointIDResumeAndWaitForResume = 4, - BreakpointIDWaitForStop = 5 + BreakpointIDFirstStop = 1, + BreakpointIDInitialize = 2, + BreakpointIDShlibLoad = 3, + BreakpointIDThirdStop = 4, + BreakpointIDResumeAndWaitForResume = 5, + BreakpointIDWaitForStop = 6 }; LLDBServerPluginMockGPU::LLDBServerPluginMockGPU( @@ -152,6 +153,19 @@ std::optional LLDBServerPluginMockGPU::CreateConnection std::optional LLDBServerPluginMockGPU::NativeProcessIsStopping() { NativeProcessProtocol *native_process = m_native_process.GetCurrentProcess(); + static bool first_time = true; + Log *log = GetLog(GDBRLog::Plugin); + LLDB_LOGF(log, "%d stop id ", native_process->GetStopID()); + if (first_time) { + first_time = false; + GPUActions actions; + actions.plugin_name = GetPluginName(); + GPUBreakpointInfo bp; + bp.identifier = BreakpointIDThirdStop; + bp.name_info = {"a.out", "gpu_first_stop"}; + actions.breakpoints.emplace_back(std::move(bp)); + return actions; + } // Show that we can return a valid GPUActions object from a stop event. if (native_process->GetStopID() == 3) { GPUActions actions = GetNewGPUAction(); From 19c3bb43b3804eda4e22e0905cafe509af4c9e9a Mon Sep 17 00:00:00 2001 From: Bar Soloveychik Date: Mon, 29 Sep 2025 16:59:07 -0700 Subject: [PATCH 2/5] fixed comments --- .../lldb/Utility/StringExtractorGDBRemote.h | 11 +++++++++++ .../gdb-server/PlatformRemoteGDBServer.cpp | 7 ++++--- .../GDBRemoteCommunicationClient.cpp | 11 +++++++---- .../gdb-remote/GDBRemoteCommunicationClient.h | 3 +-- .../Process/gdb-remote/ProcessGDBRemote.cpp | 11 +++++++---- .../Utility/StringExtractorGDBRemote.cpp | 19 +++++++++++++++---- 6 files changed, 45 insertions(+), 17 deletions(-) diff --git a/lldb/include/lldb/Utility/StringExtractorGDBRemote.h b/lldb/include/lldb/Utility/StringExtractorGDBRemote.h index 4e847c0a29eef..e000f794bf704 100644 --- a/lldb/include/lldb/Utility/StringExtractorGDBRemote.h +++ b/lldb/include/lldb/Utility/StringExtractorGDBRemote.h @@ -207,7 +207,18 @@ class StringExtractorGDBRemote : public StringExtractor { bool IsErrorResponse() const; + enum StopReplyMask : uint32_t { + Signal = (1u << 0), + Exited = (1u << 1), + Terminated = (1u << 2), + Output = (1u << 3), + NoResumed = (1u << 4), + Syscall = (1u << 5), + Any = ((Syscall << 1) - 1u), + }; + bool IsStopReply() const; + bool IsStopReply(uint32_t mask) const; // Returns zero if the packet isn't a EXX packet where XX are two hex digits. // Otherwise the error encoded in XX is returned. diff --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp index 6483cb1c8755c..1e030fad3b02d 100644 --- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp +++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp @@ -372,11 +372,12 @@ Status PlatformRemoteGDBServer::LaunchProcess(ProcessLaunchInfo &launch_info) { if (FileSpec exe_file = launch_info.GetExecutableFile()) args.ReplaceArgumentAtIndex(0, exe_file.GetPath(false)); StringExtractorGDBRemote launch_response; - if (llvm::Error err = - m_gdb_client_up->LaunchProcess(args, launch_response)) { + llvm::Expected response = + m_gdb_client_up->LaunchProcess(args); + if (!response) { error = Status::FromErrorStringWithFormatv( "Cannot launch '{0}': {1}", args.GetArgumentAtIndex(0), - llvm::fmt_consume(std::move(err))); + llvm::fmt_consume(response.takeError())); return error; } } diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp index f60244e26e2c2..0685cd14b5f6a 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp @@ -916,11 +916,14 @@ lldb::pid_t GDBRemoteCommunicationClient::GetCurrentProcessID(bool allow_lazy) { return LLDB_INVALID_PROCESS_ID; } -llvm::Error GDBRemoteCommunicationClient::LaunchProcess( - const Args &args, StringExtractorGDBRemote &response) { +llvm::Expected +GDBRemoteCommunicationClient::LaunchProcess(const Args &args) { if (!args.GetArgumentAtIndex(0)) return llvm::createStringError(llvm::inconvertibleErrorCode(), "Nothing to launch"); + + StringExtractorGDBRemote response; + // try vRun first if (m_supports_vRun) { StreamString packet; @@ -942,7 +945,7 @@ llvm::Error GDBRemoteCommunicationClient::LaunchProcess( // FIXME: right now we just discard the packet and LLDB queries // for stop reason again if (!response.IsUnsupportedResponse()) - return llvm::Error::success(); + return response; m_supports_vRun = false; } @@ -971,7 +974,7 @@ llvm::Error GDBRemoteCommunicationClient::LaunchProcess( "Sending qLaunchSuccess packet failed"); } if (response.IsOKResponse()) - return llvm::Error::success(); + return response; if (response.GetChar() == 'E') { return llvm::createStringError(llvm::inconvertibleErrorCode(), response.GetStringRef().substr(1)); diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h index 5d1f5aae04fb4..9ee439fc417af 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h @@ -96,8 +96,7 @@ class GDBRemoteCommunicationClient : public GDBRemoteClientBase { /// /// \param[in] args /// A list of program arguments. The first entry is the program being run. - llvm::Error LaunchProcess(const Args &args, - StringExtractorGDBRemote &response); + llvm::Expected LaunchProcess(const Args &args); /// Sends a "QEnvironment:NAME=VALUE" packet that will build up the /// environment that will get used when launching an application diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index 4bb50a46bcf22..2f496f370cc82 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -794,7 +794,6 @@ Status ProcessGDBRemote::DoLaunch(lldb_private::Module *exe_module, // Send the environment and the program + arguments after we connect m_gdb_comm.SendEnvironment(launch_info.GetEnvironment()); - StringExtractorGDBRemote response; { // Scope for the scoped timeout object @@ -806,11 +805,14 @@ Status ProcessGDBRemote::DoLaunch(lldb_private::Module *exe_module, Args args = launch_info.GetArguments(); if (FileSpec exe_file = launch_info.GetExecutableFile()) args.ReplaceArgumentAtIndex(0, exe_file.GetPath(false)); - if (llvm::Error err = m_gdb_comm.LaunchProcess(args, response)) { + llvm::Expected result = + m_gdb_comm.LaunchProcess(args); + if (!result) { error = Status::FromErrorStringWithFormatv( "Cannot launch '{0}': {1}", args.GetArgumentAtIndex(0), - llvm::fmt_consume(std::move(err))); + llvm::fmt_consume(result.takeError())); } else { + response = std::move(*result); SetID(m_gdb_comm.GetCurrentProcessID()); } } @@ -821,7 +823,8 @@ Status ProcessGDBRemote::DoLaunch(lldb_private::Module *exe_module, return error; } - if (response.IsStopReply() || m_gdb_comm.GetStopReply(response)) { + if (response.IsStopReply(StringExtractorGDBRemote::Signal) || + m_gdb_comm.GetStopReply(response)) { SetLastStopPacket(response); const ArchSpec &process_arch = m_gdb_comm.GetProcessArchitecture(); diff --git a/lldb/source/Utility/StringExtractorGDBRemote.cpp b/lldb/source/Utility/StringExtractorGDBRemote.cpp index 7db4edea2a596..6971b9e719e6f 100644 --- a/lldb/source/Utility/StringExtractorGDBRemote.cpp +++ b/lldb/source/Utility/StringExtractorGDBRemote.cpp @@ -496,14 +496,25 @@ bool StringExtractorGDBRemote::IsErrorResponse() const { isxdigit(m_packet[2]); } -bool StringExtractorGDBRemote::IsStopReply() const { +bool StringExtractorGDBRemote::IsStopReply( + uint32_t mask = StopReplyMask::Any) const { if (!IsNormalResponse()) return false; char first_char = m_packet.empty() ? '\0' : m_packet[0]; - return first_char == 'T' || first_char == 'S' || first_char == 'W' || - first_char == 'X' || first_char == 'w' || first_char == 'N' || - first_char == 'O' || first_char == 'F'; + if (mask & Signal && (first_char == 'T' || first_char == 'S')) + return true; + if (mask & Exited && (first_char == 'w' || first_char == 'W')) + return true; + if (mask & Terminated && first_char == 'X') + return true; + if (mask & Output && first_char == 'O') + return true; + if (mask & NoResumed && first_char == 'N') + return true; + if (mask & Syscall && first_char == 'F') + return true; + return false; } uint8_t StringExtractorGDBRemote::GetError() { From 068f1fa074b1a89326e04e38328a46c4fa6000a7 Mon Sep 17 00:00:00 2001 From: Bar Soloveychik Date: Wed, 8 Oct 2025 14:47:03 -0700 Subject: [PATCH 3/5] fixed test --- lldb/test/API/gpu/mock/basic/TestBasicMockGpuPlugin.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lldb/test/API/gpu/mock/basic/TestBasicMockGpuPlugin.py b/lldb/test/API/gpu/mock/basic/TestBasicMockGpuPlugin.py index 47fb9d56ef34b..51852917e5a4c 100644 --- a/lldb/test/API/gpu/mock/basic/TestBasicMockGpuPlugin.py +++ b/lldb/test/API/gpu/mock/basic/TestBasicMockGpuPlugin.py @@ -156,9 +156,8 @@ def test_mock_gpu_first_breakpoint_hit(self): Test that we can hit the first breakpoint on the cpu target, Making sure we handle the GPUActions on the first stop-reply. """ - lldbutil.continue_to_source_breakpoint( - self, self.cpu_process, CPU_AFTER_BREAKPOINT_COMMENT, self.source_spec - ) + self.common_setup() + self.select_cpu() self.expect( "breakpoint list --internal", From bc65e248a3783f594ce0e4842d7544eefa9275a6 Mon Sep 17 00:00:00 2001 From: Bar Soloveychik Date: Tue, 14 Oct 2025 15:28:22 -0700 Subject: [PATCH 4/5] fixed Jeffrey comment --- .../lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp b/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp index 4ae60da50df7d..4714c7ac14adc 100644 --- a/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp +++ b/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp @@ -161,7 +161,7 @@ std::optional LLDBServerPluginMockGPU::NativeProcessIsStopping() { GPUActions actions; actions.plugin_name = GetPluginName(); GPUBreakpointInfo bp; - bp.identifier = BreakpointIDThirdStop; + bp.identifier = BreakpointIDFirstStop; bp.name_info = {"a.out", "gpu_first_stop"}; actions.breakpoints.emplace_back(std::move(bp)); return actions; From f1293d0f8af61e709ec2eabaff572f3a8b4ac112 Mon Sep 17 00:00:00 2001 From: Bar Soloveychik Date: Tue, 14 Oct 2025 16:58:07 -0700 Subject: [PATCH 5/5] added correct GPUActions identifer --- .../Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp | 1 - .../lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp index 1e030fad3b02d..f902e28ef217b 100644 --- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp +++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp @@ -371,7 +371,6 @@ Status PlatformRemoteGDBServer::LaunchProcess(ProcessLaunchInfo &launch_info) { Args args = launch_info.GetArguments(); if (FileSpec exe_file = launch_info.GetExecutableFile()) args.ReplaceArgumentAtIndex(0, exe_file.GetPath(false)); - StringExtractorGDBRemote launch_response; llvm::Expected response = m_gdb_client_up->LaunchProcess(args); if (!response) { diff --git a/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp b/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp index 4714c7ac14adc..d157b3deecf27 100644 --- a/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp +++ b/lldb/tools/lldb-server/Plugins/MockGPU/LLDBServerPluginMockGPU.cpp @@ -158,8 +158,7 @@ std::optional LLDBServerPluginMockGPU::NativeProcessIsStopping() { LLDB_LOGF(log, "%d stop id ", native_process->GetStopID()); if (first_time) { first_time = false; - GPUActions actions; - actions.plugin_name = GetPluginName(); + GPUActions actions = GetNewGPUAction(); GPUBreakpointInfo bp; bp.identifier = BreakpointIDFirstStop; bp.name_info = {"a.out", "gpu_first_stop"};