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

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

---
 clang/tools/libclang/CMakeLists.txt |  4 ++++
 clang/tools/libclang/DllMain.cpp    | 24 ++++++++++++++++++++++++
 2 files changed, 28 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..262525e65e055
--- /dev/null
+++ b/clang/tools/libclang/DllMain.cpp
@@ -0,0 +1,24 @@
+
+
+#include <windows.h>
+
+extern "C" {
+
+int rpmalloc_initialize(void);
+void rpmalloc_finalize(void);
+void rpmalloc_thread_initialize(void);
+void rpmalloc_thread_finalize(int release_caches);
+
+BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) {
+  if (reason == DLL_PROCESS_ATTACH) {
+    rpmalloc_initialize();
+  } else if (reason == DLL_PROCESS_DETACH) {
+    rpmalloc_finalize();
+  } else if (reason == DLL_THREAD_ATTACH) {
+    rpmalloc_thread_initialize();
+  } else if (reason == DLL_THREAD_DETACH) {
+    rpmalloc_thread_finalize(1);
+  }
+  return TRUE;
+}
+}

>From 2fe79f3f887e1e103dbfde12176f142f9941ab2a Mon Sep 17 00:00:00 2001
From: GkvJwa <[email protected]>
Date: Wed, 10 Dec 2025 01:07:53 +0800
Subject: [PATCH 2/3] Add license

---
 clang/tools/libclang/DllMain.cpp | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/clang/tools/libclang/DllMain.cpp b/clang/tools/libclang/DllMain.cpp
index 262525e65e055..57443dd902e3f 100644
--- a/clang/tools/libclang/DllMain.cpp
+++ b/clang/tools/libclang/DllMain.cpp
@@ -1,4 +1,10 @@
-
+//===- 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>
 

>From 36c966b5be46b76226687d7e0bda2a0462a8ec09 Mon Sep 17 00:00:00 2001
From: GkvJwa <[email protected]>
Date: Wed, 10 Dec 2025 01:12:38 +0800
Subject: [PATCH 3/3] Use switch

---
 clang/tools/libclang/DllMain.cpp | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/clang/tools/libclang/DllMain.cpp b/clang/tools/libclang/DllMain.cpp
index 57443dd902e3f..201b224e22af9 100644
--- a/clang/tools/libclang/DllMain.cpp
+++ b/clang/tools/libclang/DllMain.cpp
@@ -16,13 +16,14 @@ void rpmalloc_thread_initialize(void);
 void rpmalloc_thread_finalize(int release_caches);
 
 BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) {
-  if (reason == DLL_PROCESS_ATTACH) {
+  switch (reason) {
+  case DLL_PROCESS_ATTACH:
     rpmalloc_initialize();
-  } else if (reason == DLL_PROCESS_DETACH) {
+  case DLL_PROCESS_DETACH:
     rpmalloc_finalize();
-  } else if (reason == DLL_THREAD_ATTACH) {
+  case DLL_THREAD_ATTACH:
     rpmalloc_thread_initialize();
-  } else if (reason == DLL_THREAD_DETACH) {
+  case DLL_THREAD_DETACH:
     rpmalloc_thread_finalize(1);
   }
   return TRUE;

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

Reply via email to