From 89b1fd98acef2ed706025680989ced0b0eaf3761 Mon Sep 17 00:00:00 2001 From: Andy Polyakov Date: Wed, 13 Apr 2005 08:49:51 +0000 Subject: [PATCH] Backport OPENSSL_NONPIC_relocated from HEAD. --- crypto/cryptlib.c | 17 +++++++++++++++++ crypto/cryptlib.h | 1 + 2 files changed, 18 insertions(+) diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index fd54b7c2e8..c2cef2204d 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -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; diff --git a/crypto/cryptlib.h b/crypto/cryptlib.h index b2f24007a0..6f59e08ca6 100644 --- a/crypto/cryptlib.h +++ b/crypto/cryptlib.h @@ -95,6 +95,7 @@ extern "C" { void OPENSSL_showfatal(const char *,...); void *OPENSSL_stderr(void); +extern int OPENSSL_NONPIC_relocated; #ifdef __cplusplus } -- 2.25.1