Introduce OPENSSL_NONPIC_relocated to denote relocated DLLs.
authorAndy Polyakov <appro@openssl.org>
Wed, 13 Apr 2005 08:46:35 +0000 (08:46 +0000)
committerAndy Polyakov <appro@openssl.org>
Wed, 13 Apr 2005 08:46:35 +0000 (08:46 +0000)
crypto/cryptlib.c
crypto/cryptlib.h

index b2674b2..717c030 100644 (file)
@@ -545,6 +545,7 @@ const char *CRYPTO_get_lock_name(int type)
 
 unsigned long  OPENSSL_ia32cap_P=0;
 unsigned long *OPENSSL_ia32cap_loc(void) { return &OPENSSL_ia32cap_P; }
+int OPENSSL_NONPIC_relocated=0;
 
 #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY)
 #define OPENSSL_CPUID_SETUP
@@ -589,6 +590,21 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
                {
        case DLL_PROCESS_ATTACH:
                OPENSSL_cpuid_setup();
+#if defined(_WIN32_WINNT)
+               {
+               IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hinstDLL;
+               IMAGE_NT_HEADERS *nt_headers;
+
+               if (dos_header->e_magic==IMAGE_DOS_SIGNATURE)
+                       {
+                       nt_headers = (IMAGE_NT_HEADERS *)((char *)dos_header
+                                               + dos_header->e_lfanew);
+                       if (nt_headers->Signature==IMAGE_NT_SIGNATURE &&
+                           histDLL!=(HINSTANCE)(nt_headers->OptionalHeader.ImageBase))
+                               OPENSSL_NONPIC_relocated=1;
+                       }
+               }
+#endif
                break;
        case DLL_THREAD_ATTACH:
                break;
index 1cc3b72..93e162a 100644 (file)
@@ -97,6 +97,7 @@ void OPENSSL_cpuid_setup(void);
 extern unsigned long OPENSSL_ia32cap_P;
 void OPENSSL_showfatal(const char *,...);
 void *OPENSSL_stderr(void);
+extern int OPENSSL_NONPIC_relocated;
 
 #ifdef  __cplusplus
 }