summaryrefslogtreecommitdiffstats
path: root/crypto/cryptlib.c
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2005-04-13 08:46:35 +0000
committerAndy Polyakov <appro@openssl.org>2005-04-13 08:46:35 +0000
commit51d28013db89b6ebecd0c89bd7f527aeddda0a98 (patch)
tree1b566427a0de43104837b12198500f4d0970ba3b /crypto/cryptlib.c
parent8861ba355d20542bc2bb216c92b42ecc88b0a556 (diff)
Introduce OPENSSL_NONPIC_relocated to denote relocated DLLs.
Diffstat (limited to 'crypto/cryptlib.c')
-rw-r--r--crypto/cryptlib.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c
index b2674b2f22..717c030e4c 100644
--- a/crypto/cryptlib.c
+++ b/crypto/cryptlib.c
@@ -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;