[clang] Add DllMain entry point to `libclang.dll` (PR #171465)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 9 09:12:54 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/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 <gkvjwa at gmail.com>
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 <gkvjwa at gmail.com>
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;
More information about the cfe-commits
mailing list