summaryrefslogtreecommitdiffstats
path: root/crypto
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
parent8861ba355d20542bc2bb216c92b42ecc88b0a556 (diff)
Introduce OPENSSL_NONPIC_relocated to denote relocated DLLs.
Diffstat (limited to 'crypto')
-rw-r--r--crypto/cryptlib.c16
-rw-r--r--crypto/cryptlib.h1
2 files changed, 17 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;
diff --git a/crypto/cryptlib.h b/crypto/cryptlib.h
index 1cc3b728b3..93e162a993 100644
--- a/crypto/cryptlib.h
+++ b/crypto/cryptlib.h
@@ -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
}