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 b2674b2f2214afca510201ade7925172c867e489..717c030e4c680ab6bf26d5caf42405fdff45c21c 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 1cc3b728b3eda585abd5d60220f51786c4096fd2..93e162a9936a49d2710b4de74f38f763513790cd 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
 }