[Lldb-commits] [lldb] [LLDB] Serve unknown type symbols through `qSymbol` (PR #200134)

via lldb-commits lldb-commits at lists.llvm.org
Thu May 28 01:38:12 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Aurore Poirier (aurore-poirier)

<details>
<summary>Changes</summary>

`358cf1ea302eb` introduced a divergence between GDB and LLDB where LLDB does not serve symbols of unknown type through GDB protocol command `qSymbol`. Per commit description, this is an expected behavior on MachO-based platforms, but it is not on ELF-based platforms, where LLDB should follow GDB. The changes introduced by said commit are now gated behind an architecture check.

---
Full diff: https://github.com/llvm/llvm-project/pull/200134.diff


1 Files Affected:

- (modified) lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (+49-33) 


``````````diff
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
index 8df7936786b04..116ececac49b0 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -15,6 +15,7 @@
 #include <optional>
 #include <sstream>
 
+#include "lldb/Core/Module.h"
 #include "lldb/Core/ModuleSpec.h"
 #include "lldb/Host/HostInfo.h"
 #include "lldb/Host/SafeMachO.h"
@@ -40,6 +41,7 @@
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/Config/llvm-config.h" // for LLVM_ENABLE_ZLIB
 #include "llvm/Support/JSON.h"
+#include "llvm/TargetParser/Triple.h"
 
 #if HAVE_LIBCOMPRESSION
 #include <compression.h>
@@ -4156,41 +4158,55 @@ void GDBRemoteCommunicationClient::ServeSymbolLookups(
                 if (symbol_load_addr != LLDB_INVALID_ADDRESS)
                   break;
                 if (sc.symbol) {
-                  switch (sc.symbol->GetType()) {
-                  case eSymbolTypeInvalid:
-                  case eSymbolTypeAbsolute:
-                  case eSymbolTypeUndefined:
-                  case eSymbolTypeSourceFile:
-                  case eSymbolTypeHeaderFile:
-                  case eSymbolTypeObjectFile:
-                  case eSymbolTypeCommonBlock:
-                  case eSymbolTypeBlock:
-                  case eSymbolTypeLocal:
-                  case eSymbolTypeParam:
-                  case eSymbolTypeVariable:
-                  case eSymbolTypeVariableType:
-                  case eSymbolTypeLineEntry:
-                  case eSymbolTypeLineHeader:
-                  case eSymbolTypeScopeBegin:
-                  case eSymbolTypeScopeEnd:
-                  case eSymbolTypeAdditional:
-                  case eSymbolTypeCompiler:
-                  case eSymbolTypeInstrumentation:
-                  case eSymbolTypeTrampoline:
-                    break;
-
-                  case eSymbolTypeCode:
-                  case eSymbolTypeResolver:
-                  case eSymbolTypeData:
-                  case eSymbolTypeRuntime:
-                  case eSymbolTypeException:
-                  case eSymbolTypeObjCClass:
-                  case eSymbolTypeObjCMetaClass:
-                  case eSymbolTypeObjCIVar:
-                  case eSymbolTypeReExported:
+                  if (sc.module_sp->GetArchitecture()
+                          .GetTriple()
+                          .getObjectFormat() ==
+                      llvm::Triple::ObjectFormatType::MachO) {
+                    switch (sc.symbol->GetType()) {
+                    case eSymbolTypeInvalid:
+                    case eSymbolTypeAbsolute:
+                    case eSymbolTypeUndefined:
+                    case eSymbolTypeSourceFile:
+                    case eSymbolTypeHeaderFile:
+                    case eSymbolTypeObjectFile:
+                    case eSymbolTypeCommonBlock:
+                    case eSymbolTypeBlock:
+                    case eSymbolTypeLocal:
+                    case eSymbolTypeParam:
+                    case eSymbolTypeVariable:
+                    case eSymbolTypeVariableType:
+                    case eSymbolTypeLineEntry:
+                    case eSymbolTypeLineHeader:
+                    case eSymbolTypeScopeBegin:
+                    case eSymbolTypeScopeEnd:
+                    case eSymbolTypeAdditional:
+                    case eSymbolTypeCompiler:
+                    case eSymbolTypeInstrumentation:
+                    case eSymbolTypeTrampoline:
+                      break;
+
+                    case eSymbolTypeCode:
+                    case eSymbolTypeResolver:
+                    case eSymbolTypeData:
+                    case eSymbolTypeRuntime:
+                    case eSymbolTypeException:
+                    case eSymbolTypeObjCClass:
+                    case eSymbolTypeObjCMetaClass:
+                    case eSymbolTypeObjCIVar:
+                    case eSymbolTypeReExported:
+                      symbol_load_addr =
+                          sc.symbol->GetLoadAddress(&process->GetTarget());
+                      break;
+                    }
+                  } else {
+                    // GDB does return symbols even when they're not valid
+                    // address, following this behavior on non Mach-O
+                    // architectures.
                     symbol_load_addr =
                         sc.symbol->GetLoadAddress(&process->GetTarget());
-                    break;
+                    if (symbol_load_addr == LLDB_INVALID_ADDRESS) {
+                      symbol_load_addr = sc.symbol->GetRawValue();
+                    }
                   }
                 }
               }

``````````

</details>


https://github.com/llvm/llvm-project/pull/200134


More information about the lldb-commits mailing list