https://github.com/charles-zablit updated 
https://github.com/llvm/llvm-project/pull/201141

>From 6dd300c9580e475499650c6218bcf9d108b82deb Mon Sep 17 00:00:00 2001
From: Charles Zablit <[email protected]>
Date: Tue, 2 Jun 2026 16:02:21 +0100
Subject: [PATCH 1/6] [lldb][gdb-remote] Forward client terminal size to
 lldb-server

---
 lldb/include/lldb/Host/ProcessLaunchInfo.h    | 18 +++++++++++
 .../include/lldb/Host/windows/PseudoConsole.h |  4 ++-
 .../lldb/Utility/StringExtractorGDBRemote.h   |  1 +
 lldb/source/Host/common/ProcessLaunchInfo.cpp |  3 +-
 lldb/source/Host/windows/PseudoConsole.cpp    | 23 +++++++++-----
 .../GDBRemoteCommunicationClient.cpp          | 19 ++++++++++++
 .../gdb-remote/GDBRemoteCommunicationClient.h |  3 ++
 .../GDBRemoteCommunicationServerCommon.cpp    | 30 +++++++++++++++++++
 .../GDBRemoteCommunicationServerCommon.h      |  2 ++
 .../Process/gdb-remote/ProcessGDBRemote.cpp   | 26 ++++++++++++++++
 .../Utility/StringExtractorGDBRemote.cpp      |  2 ++
 11 files changed, 121 insertions(+), 10 deletions(-)

diff --git a/lldb/include/lldb/Host/ProcessLaunchInfo.h 
b/lldb/include/lldb/Host/ProcessLaunchInfo.h
index 39f85205999de..7b22e535c3268 100644
--- a/lldb/include/lldb/Host/ProcessLaunchInfo.h
+++ b/lldb/include/lldb/Host/ProcessLaunchInfo.h
@@ -174,6 +174,23 @@ class ProcessLaunchInfo : public ProcessInfo {
     return m_flags.Test(lldb::eLaunchFlagDetachOnError);
   }
 
+  /// Terminal window dimensions to use when the launcher creates a
+  /// pseudo-terminal for the inferior's stdio.
+  struct STDIOWindowSize {
+    uint16_t cols = 0;
+    uint16_t rows = 0;
+    bool IsSet() const { return cols != 0 && rows != 0; }
+  };
+
+  void SetSTDIOWindowSize(uint16_t cols, uint16_t rows) {
+    m_stdio_window_size.cols = cols;
+    m_stdio_window_size.rows = rows;
+  }
+
+  const STDIOWindowSize &GetSTDIOWindowSize() const {
+    return m_stdio_window_size;
+  }
+
 protected:
   FileSpec m_working_dir;
   std::string m_plugin_name;
@@ -186,6 +203,7 @@ class ProcessLaunchInfo : public ProcessInfo {
   Host::MonitorChildProcessCallback m_monitor_callback;
   std::string m_event_data; // A string passed to the plugin launch, having no
                             // meaning to the upper levels of lldb.
+  STDIOWindowSize m_stdio_window_size;
 };
 }
 
