[clang] Add DllMain entry point to `libclang.dll` (PR #171465)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 9 09:47:37 PST 2025
https://github.com/GkvJwa updated https://github.com/llvm/llvm-project/pull/171465
>From 782033f1eedce4d654704f057652069472d2c586 Mon Sep 17 00:00:00 2001
From: GkvJwa <gkvjwa at gmail.com>
Date: Tue, 9 Dec 2025 23:55:02 +0800
Subject: [PATCH 1/6] 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 <gkvjwa at gmail.com>
Date: Wed, 10 Dec 2025 01:07:53 +0800
Subject: [PATCH 2/6] 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 <gkvjwa at gmail.com>
Date: Wed, 10 Dec 2025 01:12:38 +0800
Subject: [PATCH 3/6] 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;
>From c4bef3392349c8a3274c6bd31e02a1daf13d5ce5 Mon Sep 17 00:00:00 2001
From: GkvJwa <gkvjwa at gmail.com>
Date: Wed, 10 Dec 2025 01:22:34 +0800
Subject: [PATCH 4/6] Use switch
---
clang/tools/libclang/DllMain.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/clang/tools/libclang/DllMain.cpp b/clang/tools/libclang/DllMain.cpp
index 201b224e22af9..c19fc13290393 100644
--- a/clang/tools/libclang/DllMain.cpp
+++ b/clang/tools/libclang/DllMain.cpp
@@ -19,12 +19,16 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) {
switch (reason) {
case DLL_PROCESS_ATTACH:
rpmalloc_initialize();
+ break;
case DLL_PROCESS_DETACH:
rpmalloc_finalize();
+ break;
case DLL_THREAD_ATTACH:
rpmalloc_thread_initialize();
+ break;
case DLL_THREAD_DETACH:
rpmalloc_thread_finalize(1);
+ break;
}
return TRUE;
}
>From c74509703c2631ebf58bc4492942447817500185 Mon Sep 17 00:00:00 2001
From: GkvJwa <gkvjwa at gmail.com>
Date: Wed, 10 Dec 2025 01:37:20 +0800
Subject: [PATCH 5/6] No need process DLL_PROCESS_ATTACH
---
clang/tools/libclang/DllMain.cpp | 2 --
1 file changed, 2 deletions(-)
diff --git a/clang/tools/libclang/DllMain.cpp b/clang/tools/libclang/DllMain.cpp
index c19fc13290393..ebdbabb465882 100644
--- a/clang/tools/libclang/DllMain.cpp
+++ b/clang/tools/libclang/DllMain.cpp
@@ -10,7 +10,6 @@
extern "C" {
-int rpmalloc_initialize(void);
void rpmalloc_finalize(void);
void rpmalloc_thread_initialize(void);
void rpmalloc_thread_finalize(int release_caches);
@@ -18,7 +17,6 @@ void rpmalloc_thread_finalize(int release_caches);
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) {
switch (reason) {
case DLL_PROCESS_ATTACH:
- rpmalloc_initialize();
break;
case DLL_PROCESS_DETACH:
rpmalloc_finalize();
>From 388c0d3318a557e6699e4656aaa63045e0ba0451 Mon Sep 17 00:00:00 2001
From: GkvJwa <gkvjwa at gmail.com>
Date: Wed, 10 Dec 2025 01:47:20 +0800
Subject: [PATCH 6/6] no proces DLL_THREAD_ATTACH
---
clang/tools/libclang/DllMain.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/clang/tools/libclang/DllMain.cpp b/clang/tools/libclang/DllMain.cpp
index ebdbabb465882..28052b89bcc09 100644
--- a/clang/tools/libclang/DllMain.cpp
+++ b/clang/tools/libclang/DllMain.cpp
@@ -22,7 +22,6 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) {
rpmalloc_finalize();
break;
case DLL_THREAD_ATTACH:
- rpmalloc_thread_initialize();
break;
case DLL_THREAD_DETACH:
rpmalloc_thread_finalize(1);
More information about the cfe-commits
mailing list