Allow for extrnal DllMain.
This commit is contained in:
parent
5e10ca5618
commit
fe93a60b00
@ -270,7 +270,7 @@ int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,
|
|||||||
|
|
||||||
#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
|
#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
|
||||||
defined(__INTEL__) || \
|
defined(__INTEL__) || \
|
||||||
defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64)
|
defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64)
|
||||||
|
|
||||||
unsigned long OPENSSL_ia32cap_P=0;
|
unsigned long OPENSSL_ia32cap_P=0;
|
||||||
unsigned long *OPENSSL_ia32cap_loc(void) { return &OPENSSL_ia32cap_P; }
|
unsigned long *OPENSSL_ia32cap_loc(void) { return &OPENSSL_ia32cap_P; }
|
||||||
@ -306,6 +306,62 @@ void OPENSSL_cpuid_setup(void) {}
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL)
|
#if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL)
|
||||||
|
|
||||||
|
#ifdef OPENSSL_FIPS
|
||||||
|
|
||||||
|
#include <tlhelp32.h>
|
||||||
|
#if defined(__GNUC__) && __GNUC__>=2
|
||||||
|
static int DllInit(void) __attribute__((constructor));
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
static int DllInit(void);
|
||||||
|
# ifdef _WIN64
|
||||||
|
# pragma section(".CRT$XCU",read)
|
||||||
|
__declspec(allocate(".CRT$XCU"))
|
||||||
|
# else
|
||||||
|
# pragma data_seg(".CRT$XCU")
|
||||||
|
# endif
|
||||||
|
static int (*p)(void) = DllInit;
|
||||||
|
# pragma data_seg()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int DllInit(void)
|
||||||
|
{
|
||||||
|
#if defined(_WIN32_WINNT)
|
||||||
|
union { int(*f)(void); BYTE *p; } t = { DllInit };
|
||||||
|
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
|
||||||
|
IMAGE_DOS_HEADER *dos_header;
|
||||||
|
IMAGE_NT_HEADERS *nt_headers;
|
||||||
|
MODULEENTRY32 me32 = {sizeof(me32)};
|
||||||
|
|
||||||
|
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0);
|
||||||
|
if (hModuleSnap != INVALID_HANDLE_VALUE &&
|
||||||
|
Module32First(hModuleSnap,&me32)) do
|
||||||
|
{
|
||||||
|
if (t.p >= me32.modBaseAddr &&
|
||||||
|
t.p < me32.modBaseAddr+me32.modBaseSize)
|
||||||
|
{
|
||||||
|
dos_header=(IMAGE_DOS_HEADER *)me32.modBaseAddr;
|
||||||
|
if (dos_header->e_magic==IMAGE_DOS_SIGNATURE)
|
||||||
|
{
|
||||||
|
nt_headers=(IMAGE_NT_HEADERS *)
|
||||||
|
((BYTE *)dos_header+dos_header->e_lfanew);
|
||||||
|
if (nt_headers->Signature==IMAGE_NT_SIGNATURE &&
|
||||||
|
me32.modBaseAddr!=(BYTE*)nt_headers->OptionalHeader.ImageBase)
|
||||||
|
OPENSSL_NONPIC_relocated=1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (Module32Next(hModuleSnap,&me32));
|
||||||
|
|
||||||
|
if (hModuleSnap != INVALID_HANDLE_VALUE)
|
||||||
|
CloseHandle(hModuleSnap);
|
||||||
|
#endif
|
||||||
|
OPENSSL_cpuid_setup();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
#ifdef __CYGWIN__
|
#ifdef __CYGWIN__
|
||||||
/* pick DLL_[PROCESS|THREAD]_[ATTACH|DETACH] definitions */
|
/* pick DLL_[PROCESS|THREAD]_[ATTACH|DETACH] definitions */
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -349,6 +405,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user