[llvm] Add DllMain entry point to `libclang.dll` (PR #171465)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 10 00:25:17 PST 2025
https://github.com/GkvJwa updated https://github.com/llvm/llvm-project/pull/171465
>From 93d6745318585c3a904d68bc61bd989b018f379c Mon Sep 17 00:00:00 2001
From: GkvJwa <gkvjwa at gmail.com>
Date: Wed, 10 Dec 2025 16:00:39 +0800
Subject: [PATCH 1/2] Add RPMALLOC TLS support for Windows
---
llvm/lib/Support/rpmalloc/rpmalloc.c | 41 ++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/llvm/lib/Support/rpmalloc/rpmalloc.c b/llvm/lib/Support/rpmalloc/rpmalloc.c
index 6f8b29e31e8ca..fec33f33abae2 100644
--- a/llvm/lib/Support/rpmalloc/rpmalloc.c
+++ b/llvm/lib/Support/rpmalloc/rpmalloc.c
@@ -969,6 +969,47 @@ static void _rpmalloc_spin(void) {
}
#if defined(_WIN32) && (!defined(BUILD_DYNAMIC_LINK) || !BUILD_DYNAMIC_LINK)
+
+static void NTAPI RPMallocTlsOnThreadExit(PVOID module, DWORD reason,
+ PVOID 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;
+ }
+}
+
+#ifdef _WIN64
+#pragma comment(linker, "/INCLUDE:_tls_used")
+#pragma comment(linker, "/INCLUDE:rpmalloc_tls_thread_exit_callback")
+
+#pragma const_seg(".CRT$XLY")
+
+extern const PIMAGE_TLS_CALLBACK rpmalloc_tls_thread_exit_callback;
+const PIMAGE_TLS_CALLBACK rpmalloc_tls_thread_exit_callback =
+ RPMallocTlsOnThreadExit;
+
+// Reset const section
+#pragma const_seg()
+#else // _WIN64
+#pragma comment(linker, "/INCLUDE:__tls_used")
+#pragma comment(linker, "/INCLUDE:_rpmalloc_tls_thread_exit_callback")
+
+#pragma data_seg(".CRT$XLY")
+
+PIMAGE_TLS_CALLBACK rpmalloc_tls_thread_exit_callback = RPMallocTlsOnThreadExit;
+
+// Reset data section
+#pragma data_seg()
+#endif // _WIN64
+
static void NTAPI _rpmalloc_thread_destructor(void *value) {
#if ENABLE_OVERRIDE
// If this is called on main thread it means rpmalloc_finalize
>From f78c03dc418632d839519bfb8a737228d27a681f Mon Sep 17 00:00:00 2001
From: GkvJwa <gkvjwa at gmail.com>
Date: Wed, 10 Dec 2025 16:25:08 +0800
Subject: [PATCH 2/2] test
---
llvm/lib/Support/rpmalloc/rpmalloc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Support/rpmalloc/rpmalloc.c b/llvm/lib/Support/rpmalloc/rpmalloc.c
index fec33f33abae2..6f495e4c7c532 100644
--- a/llvm/lib/Support/rpmalloc/rpmalloc.c
+++ b/llvm/lib/Support/rpmalloc/rpmalloc.c
@@ -969,7 +969,6 @@ static void _rpmalloc_spin(void) {
}
#if defined(_WIN32) && (!defined(BUILD_DYNAMIC_LINK) || !BUILD_DYNAMIC_LINK)
-
static void NTAPI RPMallocTlsOnThreadExit(PVOID module, DWORD reason,
PVOID reserved) {
switch (reason) {
@@ -4035,3 +4034,4 @@ extern inline rpmalloc_heap_t *rpmalloc_get_heap_for_ptr(void *ptr) {
#endif
void rpmalloc_linker_reference(void) { (void)sizeof(_rpmalloc_initialized); }
+
More information about the llvm-commits
mailing list