[Lldb-commits] [lldb] [lldb-dap] Add module symbol table viewer to VS Code extension [#140626] (PR #153836)
via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 15 10:15:56 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Ely Ronnen (eronnen)
<details>
<summary>Changes</summary>
- VS Code extension:
- Add module symbol table viewer using [Tabulator](https://tabulator.info/) for sorting and formatting rows.
- Add context menu action to the modules tree.
- lldb-dap
- Add `DAPGetModuleSymbolsRequest` to get symbols from a module.
[Screencast From 2025-08-15 19-12-33.webm](https://github.com/user-attachments/assets/75e2f229-ac82-487c-812e-3ea33a575b70)
---
Patch is 49.92 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/153836.diff
22 Files Affected:
- (modified) lldb/include/lldb/API/SBSymbol.h (+5)
- (modified) lldb/include/lldb/API/SBTarget.h (+2)
- (modified) lldb/source/API/SBSymbol.cpp (+16)
- (modified) lldb/source/API/SBTarget.cpp (+12)
- (modified) lldb/tools/lldb-dap/CMakeLists.txt (+1)
- (modified) lldb/tools/lldb-dap/DAP.cpp (+1)
- (added) lldb/tools/lldb-dap/Handler/DAPGetModuleSymbolsRequestHandler.cpp (+160)
- (modified) lldb/tools/lldb-dap/Handler/RequestHandler.h (+11)
- (modified) lldb/tools/lldb-dap/Protocol/DAPTypes.cpp (+27)
- (modified) lldb/tools/lldb-dap/Protocol/DAPTypes.h (+32)
- (modified) lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp (+13)
- (modified) lldb/tools/lldb-dap/Protocol/ProtocolRequests.h (+17)
- (modified) lldb/tools/lldb-dap/package-lock.json (+511-2)
- (modified) lldb/tools/lldb-dap/package.json (+30-2)
- (modified) lldb/tools/lldb-dap/src-ts/extension.ts (+7-3)
- (added) lldb/tools/lldb-dap/src-ts/index.d.ts (+14)
- (modified) lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts (+1)
- (added) lldb/tools/lldb-dap/src-ts/ui/symbols-provider.ts (+185)
- (added) lldb/tools/lldb-dap/src-ts/webview/symbols-table-view.ts (+90)
- (modified) lldb/tools/lldb-dap/tsconfig.json (+2)
- (modified) lldb/unittests/DAP/CMakeLists.txt (+1)
- (added) lldb/unittests/DAP/DAPTypesTest.cpp (+62)
``````````diff
diff --git a/lldb/include/lldb/API/SBSymbol.h b/lldb/include/lldb/API/SBSymbol.h
index 94521881f82f9..6777494bad1d2 100644
--- a/lldb/include/lldb/API/SBSymbol.h
+++ b/lldb/include/lldb/API/SBSymbol.h
@@ -85,6 +85,8 @@ class LLDB_API SBSymbol {
SymbolType GetType();
+ uint32_t GetID();
+
bool operator==(const lldb::SBSymbol &rhs) const;
bool operator!=(const lldb::SBSymbol &rhs) const;
@@ -99,6 +101,9 @@ class LLDB_API SBSymbol {
// other than the actual symbol table itself in the object file.
bool IsSynthetic();
+ /// Returns true if the symbol is a debug symbol.
+ bool IsDebug();
+
protected:
lldb_private::Symbol *get();
diff --git a/lldb/include/lldb/API/SBTarget.h b/lldb/include/lldb/API/SBTarget.h
index 22b6c63ed5b97..90fada3aea4ec 100644
--- a/lldb/include/lldb/API/SBTarget.h
+++ b/lldb/include/lldb/API/SBTarget.h
@@ -324,6 +324,8 @@ class LLDB_API SBTarget {
lldb::SBModule FindModule(const lldb::SBFileSpec &file_spec);
+ lldb::SBModule FindModule(const lldb::SBModuleSpec &module_spec);
+
/// Find compile units related to *this target and passed source
/// file.
///
diff --git a/lldb/source/API/SBSymbol.cpp b/lldb/source/API/SBSymbol.cpp
index 79477dd3a70fc..7bcc7f99079c4 100644
--- a/lldb/source/API/SBSymbol.cpp
+++ b/lldb/source/API/SBSymbol.cpp
@@ -193,6 +193,14 @@ SymbolType SBSymbol::GetType() {
return eSymbolTypeInvalid;
}
+uint32_t SBSymbol::GetID() {
+ LLDB_INSTRUMENT_VA(this);
+
+ if (m_opaque_ptr)
+ return m_opaque_ptr->GetID();
+ return 0;
+}
+
bool SBSymbol::IsExternal() {
LLDB_INSTRUMENT_VA(this);
@@ -208,3 +216,11 @@ bool SBSymbol::IsSynthetic() {
return m_opaque_ptr->IsSynthetic();
return false;
}
+
+bool SBSymbol::IsDebug() {
+ LLDB_INSTRUMENT_VA(this);
+
+ if (m_opaque_ptr)
+ return m_opaque_ptr->IsDebug();
+ return false;
+}
diff --git a/lldb/source/API/SBTarget.cpp b/lldb/source/API/SBTarget.cpp
index 6aa41c52f3731..c761b96135a86 100644
--- a/lldb/source/API/SBTarget.cpp
+++ b/lldb/source/API/SBTarget.cpp
@@ -1570,6 +1570,18 @@ SBModule SBTarget::FindModule(const SBFileSpec &sb_file_spec) {
return sb_module;
}
+SBModule SBTarget::FindModule(const SBModuleSpec &sb_module_spec) {
+ LLDB_INSTRUMENT_VA(this, sb_module_spec);
+
+ SBModule sb_module;
+ if (TargetSP target_sp = GetSP(); target_sp && sb_module_spec.IsValid()) {
+ // The module list is thread safe, no need to lock
+ sb_module.SetSP(
+ target_sp->GetImages().FindFirstModule(*sb_module_spec.m_opaque_up));
+ }
+ return sb_module;
+}
+
SBSymbolContextList SBTarget::FindCompileUnits(const SBFileSpec &sb_file_spec) {
LLDB_INSTRUMENT_VA(this, sb_file_spec);
diff --git a/lldb/tools/lldb-dap/CMakeLists.txt b/lldb/tools/lldb-dap/CMakeLists.txt
index 5e0ad53b82f89..c3ba53754f8ad 100644
--- a/lldb/tools/lldb-dap/CMakeLists.txt
+++ b/lldb/tools/lldb-dap/CMakeLists.txt
@@ -36,6 +36,7 @@ add_lldb_library(lldbDAP
Handler/CompletionsHandler.cpp
Handler/ConfigurationDoneRequestHandler.cpp
Handler/ContinueRequestHandler.cpp
+ Handler/DAPGetModuleSymbolsRequestHandler.cpp
Handler/DataBreakpointInfoRequestHandler.cpp
Handler/DisassembleRequestHandler.cpp
Handler/DisconnectRequestHandler.cpp
diff --git a/lldb/tools/lldb-dap/DAP.cpp b/lldb/tools/lldb-dap/DAP.cpp
index ce910b1f60b85..08d50c9b93a7e 100644
--- a/lldb/tools/lldb-dap/DAP.cpp
+++ b/lldb/tools/lldb-dap/DAP.cpp
@@ -1566,6 +1566,7 @@ void DAP::RegisterRequests() {
// Custom requests
RegisterRequest<CompileUnitsRequestHandler>();
RegisterRequest<ModulesRequestHandler>();
+ RegisterRequest<DAPGetModuleSymbolsRequestHandler>();
// Testing requests
RegisterRequest<TestGetTargetBreakpointsRequestHandler>();
diff --git a/lldb/tools/lldb-dap/Handler/DAPGetModuleSymbolsRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/DAPGetModuleSymbolsRequestHandler.cpp
new file mode 100644
index 0000000000000..99199fb2ac9ca
--- /dev/null
+++ b/lldb/tools/lldb-dap/Handler/DAPGetModuleSymbolsRequestHandler.cpp
@@ -0,0 +1,160 @@
+//===-- DAPGetModuleSymbolsRequestHandler.cpp -----------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "DAP.h"
+#include "DAPError.h"
+#include "Protocol/DAPTypes.h"
+#include "RequestHandler.h"
+#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBFileSpec.h"
+#include "lldb/API/SBModule.h"
+#include "lldb/API/SBModuleSpec.h"
+#include "lldb/Utility/UUID.h"
+#include "lldb/lldb-enumerations.h"
+#include "llvm/Support/Error.h"
+#include <cstddef>
+
+using namespace lldb_dap::protocol;
+namespace lldb_dap {
+
+static std::string SymbolTypeToString(lldb::SymbolType symbol_type) {
+ switch (symbol_type) {
+ case lldb::eSymbolTypeInvalid:
+ return "Invalid";
+ case lldb::eSymbolTypeAbsolute:
+ return "Absolute";
+ case lldb::eSymbolTypeCode:
+ return "Code";
+ case lldb::eSymbolTypeResolver:
+ return "Resolver";
+ case lldb::eSymbolTypeData:
+ return "Data";
+ case lldb::eSymbolTypeTrampoline:
+ return "Trampoline";
+ case lldb::eSymbolTypeRuntime:
+ return "Runtime";
+ case lldb::eSymbolTypeException:
+ return "Exception";
+ case lldb::eSymbolTypeSourceFile:
+ return "SourceFile";
+ case lldb::eSymbolTypeHeaderFile:
+ return "HeaderFile";
+ case lldb::eSymbolTypeObjectFile:
+ return "ObjectFile";
+ case lldb::eSymbolTypeCommonBlock:
+ return "CommonBlock";
+ case lldb::eSymbolTypeBlock:
+ return "Block";
+ case lldb::eSymbolTypeLocal:
+ return "Local";
+ case lldb::eSymbolTypeParam:
+ return "Param";
+ case lldb::eSymbolTypeVariable:
+ return "Variable";
+ case lldb::eSymbolTypeVariableType:
+ return "VariableType";
+ case lldb::eSymbolTypeLineEntry:
+ return "LineEntry";
+ case lldb::eSymbolTypeLineHeader:
+ return "LineHeader";
+ case lldb::eSymbolTypeScopeBegin:
+ return "ScopeBegin";
+ case lldb::eSymbolTypeScopeEnd:
+ return "ScopeEnd";
+ case lldb::eSymbolTypeAdditional:
+ return "Additional";
+ case lldb::eSymbolTypeCompiler:
+ return "Compiler";
+ case lldb::eSymbolTypeInstrumentation:
+ return "Instrumentation";
+ case lldb::eSymbolTypeUndefined:
+ return "Undefined";
+ case lldb::eSymbolTypeObjCClass:
+ return "ObjCClass";
+ case lldb::eSymbolTypeObjCMetaClass:
+ return "ObjCMetaClass";
+ case lldb::eSymbolTypeObjCIVar:
+ return "ObjCIVar";
+ case lldb::eSymbolTypeReExported:
+ return "ReExported";
+ }
+
+ llvm_unreachable("unhandled symbol type.");
+}
+
+/// Modules can be retrieved from the debug adapter with this request which can
+/// either return all modules or a range of modules to support paging.
+///
+/// Clients should only call this request if the corresponding capability
+/// `supportsModulesRequest` is true.
+llvm::Expected<DAPGetModuleSymbolsResponseBody>
+DAPGetModuleSymbolsRequestHandler::Run(
+ const DAPGetModuleSymbolsArguments &args) const {
+ DAPGetModuleSymbolsResponseBody response;
+
+ lldb::SBModuleSpec module_spec;
+ if (args.moduleId) {
+ llvm::SmallVector<uint8_t, 20> uuid_bytes;
+ if (!lldb_private::UUID::DecodeUUIDBytesFromString(*args.moduleId,
+ uuid_bytes)
+ .empty())
+ return llvm::make_error<DAPError>("Invalid module ID");
+
+ module_spec.SetUUIDBytes(uuid_bytes.data(), uuid_bytes.size());
+ }
+
+ if (args.moduleName) {
+ lldb::SBFileSpec file_spec;
+ file_spec.SetFilename(args.moduleName->c_str());
+ module_spec.SetFileSpec(file_spec);
+ }
+
+ // Empty request, return empty response.
+ // We use it in the client to check if the lldb-dap server supports this
+ // request.
+ if (!module_spec.IsValid())
+ return response;
+
+ std::vector<DAPSymbol> &symbols = response.symbols;
+ lldb::SBModule module = dap.target.FindModule(module_spec);
+ if (!module.IsValid())
+ return llvm::make_error<DAPError>("Module not found");
+
+ size_t num_symbols = module.GetNumSymbols();
+ for (size_t i = 0; i < num_symbols; ++i) {
+ lldb::SBSymbol symbol = module.GetSymbolAtIndex(i);
+ if (!symbol.IsValid())
+ continue;
+
+ DAPSymbol dap_symbol;
+ dap_symbol.userId = symbol.GetID();
+ dap_symbol.type = SymbolTypeToString(symbol.GetType());
+ dap_symbol.isDebug = symbol.IsDebug();
+ dap_symbol.isSynthetic = symbol.IsSynthetic();
+ dap_symbol.isExternal = symbol.IsExternal();
+
+ lldb::SBAddress start_address = symbol.GetStartAddress();
+ if (start_address.IsValid()) {
+ lldb::addr_t file_address = start_address.GetFileAddress();
+ if (file_address != LLDB_INVALID_ADDRESS)
+ dap_symbol.fileAddress = file_address;
+
+ lldb::addr_t load_address = start_address.GetLoadAddress(dap.target);
+ if (load_address != LLDB_INVALID_ADDRESS)
+ dap_symbol.loadAddress = load_address;
+ }
+
+ dap_symbol.size = symbol.GetSize();
+ dap_symbol.name = symbol.GetName();
+ symbols.push_back(std::move(dap_symbol));
+ }
+
+ return response;
+}
+
+} // namespace lldb_dap
diff --git a/lldb/tools/lldb-dap/Handler/RequestHandler.h b/lldb/tools/lldb-dap/Handler/RequestHandler.h
index 16f8062f97d7b..e605a8bc1b9f1 100644
--- a/lldb/tools/lldb-dap/Handler/RequestHandler.h
+++ b/lldb/tools/lldb-dap/Handler/RequestHandler.h
@@ -594,6 +594,17 @@ class CancelRequestHandler : public RequestHandler<protocol::CancelArguments,
llvm::Error Run(const protocol::CancelArguments &args) const override;
};
+class DAPGetModuleSymbolsRequestHandler
+ : public RequestHandler<
+ protocol::DAPGetModuleSymbolsArguments,
+ llvm::Expected<protocol::DAPGetModuleSymbolsResponseBody>> {
+public:
+ using RequestHandler::RequestHandler;
+ static llvm::StringLiteral GetCommand() { return "dapGetModuleSymbols"; }
+ llvm::Expected<protocol::DAPGetModuleSymbolsResponseBody>
+ Run(const protocol::DAPGetModuleSymbolsArguments &args) const override;
+};
+
/// A request used in testing to get the details on all breakpoints that are
/// currently set in the target. This helps us to test "setBreakpoints" and
/// "setFunctionBreakpoints" requests to verify we have the correct set of
diff --git a/lldb/tools/lldb-dap/Protocol/DAPTypes.cpp b/lldb/tools/lldb-dap/Protocol/DAPTypes.cpp
index ecb4baef56e80..212bbd2fe7be6 100644
--- a/lldb/tools/lldb-dap/Protocol/DAPTypes.cpp
+++ b/lldb/tools/lldb-dap/Protocol/DAPTypes.cpp
@@ -33,4 +33,31 @@ llvm::json::Value toJSON(const SourceLLDBData &SLD) {
return result;
}
+bool fromJSON(const llvm::json::Value &Params, DAPSymbol &DS,
+ llvm::json::Path P) {
+ json::ObjectMapper O(Params, P);
+ return O && O.map("userId", DS.userId) && O.map("isDebug", DS.isDebug) &&
+ O.map("isSynthetic", DS.isSynthetic) &&
+ O.map("isExternal", DS.isExternal) && O.map("type", DS.type) &&
+ O.map("fileAddress", DS.fileAddress) &&
+ O.mapOptional("loadAddress", DS.loadAddress) &&
+ O.map("size", DS.size) && O.map("name", DS.name);
+}
+
+llvm::json::Value toJSON(const DAPSymbol &DS) {
+ json::Object result{
+ {"userId", DS.userId},
+ {"isDebug", DS.isDebug},
+ {"isSynthetic", DS.isSynthetic},
+ {"isExternal", DS.isExternal},
+ {"type", DS.type},
+ {"fileAddress", DS.fileAddress},
+ {"loadAddress", DS.loadAddress},
+ {"size", DS.size},
+ {"name", DS.name},
+ };
+
+ return result;
+}
+
} // namespace lldb_dap::protocol
\ No newline at end of file
diff --git a/lldb/tools/lldb-dap/Protocol/DAPTypes.h b/lldb/tools/lldb-dap/Protocol/DAPTypes.h
index 716d8b491b258..83f9947b1ab57 100644
--- a/lldb/tools/lldb-dap/Protocol/DAPTypes.h
+++ b/lldb/tools/lldb-dap/Protocol/DAPTypes.h
@@ -48,6 +48,38 @@ struct SourceLLDBData {
bool fromJSON(const llvm::json::Value &, SourceLLDBData &, llvm::json::Path);
llvm::json::Value toJSON(const SourceLLDBData &);
+struct DAPSymbol {
+ /// The symbol uid.
+ uint32_t userId;
+
+ /// True if this symbol is debug information in a symbol.
+ bool isDebug;
+
+ /// True if this symbol is not actually in the symbol table, but synthesized
+ /// from other info in the object file.
+ bool isSynthetic;
+
+ /// True if this symbol is globally visible.
+ bool isExternal;
+
+ /// The symbol type.
+ std::string type;
+
+ /// The symbol file address.
+ lldb::addr_t fileAddress;
+
+ /// The symbol load address.
+ std::optional<lldb::addr_t> loadAddress;
+
+ /// The symbol size.
+ lldb::addr_t size;
+
+ /// The symbol name.
+ std::string name;
+};
+bool fromJSON(const llvm::json::Value &, DAPSymbol &, llvm::json::Path);
+llvm::json::Value toJSON(const DAPSymbol &);
+
} // namespace lldb_dap::protocol
#endif
diff --git a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp
index 29855ca50e9e0..e0d49a7d03ce5 100644
--- a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp
+++ b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp
@@ -598,4 +598,17 @@ json::Value toJSON(const WriteMemoryResponseBody &WMR) {
return result;
}
+bool fromJSON(const llvm::json::Value &Params,
+ DAPGetModuleSymbolsArguments &Args, llvm::json::Path P) {
+ json::ObjectMapper O(Params, P);
+ return O && O.mapOptional("moduleId", Args.moduleId) &&
+ O.mapOptional("moduleName", Args.moduleName);
+}
+
+llvm::json::Value toJSON(const DAPGetModuleSymbolsResponseBody &DGMSR) {
+ json::Object result;
+ result.insert({"symbols", DGMSR.symbols});
+ return result;
+}
+
} // namespace lldb_dap::protocol
diff --git a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h
index c45ee10e77d1c..ebf58424f6aa4 100644
--- a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h
+++ b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h
@@ -981,6 +981,23 @@ struct WriteMemoryResponseBody {
};
llvm::json::Value toJSON(const WriteMemoryResponseBody &);
+struct DAPGetModuleSymbolsArguments {
+ /// The module UUID for which to retrieve symbols.
+ std::optional<std::string> moduleId;
+
+ /// The module path.
+ std::optional<std::string> moduleName;
+};
+bool fromJSON(const llvm::json::Value &, DAPGetModuleSymbolsArguments &,
+ llvm::json::Path);
+
+/// Response to `getModuleSymbols` request.
+struct DAPGetModuleSymbolsResponseBody {
+ /// The symbols for the specified module.
+ std::vector<DAPSymbol> symbols;
+};
+llvm::json::Value toJSON(const DAPGetModuleSymbolsResponseBody &);
+
} // namespace lldb_dap::protocol
#endif
diff --git a/lldb/tools/lldb-dap/package-lock.json b/lldb/tools/lldb-dap/package-lock.json
index 1969b196accc6..26db1ce6df2fd 100644
--- a/lldb/tools/lldb-dap/package-lock.json
+++ b/lldb/tools/lldb-dap/package-lock.json
@@ -1,20 +1,24 @@
{
"name": "lldb-dap",
- "version": "0.2.15",
+ "version": "0.2.16",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "lldb-dap",
- "version": "0.2.15",
+ "version": "0.2.16",
"license": "Apache 2.0 License with LLVM exceptions",
"devDependencies": {
"@types/node": "^18.19.41",
+ "@types/tabulator-tables": "^6.2.10",
"@types/vscode": "1.75.0",
+ "@types/vscode-webview": "^1.57.5",
"@vscode/debugprotocol": "^1.68.0",
"@vscode/vsce": "^3.2.2",
+ "esbuild": "^0.25.9",
"prettier": "^3.4.2",
"prettier-plugin-curly": "^0.3.1",
+ "tabulator-tables": "^6.3.1",
"typescript": "^5.7.3"
},
"engines": {
@@ -318,6 +322,448 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz",
+ "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz",
+ "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz",
+ "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz",
+ "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz",
+ "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz",
+ "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz",
+ "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz",
+ "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz",
+ "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.o...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/153836
More information about the lldb-commits
mailing list