[lldb-dap][windows] allow STDIN to be a console#178642
Merged
charles-zablit merged 1 commit intoJan 29, 2026
Merged
Conversation
Member
|
@llvm/pr-subscribers-platform-windows @llvm/pr-subscribers-lldb Author: Charles Zablit (charles-zablit) ChangesThis patch allows starting On Windows, the console is a device of type Fixes #178194 This is a reland of #178409. Adding 2 Files Affected:
diff --git a/lldb/source/Host/windows/MainLoopWindows.cpp b/lldb/source/Host/windows/MainLoopWindows.cpp
index b4ca2735f1549..d86d41c845fe9 100644
--- a/lldb/source/Host/windows/MainLoopWindows.cpp
+++ b/lldb/source/Host/windows/MainLoopWindows.cpp
@@ -247,7 +247,7 @@ MainLoopWindows::RegisterReadObject(const IOObjectSP &object_sp,
callback};
} else {
DWORD file_type = GetFileType(waitable_handle);
- if (file_type != FILE_TYPE_PIPE) {
+ if (file_type != FILE_TYPE_CHAR && file_type != FILE_TYPE_PIPE) {
error = Status::FromErrorStringWithFormat("Unsupported file type %ld",
file_type);
return nullptr;
diff --git a/lldb/test/Shell/DAP/TestSTDINConsole.test b/lldb/test/Shell/DAP/TestSTDINConsole.test
new file mode 100644
index 0000000000000..ba2357d1b0fe4
--- /dev/null
+++ b/lldb/test/Shell/DAP/TestSTDINConsole.test
@@ -0,0 +1,62 @@
+# REQUIRES: python, system-windows
+# RUN: %python %s %lldb-dap > %t.out 2>&1
+# RUN: FileCheck %s --check-prefix=ERROR --allow-empty < %t.out
+
+# ERROR-NOT: DAP session error:
+
+# Test that we can successfully start the dap server from the console on Windows.
+
+import sys
+import subprocess
+import os
+
+lldb_dap_path = sys.argv[1]
+if lldb_dap_path.startswith('%'):
+ lldb_dap_path = lldb_dap_path[1:]
+lldb_dap_path = os.path.normpath(lldb_dap_path)
+
+import ctypes
+from ctypes import wintypes
+import msvcrt
+
+GENERIC_READ = 0x80000000
+GENERIC_WRITE = 0x40000000
+OPEN_EXISTING = 3
+FILE_SHARE_READ = 0x00000001
+FILE_SHARE_WRITE = 0x00000002
+
+kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
+
+conin_handle = kernel32.CreateFileW(
+ "CONIN$",
+ GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ None,
+ OPEN_EXISTING,
+ 0,
+ None
+)
+
+if conin_handle == -1:
+ print("Failed to open CONIN$", file=sys.stderr)
+ sys.exit(1)
+
+conin_fd = msvcrt.open_osfhandle(conin_handle, os.O_RDONLY)
+
+proc = subprocess.Popen(
+ [lldb_dap_path],
+ stdin=conin_fd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT
+)
+
+os.close(conin_fd)
+
+try:
+ output, _ = proc.communicate(timeout=2)
+except subprocess.TimeoutExpired:
+ proc.kill()
+ output, _ = proc.communicate()
+
+sys.stdout.buffer.write(output)
+sys.stdout.flush()
|
DrSergei
approved these changes
Jan 29, 2026
Contributor
Author
|
/cherry-pick e17374a |
Member
|
/pull-request #178646 |
c-rhodes
pushed a commit
to llvmbot/llvm-project
that referenced
this pull request
Jan 30, 2026
(cherry picked from commit e17374a)
honeygoyal
pushed a commit
to honeygoyal/llvm-project
that referenced
this pull request
Jan 30, 2026
charles-zablit
added a commit
to charles-zablit/llvm-project
that referenced
this pull request
Feb 4, 2026
(cherry picked from commit e17374a)
charles-zablit
added a commit
that referenced
this pull request
Feb 9, 2026
#178642 added `lldb/test/Shell/DAP/TestSTDINConsole.test` with an incorrect `%lldb-dap` expansion. This patch fixes it.
charles-zablit
added a commit
to charles-zablit/llvm-project
that referenced
this pull request
Feb 9, 2026
…180237) llvm#178642 added `lldb/test/Shell/DAP/TestSTDINConsole.test` with an incorrect `%lldb-dap` expansion. This patch fixes it. (cherry picked from commit dbbea96)
llvm-sync Bot
pushed a commit
to arm/arm-toolchain
that referenced
this pull request
Feb 9, 2026
…-dap (#180237) llvm/llvm-project#178642 added `lldb/test/Shell/DAP/TestSTDINConsole.test` with an incorrect `%lldb-dap` expansion. This patch fixes it.
rishabhmadan19
pushed a commit
to rishabhmadan19/llvm-project
that referenced
this pull request
Feb 9, 2026
…180237) llvm#178642 added `lldb/test/Shell/DAP/TestSTDINConsole.test` with an incorrect `%lldb-dap` expansion. This patch fixes it.
charles-zablit
added a commit
to charles-zablit/llvm-project
that referenced
this pull request
Apr 2, 2026
(cherry picked from commit e17374a)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This patch allows starting
lldb-dapfrom the console on Windows.On Windows, the console is a device of type
FILE_TYPE_CHARandlldb-dapwas only allowing devices of typeFILE_TYPE_PIPE. This was causing a startup error when runninglldp-dapfrom the console with no arguments.Fixes #178194
This is a reland of #178409. Adding
--allow-emptyto the tests allows them to pass in CI. I was not hitting the CI error at desk because lldb-dap was printing warnings, which are not present in CI.