[Lldb-commits] [lldb] [lldb][Windows] Translate file descriptors between CRT instances (PR #217126)

via lldb-commits lldb-commits at lists.llvm.org
Wed Sep 9 22:12:12 PDT 2026


================
@@ -1000,6 +1004,63 @@ bool PythonFile::Check(PyObject *py_obj) {
   return !!r;
 }
 
+#if defined(_WIN32) && !defined(_DLL)
+// When LLVM is built with a different CRT allocator, it's built against the
+// static C runtime. The official Python builds link to the dynamic C runtime.
+// Since the file descriptors are managed per CRT instance, liblldb and Python
+// have different fd mappings. This translates between the two using the msvcrt
+// module.
+int PythonFile::TranslateFdToPython(int our_fd) {
+  intptr_t handle = _get_osfhandle(our_fd);
+  if (handle == 0 || (HANDLE)handle == INVALID_HANDLE_VALUE)
+    return -1;
+
+  PyObject *msvcrt = PyImport_ImportModule("msvcrt");
+  if (!msvcrt)
+    return -1;
+  PyObject *open_osf = PyObject_GetAttrString(msvcrt, "open_osfhandle");
+  Py_XDECREF(msvcrt);
+  if (!open_osf)
+    return -1;
+  PyObject *fd_obj =
+      PyObject_CallFunction(open_osf, "Li", (long long)handle, 0);
----------------
Nerixyz wrote:

[PEP 384](https://peps.python.org/pep-0384/#excluded-functions) mentions that all functions listed in `PC/python3.def` are part of the limited and thus stable ABI - `PyObject_CallFunction` is there:  https://github.com/python/cpython/blob/39b2f82717a69dde7212bc39b673b0f55c99e6a3/PC/python3.def#L453

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


More information about the lldb-commits mailing list