Backport OPENSSL_NONPIC_relocated from HEAD.
authorAndy Polyakov <appro@openssl.org>
Wed, 13 Apr 2005 08:49:51 +0000 (08:49 +0000)
committerAndy Polyakov <appro@openssl.org>
Wed, 13 Apr 2005 08:49:51 +0000 (08:49 +0000)
crypto/cryptlib.c
crypto/cryptlib.h

index fd54b7c2e8d29110ab60e24f0c6e34c9db80f1d7..c2cef2204dccf50e9e55ba66d60f56545636190f 100644 (file)
@@ -480,6 +480,8 @@ const char *CRYPTO_get_lock_name(int type)
                return(sk_value(app_locks,type-CRYPTO_NUM_LOCKS));
        }
 
+int OPENSSL_NONPIC_relocated=0;
+
 #if defined(_WIN32) && defined(_WINDLL)
 
 /* All we really need to do is remove the 'error' state when a thread
@@ -491,6 +493,21 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
        switch(fdwReason)
                {
        case DLL_PROCESS_ATTACH:
+#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 b2f24007a04566aaca9c3950d42d941cdfc6330d..6f59e08ca6365245c78f6da38535fbff2673e35d 100644 (file)
@@ -95,6 +95,7 @@ extern "C" {
 
 void OPENSSL_showfatal(const char *,...);
 void *OPENSSL_stderr(void);
+extern int OPENSSL_NONPIC_relocated;
 
 #ifdef  __cplusplus
 }