https://github.com/charles-zablit updated https://github.com/llvm/llvm-project/pull/178409
>From 6db4499fec545a9e2a284309b8d60e13b8a93b08 Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Wed, 28 Jan 2026 12:07:20 +0000 Subject: [PATCH 1/2] [lldb-dap][windows] allow STDIN to be a console --- lldb/source/Host/windows/MainLoopWindows.cpp | 2 +- lldb/test/Shell/DAP/TestSTDINConsole.test | 62 ++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 lldb/test/Shell/DAP/TestSTDINConsole.test 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..1ff8be417a028 --- /dev/null +++ b/lldb/test/Shell/DAP/TestSTDINConsole.test @@ -0,0 +1,62 @@ +# REQUIRES: system-windows +# RUN: %python %s %lldb-dap > %t.out 2>&1 +# RUN: FileCheck %s --check-prefix=ERROR < %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() >From fde635cdf70a1d95582db703f7d6aa3a20c53585 Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Wed, 28 Jan 2026 17:27:24 +0000 Subject: [PATCH 2/2] Update lldb/test/Shell/DAP/TestSTDINConsole.test Co-authored-by: Ebuka Ezike <[email protected]> --- lldb/test/Shell/DAP/TestSTDINConsole.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/test/Shell/DAP/TestSTDINConsole.test b/lldb/test/Shell/DAP/TestSTDINConsole.test index 1ff8be417a028..d36d42a384a11 100644 --- a/lldb/test/Shell/DAP/TestSTDINConsole.test +++ b/lldb/test/Shell/DAP/TestSTDINConsole.test @@ -1,4 +1,4 @@ -# REQUIRES: system-windows +# REQUIRES: python, system-windows # RUN: %python %s %lldb-dap > %t.out 2>&1 # RUN: FileCheck %s --check-prefix=ERROR < %t.out _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