diff --git a/lldb/include/lldb/Host/windows/PseudoConsole.h 
b/lldb/include/lldb/Host/windows/PseudoConsole.h
index cf910354f1bca..b98402922bfb3 100644
--- a/lldb/include/lldb/Host/windows/PseudoConsole.h
+++ b/lldb/include/lldb/Host/windows/PseudoConsole.h
@@ -44,11 +44,13 @@ class PseudoConsole {
   /// 80x25. Also sets up the associated STDIN/STDOUT pipes and responds to
   /// the cursor-position query that ConPTY emits at startup.
   ///
+  /// \param req_cols, req_rows Optional terminal dimensions.
+  ///
   /// \return
   ///     An llvm::Error if the ConPTY could not be created, or if ConPTY is
   ///     not available on this version of Windows, llvm::Error::success()
   ///     otherwise.
-  llvm::Error OpenPseudoConsole();
+  llvm::Error OpenPseudoConsole(uint16_t req_cols = 0, uint16_t req_rows = 0);
 
   /// Creates a pair of anonymous pipes to use for stdio instead of a ConPTY.
   ///
diff --git a/lldb/include/lldb/Utility/StringExtractorGDBRemote.h 
b/lldb/include/lldb/Utility/StringExtractorGDBRemote.h
index 85ec27cac9ac0..09693a5f5e86b 100644
--- a/lldb/include/lldb/Utility/StringExtractorGDBRemote.h
+++ b/lldb/include/lldb/Utility/StringExtractorGDBRemote.h
@@ -75,6 +75,7 @@ class StringExtractorGDBRemote : public StringExtractor {
     eServerPacketType_QSetSTDIN,
     eServerPacketType_QSetSTDOUT,
     eServerPacketType_QSetSTDERR,
+    eServerPacketType_QSetSTDIOWindowSize,
     eServerPacketType_QSetWorkingDir,
     eServerPacketType_QStartNoAckMode,
     eServerPacketType_qPathComplete,
diff --git a/lldb/source/Host/common/ProcessLaunchInfo.cpp 
b/lldb/source/Host/common/ProcessLaunchInfo.cpp
index b5b82c7475822..b939904734073 100644
--- a/lldb/source/Host/common/ProcessLaunchInfo.cpp
+++ b/lldb/source/Host/common/ProcessLaunchInfo.cpp
@@ -244,7 +244,8 @@ llvm::Error ProcessLaunchInfo::SetUpPtyRedirection() {
   LLDB_LOG(log, "Generating a pty to use for stdin/out/err");
 
 #ifdef _WIN32
-  if (llvm::Error Err = m_pty->OpenPseudoConsole())
+  if (llvm::Error Err = m_pty->OpenPseudoConsole(m_stdio_window_size.cols,
+                                                 m_stdio_window_size.rows))
     return Err;
   return llvm::Error::success();
 #else
diff --git a/lldb/source/Host/windows/PseudoConsole.cpp 
b/lldb/source/Host/windows/PseudoConsole.cpp
index 4d98a54673795..2b8293393bfdf 100644
--- a/lldb/source/Host/windows/PseudoConsole.cpp
+++ b/lldb/source/Host/windows/PseudoConsole.cpp
@@ -93,7 +93,8 @@ llvm::Error PseudoConsole::CreateOverlappedPipePair(HANDLE 
&out_read,
 
 PseudoConsole::~PseudoConsole() { Reset(); }
 
-llvm::Error PseudoConsole::OpenPseudoConsole() {
+llvm::Error PseudoConsole::OpenPseudoConsole(uint16_t req_cols,
+                                             uint16_t req_rows) {
   Reset();
 
   if (!kernel32.IsConPTYAvailable())
@@ -124,13 +125,19 @@ llvm::Error PseudoConsole::OpenPseudoConsole() {
   // if we can't query the real console.
   int cursorRow = consoleSize.Y;
   int cursorCol = 1;
-  CONSOLE_SCREEN_BUFFER_INFO csbi;
-  if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)) {
-    consoleSize = {
-        static_cast<SHORT>(csbi.srWindow.Right - csbi.srWindow.Left + 1),
-        static_cast<SHORT>(csbi.srWindow.Bottom - csbi.srWindow.Top + 1)};
-    cursorRow = csbi.dwCursorPosition.Y - csbi.srWindow.Top + 1;
-    cursorCol = csbi.dwCursorPosition.X + 1;
+  if (req_cols != 0 && req_rows != 0) {
+    consoleSize = {static_cast<SHORT>(req_cols), static_cast<SHORT>(req_rows)};
+    cursorRow = consoleSize.Y;
+    cursorCol = 1;
+  } else {
+    CONSOLE_SCREEN_BUFFER_INFO csbi;
+    if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)) {
+      consoleSize = {
+          static_cast<SHORT>(csbi.srWindow.Right - csbi.srWindow.Left + 1),
+          static_cast<SHORT>(csbi.srWindow.Bottom - csbi.srWindow.Top + 1)};
+      cursorRow = csbi.dwCursorPosition.Y - csbi.srWindow.Top + 1;
+      cursorCol = csbi.dwCursorPosition.X + 1;
+    }
   }
   HPCON hPC = INVALID_HANDLE_VALUE;
   HRESULT hr =
diff --git 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
index 8df7936786b04..d1f15b6ba5490 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -1957,6 +1957,25 @@ int GDBRemoteCommunicationClient::SetSTDERR(const 
FileSpec &file_spec) {
   return -1;
 }
 
+int GDBRemoteCommunicationClient::SetSTDIOWindowSize(uint16_t cols,
+                                                     uint16_t rows) {
+  if (cols == 0 || rows == 0)
+    return -1;
+  StreamString packet;
+  packet.Printf("QSetSTDIOWindowSize:cols=%u;rows=%u",
+                static_cast<unsigned>(cols), static_cast<unsigned>(rows));
+  StringExtractorGDBRemote response;
+  if (SendPacketAndWaitForResponse(packet.GetString(), response) !=
+      PacketResult::Success)
+    return -1;
+  if (response.IsOKResponse())
+    return 0;
+  if (response.IsUnsupportedResponse())
+    return 0;
+  uint8_t error = response.GetError();
+  return error ? error : -1;
+}
+
 bool GDBRemoteCommunicationClient::GetWorkingDir(FileSpec &working_dir) {
   StringExtractorGDBRemote response;
   if (SendPacketAndWaitForResponse("qGetWorkingDir", response) ==
diff --git 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
index 79ca0bcd3ed22..5084811f8c712 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
@@ -144,6 +144,9 @@ class GDBRemoteCommunicationClient : public 
GDBRemoteClientBase {
   int SetSTDOUT(const FileSpec &file_spec);
   int SetSTDERR(const FileSpec &file_spec);
 
+  /// Send the dimensions of the user's stdio terminal window to the server.
+  int SetSTDIOWindowSize(uint16_t cols, uint16_t rows);
+
   /// Sets the disable ASLR flag to \a enable for a process that will
   /// be launched with the 'A' packet.
   ///
diff --git 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
index 16ded2c657d54..5422be805dbf2 100644
--- 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
+++ 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
@@ -117,6 +117,9 @@ 
GDBRemoteCommunicationServerCommon::GDBRemoteCommunicationServerCommon()
   RegisterMemberFunctionHandler(
       StringExtractorGDBRemote::eServerPacketType_QSetSTDOUT,
       &GDBRemoteCommunicationServerCommon::Handle_QSetSTDOUT);
+  RegisterMemberFunctionHandler(
+      StringExtractorGDBRemote::eServerPacketType_QSetSTDIOWindowSize,
+      &GDBRemoteCommunicationServerCommon::Handle_QSetSTDIOWindowSize);
   RegisterMemberFunctionHandler(
       StringExtractorGDBRemote::eServerPacketType_qSpeedTest,
       &GDBRemoteCommunicationServerCommon::Handle_qSpeedTest);
@@ -963,6 +966,33 @@ GDBRemoteCommunicationServerCommon::Handle_QSetSTDERR(
   return SendErrorResponse(17);
 }
 
+GDBRemoteCommunication::PacketResult
+GDBRemoteCommunicationServerCommon::Handle_QSetSTDIOWindowSize(
+    StringExtractorGDBRemote &packet) {
+  // Format: "QSetSTDIOWindowSize:cols=N;rows=N"
+  packet.SetFilePos(::strlen("QSetSTDIOWindowSize:"));
+  llvm::StringRef body = packet.GetStringRef().substr(packet.GetFilePos());
+
+  uint16_t cols = 0;
+  uint16_t rows = 0;
+  llvm::SmallVector<llvm::StringRef, 4> fields;
+  body.split(fields, ';');
+  for (llvm::StringRef field : fields) {
+    auto [key, value] = field.split('=');
+    unsigned parsed = 0;
+    if (value.empty() || value.getAsInteger(10, parsed) || parsed > UINT16_MAX)
+      continue;
+    if (key == "cols")
+      cols = static_cast<uint16_t>(parsed);
+    else if (key == "rows")
+      rows = static_cast<uint16_t>(parsed);
+  }
+  if (cols == 0 || rows == 0)
+    return SendErrorResponse(17);
+  m_process_launch_info.SetSTDIOWindowSize(cols, rows);
+  return SendOKResponse();
+}
+
 GDBRemoteCommunication::PacketResult
 GDBRemoteCommunicationServerCommon::Handle_qLaunchSuccess(
     StringExtractorGDBRemote &packet) {
diff --git 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.h 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.h
index b4f1eb3e61c41..aa756c81a791e 100644
--- 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.h
+++ 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.h
@@ -99,6 +99,8 @@ class GDBRemoteCommunicationServerCommon : public 
GDBRemoteCommunicationServer {
 
   PacketResult Handle_QSetSTDERR(StringExtractorGDBRemote &packet);
 
+  PacketResult Handle_QSetSTDIOWindowSize(StringExtractorGDBRemote &packet);
+
   PacketResult Handle_qLaunchSuccess(StringExtractorGDBRemote &packet);
 
   PacketResult Handle_QEnvironment(StringExtractorGDBRemote &packet);
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp 
b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index f6eaf5851338b..fb3427c512121 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -12,6 +12,7 @@
 #include <cstdlib>
 #if LLDB_ENABLE_POSIX
 #include <netinet/in.h>
+#include <sys/ioctl.h>
 #include <sys/mman.h>
 #include <sys/socket.h>
 #include <unistd.h>
@@ -20,6 +21,9 @@
 #if defined(__APPLE__)
 #include <sys/sysctl.h>
 #endif
+#ifdef _WIN32
+#include "lldb/Host/windows/windows.h"
+#endif
 #include <ctime>
 #include <sys/types.h>
 
@@ -187,6 +191,25 @@ class PluginProperties : public Properties {
 
 std::chrono::seconds ResumeTimeout() { return std::chrono::seconds(5); }
 
+static std::pair<uint16_t, uint16_t> GetClientTerminalSize() {
+#ifdef _WIN32
+  CONSOLE_SCREEN_BUFFER_INFO csbi{};
+  HANDLE h = ::GetStdHandle(STD_OUTPUT_HANDLE);
+  if (h != INVALID_HANDLE_VALUE && ::GetConsoleScreenBufferInfo(h, &csbi)) {
+    int cols = csbi.srWindow.Right - csbi.srWindow.Left + 1;
+    int rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
+    if (cols > 0 && rows > 0)
+      return {static_cast<uint16_t>(cols), static_cast<uint16_t>(rows)};
+  }
+#elif LLDB_ENABLE_POSIX
+  struct winsize ws{};
+  if (::ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) == 0 && ws.ws_col > 0 &&
+      ws.ws_row > 0)
+    return {ws.ws_col, ws.ws_row};
+#endif
+  return {0, 0};
+}
+
 } // namespace
 
 static PluginProperties &GetGlobalPluginProperties() {
@@ -813,6 +836,9 @@ Status ProcessGDBRemote::DoLaunch(lldb_private::Module 
*exe_module,
     if (stderr_file_spec)
       m_gdb_comm.SetSTDERR(stderr_file_spec);
 
+    auto [terminal_cols, terminal_rows] = GetClientTerminalSize();
+    m_gdb_comm.SetSTDIOWindowSize(terminal_cols, terminal_rows);
+
     m_gdb_comm.SetDisableASLR(launch_flags & eLaunchFlagDisableASLR);
     m_gdb_comm.SetDetachOnError(launch_flags & eLaunchFlagDetachOnError);
 
diff --git a/lldb/source/Utility/StringExtractorGDBRemote.cpp 
b/lldb/source/Utility/StringExtractorGDBRemote.cpp
index 7b46bef933ac2..0bd20b47b42b8 100644
--- a/lldb/source/Utility/StringExtractorGDBRemote.cpp
+++ b/lldb/source/Utility/StringExtractorGDBRemote.cpp
@@ -120,6 +120,8 @@ StringExtractorGDBRemote::GetServerPacketType() const {
         return eServerPacketType_QSetSTDOUT;
       if (PACKET_STARTS_WITH("QSetSTDERR:"))
         return eServerPacketType_QSetSTDERR;
+      if (PACKET_STARTS_WITH("QSetSTDIOWindowSize:"))
+        return eServerPacketType_QSetSTDIOWindowSize;
       if (PACKET_STARTS_WITH("QSetWorkingDir:"))
         return eServerPacketType_QSetWorkingDir;
       if (PACKET_STARTS_WITH("QSetLogging:"))

>From 964d6a64719fae1ec1f1547a8c1ca355b56030b6 Mon Sep 17 00:00:00 2001
From: Charles Zablit <[email protected]>
Date: Tue, 2 Jun 2026 17:33:36 +0100
Subject: [PATCH 2/6] add documentation

---
 lldb/docs/resources/lldbgdbremote.md | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/lldb/docs/resources/lldbgdbremote.md 
b/lldb/docs/resources/lldbgdbremote.md
index 59a68e34e73d0..1f57766befc59 100644
--- a/lldb/docs/resources/lldbgdbremote.md
+++ b/lldb/docs/resources/lldbgdbremote.md
@@ -1181,6 +1181,30 @@ These packets must be sent  _prior_ to sending a "A" 
packet.
 a target after making a connection to a GDB server that isn't already 
connected to
 an inferior process.
 
+## QSetSTDIOWindowSize:cols=\<N\>;rows=\<N\>
+
+Set the terminal window size for the inferior's stdio pseudo-terminal prior to
+sending an "A" packet.
+
+When launching a program that uses a pseudo-terminal (PTY) for stdio, this
+packet specifies the initial terminal dimensions:
+```
+QSetSTDIOWindowSize:cols=<N>;rows=<N>
+```
+Both `cols` and `rows` must be non-zero unsigned 16-bit integers. The packet
+must be sent _prior_ to sending an "A" packet. On the server side, the
+dimensions are applied to the PTY via `TIOCSWINSZ` (POSIX) or the equivalent
+platform mechanism (e.g. `ConPTY` resize on Windows).
+
+The response is either:
+* `OK`: dimensions accepted.
+* `ENN`: malformed packet or zero value for `cols`/`rows`.
+* Empty/`+`: packet not supported; the client silently ignores this.
+
+**Priority To Implement:** Low. Only needed when the remote target launches a
+process with a PTY and the client wants the inferior's terminal to reflect the
+correct window size (e.g. for proper line-wrapping or full-screen TUI apps).
+
 ## QSetWorkingDir:\<ascii-hex-path\>
 
 Set the working directory prior to sending an "A" packet.

>From acc837eea7567b6428a53bb6a0e98be1fde8721a Mon Sep 17 00:00:00 2001
From: Charles Zablit <[email protected]>
Date: Tue, 2 Jun 2026 17:38:29 +0100
Subject: [PATCH 3/6] refactor parsing

---
 .../GDBRemoteCommunicationServerCommon.cpp        | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
index 5422be805dbf2..3e216ca687767 100644
--- 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
+++ 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
@@ -979,16 +979,21 @@ 
GDBRemoteCommunicationServerCommon::Handle_QSetSTDIOWindowSize(
   body.split(fields, ';');
   for (llvm::StringRef field : fields) {
     auto [key, value] = field.split('=');
+    uint16_t *dest;
+    if (key == "cols")
+      dest = &cols;
+    else if (key == "rows")
+      dest = &rows;
+    else
+      continue;
     unsigned parsed = 0;
     if (value.empty() || value.getAsInteger(10, parsed) || parsed > UINT16_MAX)
       continue;
-    if (key == "cols")
-      cols = static_cast<uint16_t>(parsed);
-    else if (key == "rows")
-      rows = static_cast<uint16_t>(parsed);
+    *dest = static_cast<uint16_t>(parsed);
   }
   if (cols == 0 || rows == 0)
-    return SendErrorResponse(17);
+    return SendErrorResponse(28);
+
   m_process_launch_info.SetSTDIOWindowSize(cols, rows);
   return SendOKResponse();
 }

>From a40587772455195424a91b19d666c8789dbc9c67 Mon Sep 17 00:00:00 2001
From: Charles Zablit <[email protected]>
Date: Tue, 2 Jun 2026 17:39:55 +0100
Subject: [PATCH 4/6] incorrect array size

---
 .../Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
index 3e216ca687767..d676699ef3176 100644
--- 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
+++ 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
@@ -975,7 +975,7 @@ 
GDBRemoteCommunicationServerCommon::Handle_QSetSTDIOWindowSize(
 
   uint16_t cols = 0;
   uint16_t rows = 0;
-  llvm::SmallVector<llvm::StringRef, 4> fields;
+  llvm::SmallVector<llvm::StringRef, 2> fields;
   body.split(fields, ';');
   for (llvm::StringRef field : fields) {
     auto [key, value] = field.split('=');

>From bceec1c452b49ee366fa0f9d2179319d44dbc230 Mon Sep 17 00:00:00 2001
From: Charles Zablit <[email protected]>
Date: Mon, 8 Jun 2026 18:06:40 +0100
Subject: [PATCH 5/6] address comments

---
 lldb/docs/resources/lldbgdbremote.md | 30 +++++++++++++++++-----------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/lldb/docs/resources/lldbgdbremote.md 
b/lldb/docs/resources/lldbgdbremote.md
index 1f57766befc59..54de3c171eb61 100644
--- a/lldb/docs/resources/lldbgdbremote.md
+++ b/lldb/docs/resources/lldbgdbremote.md
@@ -1184,26 +1184,32 @@ an inferior process.
 ## QSetSTDIOWindowSize:cols=\<N\>;rows=\<N\>
 
 Set the terminal window size for the inferior's stdio pseudo-terminal prior to
-sending an "A" packet.
+sending a launch args (`A`) packet.
 
-When launching a program that uses a pseudo-terminal (PTY) for stdio, this
-packet specifies the initial terminal dimensions:
+When launching a program whose stdio is connected to a pseudo-terminal (PTY),
+this packet specifies the initial terminal dimensions:
 ```
 QSetSTDIOWindowSize:cols=<N>;rows=<N>
 ```
-Both `cols` and `rows` must be non-zero unsigned 16-bit integers. The packet
-must be sent _prior_ to sending an "A" packet. On the server side, the
-dimensions are applied to the PTY via `TIOCSWINSZ` (POSIX) or the equivalent
-platform mechanism (e.g. `ConPTY` resize on Windows).
+Both `cols` and `rows` must be non-zero unsigned 16-bit integers. If sent,
+this packet must be sent _prior_ to the launch args (`A`) packet; sending it
+after the inferior has been launched has no effect. On the server side, the
+dimensions are stored and later applied to the PTY when the inferior is
+launched, via `TIOCSWINSZ` (POSIX) or the equivalent platform mechanism (e.g.
+`ConPTY` resize on Windows).
 
 The response is either:
-* `OK`: dimensions accepted.
-* `ENN`: malformed packet or zero value for `cols`/`rows`.
+* `OK`: dimensions accepted; they will be applied to the PTY when the
+  inferior is launched.
+* `ENN`: malformed packet.
 * Empty/`+`: packet not supported; the client silently ignores this.
 
-**Priority To Implement:** Low. Only needed when the remote target launches a
-process with a PTY and the client wants the inferior's terminal to reflect the
-correct window size (e.g. for proper line-wrapping or full-screen TUI apps).
+**Priority To Implement:** Low. Only needed when the inferior's stdio is
+connected to a PTY distinct from the terminal hosting lldb (for example, with
+`lldb-dap`, or when the debuggee is launched in its own terminal) and the
+client wants that PTY to reflect the correct window size  (e.g. for proper
+line-wrapping or full-screen TUI apps). This setting does not affect the 
terminal
+hosting the lldb CLI itself.
 
 ## QSetWorkingDir:\<ascii-hex-path\>
 

>From aa46cd6d9238960fdda9a9141ac760ddc18b763a Mon Sep 17 00:00:00 2001
From: Charles Zablit <[email protected]>
Date: Mon, 8 Jun 2026 18:14:03 +0100
Subject: [PATCH 6/6] remove dead code

---
 lldb/include/lldb/Host/ProcessLaunchInfo.h | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/lldb/include/lldb/Host/ProcessLaunchInfo.h 
b/lldb/include/lldb/Host/ProcessLaunchInfo.h
index 7b22e535c3268..99f4d48aa4f27 100644
--- a/lldb/include/lldb/Host/ProcessLaunchInfo.h
+++ b/lldb/include/lldb/Host/ProcessLaunchInfo.h
@@ -179,7 +179,6 @@ class ProcessLaunchInfo : public ProcessInfo {
   struct STDIOWindowSize {
     uint16_t cols = 0;
     uint16_t rows = 0;
-    bool IsSet() const { return cols != 0 && rows != 0; }
   };
 
   void SetSTDIOWindowSize(uint16_t cols, uint16_t rows) {
@@ -187,10 +186,6 @@ class ProcessLaunchInfo : public ProcessInfo {
     m_stdio_window_size.rows = rows;
   }
 
-  const STDIOWindowSize &GetSTDIOWindowSize() const {
-    return m_stdio_window_size;
-  }
-
 protected:
   FileSpec m_working_dir;
   std::string m_plugin_name;

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

Reply via email to