https://github.com/Timmmm updated 
https://github.com/llvm/llvm-project/pull/204788

>From de38d60e6684c2927e62144e62228a43f9236228 Mon Sep 17 00:00:00 2001
From: Tim Hutt <[email protected]>
Date: Mon, 18 May 2026 10:22:54 +0100
Subject: [PATCH] [lldb] Ignore notification packets

The gdb-protocol spec says

> Recipients should silently ignore corrupted notifications and notifications 
> they do not understand.

This changes `WaitForPacketNoLock` so that it ignores all notifications.

An example of a notification that causes issues without this change is that 
OpenOCD sends `%ookeepalive:00` notifications during memory accesses.
---
 .../gdb-remote/GDBRemoteCommunication.cpp     | 22 +++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
index 04f486882e2c2..21da81d1136ee 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
@@ -242,8 +242,15 @@ 
GDBRemoteCommunication::WaitForPacketNoLock(StringExtractorGDBRemote &packet,
   Log *log = GetLog(GDBRLog::Packets);
 
   // Check for a packet from our cache first without trying any reading...
-  if (CheckForPacket(nullptr, 0, packet) != PacketType::Invalid)
-    return PacketResult::Success;
+  switch (CheckForPacket(nullptr, 0, packet)) {
+    case PacketType::Standard:
+      return PacketResult::Success;
+    case PacketType::Invalid:
+      break;
+    case PacketType::Notify:
+      // No notifications are currently supported so they should be ignored.
+      break;
+  }
 
   bool timed_out = false;
   bool disconnected = false;
@@ -258,8 +265,15 @@ 
GDBRemoteCommunication::WaitForPacketNoLock(StringExtractorGDBRemote &packet,
                      error, bytes_read);
 
     if (bytes_read > 0) {
-      if (CheckForPacket(buffer, bytes_read, packet) != PacketType::Invalid)
-        return PacketResult::Success;
+      switch (CheckForPacket(buffer, bytes_read, packet)) {
+        case PacketType::Standard:
+          return PacketResult::Success;
+        case PacketType::Invalid:
+          break;
+        case PacketType::Notify:
+          // No notifications are currently supported so they should be 
ignored.
+          break;
+      }
     } else {
       switch (status) {
       case eConnectionStatusTimedOut:

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to