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/4] 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/4] 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/4] 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 <[email protected]> Date: Wed, 10 Dec 2025 01:22:34 +0800 Subject: [PATCH 4/4] 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; } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
