================
@@ -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) {
----------------
GkvJwa wrote:
```
static BOOL __cdecl dllmain_dispatch(
HINSTANCE const instance,
DWORD const reason,
LPVOID const reserved
)
{
...
if (reason == DLL_PROCESS_ATTACH || reason == DLL_THREAD_ATTACH)
{
result = dllmain_raw(instance, reason, reserved);
if (!result)
__leave;
result = dllmain_crt_dispatch(instance, reason, reserved);
if (!result)
__leave;
}
result = DllMain(instance, reason, reserved);
// If the client DllMain routine failed, unwind the initialization:
if (reason == DLL_PROCESS_ATTACH && !result)
static BOOL WINAPI dllmain_raw(
HINSTANCE const instance,
DWORD const reason,
LPVOID const reserved
)
{
if (!_pRawDllMain)
return TRUE;
return _pRawDllMain(instance, reason, reserved);
}
```
I debugged it, and when DllMain exists and DLL_PROCESS_ATTACH is being
processed, it directly jumps to dllmain.
When DLL_PROCESS_ATTACH is not handled, the crt will proceed to the default
path and then to dllmain.
```
1.
libclang.dll!DllMain(HINSTANCE__ * instance, unsigned long reason, void
* reserved) Line 18 C++ Symbols loaded.
> libclang.dll!dllmain_dispatch(HINSTANCE__ * const instance, const
> unsigned long reason, void * const reserved) Line 281 C++ Non-user code.
> Symbols loaded.
2.
> libclang.dll!__acrt_execute_initializers(const __acrt_initializer *
> first, const __acrt_initializer * last) Line 25 C++ Symbols loaded.
libclang.dll!__scrt_initialize_crt(__scrt_module_type module_type) Line
199 C++ Non-user code. Symbols loaded.
libclang.dll!dllmain_crt_process_attach(HINSTANCE__ * const instance,
void * const reserved) Line 35 C++ Non-user code. Symbols loaded.
libclang.dll!dllmain_dispatch(HINSTANCE__ * const instance, const
unsigned long reason, void * const reserved) Line 276 C++ Non-user code.
Symbols loaded.
```
https://github.com/llvm/llvm-project/pull/171465
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits