================
@@ -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

Reply via email to