https://github.com/GkvJwa updated 
https://github.com/llvm/llvm-project/pull/171465

>From 9ea767497b9af2a3f13e3b6e05de9574a47313a8 Mon Sep 17 00:00:00 2001
From: GkvJwa <[email protected]>
Date: Tue, 9 Dec 2025 23:55:02 +0800
Subject: [PATCH] Add DllMain entry point to libclang.dll

---
 clang/tools/libclang/CMakeLists.txt |  4 ++++
 clang/tools/libclang/DllMain.cpp    | 31 +++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+)
 create mode 100644 clang/tools/libclang/DllMain.cpp

diff --git a/clang/tools/libclang/CMakeLists.txt 
b/clang/tools/libclang/CMakeLists.txt
index b0105f5a5f79f..a3b95fd49b68d 100644
--- a/clang/tools/libclang/CMakeLists.txt
+++ b/clang/tools/libclang/CMakeLists.txt
@@ -135,6 +135,7 @@ endif()
 add_clang_library(libclang ${ENABLE_SHARED} ${ENABLE_STATIC} 
INSTALL_WITH_TOOLCHAIN
   OUTPUT_NAME ${output_name}
   ${SOURCES}
+  PARTIAL_SOURCES_INTENDED
 
   DEPENDS
   ClangDriverOptions
@@ -168,6 +169,9 @@ if(ENABLE_SHARED)
       # If llvm/libclang-cpp dll is also being built for windows clang c++ 
symbols will still be
       # implicitly be exported from libclang.
       target_compile_definitions(libclang PRIVATE CLANG_BUILD_STATIC)
+      if(LLVM_ENABLE_RPMALLOC)
+        target_sources(libclang PRIVATE DllMain.cpp)
+      endif()
   elseif(APPLE)
     set(LIBCLANG_LINK_FLAGS " -Wl,-compatibility_version -Wl,1")
     set(LIBCLANG_LINK_FLAGS "${LIBCLANG_LINK_FLAGS} -Wl,-current_version 
-Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}")
diff --git a/clang/tools/libclang/DllMain.cpp b/clang/tools/libclang/DllMain.cpp
new file mode 100644
index 0000000000000..fe33fde5f929b
--- /dev/null
+++ b/clang/tools/libclang/DllMain.cpp
@@ -0,0 +1,31 @@
+//===- DllMain.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 <windows.h>
+
+extern "C" {
+
+void rpmalloc_finalize(void);
+void rpmalloc_thread_finalize(int release_caches);
+
+BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) {
+  switch (reason) {
+  case DLL_PROCESS_ATTACH:
+    break;
+  case DLL_PROCESS_DETACH:
+    rpmalloc_finalize();
+    break;
+  case DLL_THREAD_ATTACH:
+    break;
+  case DLL_THREAD_DETACH:
+    rpmalloc_thread_finalize(1);
+    break;
+  }
+  return TRUE;
+}
+}

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

Reply via email to