提交 51ff6bde 编写于 作者: A Andy Polyakov

Engage Applink in mingw. Note that application-side module is not

compiled into *our* aplpications. That's because mingw is always
consistent with itself. Having library-side code linked into .dll
makes it possible to deploy the .dll with user-code compiled with
another compiler [which is pretty much the whole point behind Applink].
上级 28e4fe34
...@@ -472,7 +472,7 @@ my %table=( ...@@ -472,7 +472,7 @@ my %table=(
"BC-32","bcc32::::WIN32::BN_LLONG DES_PTR RC4_INDEX EXPORT_VAR_AS_FN:${no_asm}:win32", "BC-32","bcc32::::WIN32::BN_LLONG DES_PTR RC4_INDEX EXPORT_VAR_AS_FN:${no_asm}:win32",
# MinGW # MinGW
"mingw", "gcc:-mno-cygwin -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall -D_WIN32_WINNT=0x333:::MINGW32:-lwsock32 -lgdi32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts} EXPORT_VAR_AS_FN:${x86_coff_asm}:win32:cygwin-shared:-D_WINDLL:-mno-cygwin -shared:.dll.a", "mingw", "gcc:-mno-cygwin -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall -D_WIN32_WINNT=0x333:::MINGW32:-lwsock32 -lgdi32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts} EXPORT_VAR_AS_FN:${x86_coff_asm}:win32:cygwin-shared:-D_WINDLL -DOPENSSL_USE_APPLINK:-mno-cygwin -shared:.dll.a",
# UWIN # UWIN
"UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32", "UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
...@@ -1133,6 +1133,7 @@ else ...@@ -1133,6 +1133,7 @@ else
$openssl_other_defines.="#define OPENSSL_NO_STATIC_ENGINE\n"; $openssl_other_defines.="#define OPENSSL_NO_STATIC_ENGINE\n";
} }
$cpuid_obj.=" uplink.o uplink-cof.o" if ($cflags =~ /\-DOPENSSL_USE_APPLINK/);
# Compiler fix-ups # Compiler fix-ups
if ($target =~ /icc$/) if ($target =~ /icc$/)
{ {
......
...@@ -2991,7 +2991,7 @@ $rmd160_obj = rm86-cof.o ...@@ -2991,7 +2991,7 @@ $rmd160_obj = rm86-cof.o
$rc5_obj = r586-cof.o $rc5_obj = r586-cof.o
$dso_scheme = win32 $dso_scheme = win32
$shared_target= cygwin-shared $shared_target= cygwin-shared
$shared_cflag = -D_WINDLL $shared_cflag = -D_WINDLL -DOPENSSL_USE_APPLINK
$shared_ldflag = -mno-cygwin -shared $shared_ldflag = -mno-cygwin -shared
$shared_extension = .dll.a $shared_extension = .dll.a
$ranlib = $ranlib =
......
...@@ -67,6 +67,12 @@ x86cpuid-cof.s: x86cpuid.pl perlasm/x86asm.pl ...@@ -67,6 +67,12 @@ x86cpuid-cof.s: x86cpuid.pl perlasm/x86asm.pl
x86cpuid-out.s: x86cpuid.pl perlasm/x86asm.pl x86cpuid-out.s: x86cpuid.pl perlasm/x86asm.pl
$(PERL) x86cpuid.pl a.out $(CFLAGS) $(PROCESSOR) > $@ $(PERL) x86cpuid.pl a.out $(CFLAGS) $(PROCESSOR) > $@
uplink.o: ../ms/uplink.c
$(CC) $(CFLAGS) -c -o $@ ../ms/uplink.c
uplink-cof.s: ../ms/uplink.pl
$(PERL) ../ms/uplink.pl coff > $@
x86_64cpuid.s: x86_64cpuid.pl x86_64cpuid.s: x86_64cpuid.pl
$(PERL) x86_64cpuid.pl $@ $(PERL) x86_64cpuid.pl $@
ia64cpuid.s: ia64cpuid.S ia64cpuid.s: ia64cpuid.S
......
...@@ -236,12 +236,17 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr) ...@@ -236,12 +236,17 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr)
b->shutdown=(int)num&BIO_CLOSE; b->shutdown=(int)num&BIO_CLOSE;
b->ptr=ptr; b->ptr=ptr;
b->init=1; b->init=1;
#if BIO_FLAGS_UPLINK!=0 && defined(_IOB_ENTRIES) #if BIO_FLAGS_UPLINK!=0
#if defined(__MINGW32__) && defined(__MSVCRT__) && !defined(_IOB_ENTRIES)
#define _IOB_ENTRIES 20
#endif
#if defined(_IOB_ENTRIES)
/* Safety net to catch purely internal BIO_set_fp calls */ /* Safety net to catch purely internal BIO_set_fp calls */
if ((size_t)ptr >= (size_t)stdin && if ((size_t)ptr >= (size_t)stdin &&
(size_t)ptr < (size_t)(stdin+_IOB_ENTRIES)) (size_t)ptr < (size_t)(stdin+_IOB_ENTRIES))
BIO_clear_flags(b,BIO_FLAGS_UPLINK); BIO_clear_flags(b,BIO_FLAGS_UPLINK);
#endif #endif
#endif
#ifdef UP_fsetmode #ifdef UP_fsetmode
if (b->flags&BIO_FLAGS_UPLINK) if (b->flags&BIO_FLAGS_UPLINK)
UP_fsetmode(b->ptr,num&BIO_FP_TEXT?'t':'b'); UP_fsetmode(b->ptr,num&BIO_FP_TEXT?'t':'b');
......
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
#ifdef OPENSSL_USE_APPLINK #ifdef OPENSSL_USE_APPLINK
#define BIO_FLAGS_UPLINK 0x8000 #define BIO_FLAGS_UPLINK 0x8000
#include "uplink.h" #include "ms/uplink.h"
#endif #endif
#include <openssl/crypto.h> #include <openssl/crypto.h>
......
...@@ -44,7 +44,7 @@ print <<___; ...@@ -44,7 +44,7 @@ print <<___;
.align 4 .align 4
.Lazy$i: .Lazy$i:
pushl \$$i pushl \$$i
pushl _OPENSSL_UplinkTable pushl \$_OPENSSL_UplinkTable
call _OPENSSL_Uplink call _OPENSSL_Uplink
addl \$8,%esp addl \$8,%esp
jmp *(_OPENSSL_UplinkTable+4*$i) jmp *(_OPENSSL_UplinkTable+4*$i)
......
...@@ -99,23 +99,18 @@ if ($shlib) ...@@ -99,23 +99,18 @@ if ($shlib)
# Engage Applink... # Engage Applink...
# #
$app_ex_obj.=" \$(OBJ_D)\\applink.obj /implib:\$(TMP_D)\\junk.lib"; $app_ex_obj.=" \$(OBJ_D)\\applink.obj /implib:\$(TMP_D)\\junk.lib";
$cflags.=" -DOPENSSL_USE_APPLINK"; $cflags.=" -DOPENSSL_USE_APPLINK -I.";
# I'm open for better suggestions than overriding $banner... # I'm open for better suggestions than overriding $banner...
$banner=<<'___'; $banner=<<'___';
@echo Building OpenSSL @echo Building OpenSSL
$(OBJ_D)\applink.obj: ms\applink.c $(OBJ_D)\applink.obj: ms\applink.c
$(CC) /Fo$(OBJ_D)\applink.obj $(APP_CFLAGS) -c ms\applink.c $(CC) /Fo$(OBJ_D)\applink.obj $(APP_CFLAGS) -c ms\applink.c
$(OBJ_D)\uplink.obj: ms\uplink.c $(OBJ_D)\applink.c $(OBJ_D)\uplink.obj: ms\uplink.c ms\applink.c
$(CC) /Fo$(OBJ_D)\uplink.obj $(SHLIB_CFLAGS) -c ms\uplink.c $(CC) /Fo$(OBJ_D)\uplink.obj $(SHLIB_CFLAGS) -c ms\uplink.c
$(INCL_D)\uplink.h: ms\uplink.h
$(CP) ms\uplink.h $(INCL_D)\uplink.h
$(INCO_D)\applink.c: ms\applink.c $(INCO_D)\applink.c: ms\applink.c
$(CP) ms\applink.c $(INCO_D)\applink.c $(CP) ms\applink.c $(INCO_D)\applink.c
$(OBJ_D)\applink.c: ms\applink.c
$(CP) ms\applink.c $(OBJ_D)\applink.c
HEADER=$(HEADER) $(INCL_D)\uplink.h
EXHEADER= $(EXHEADER) $(INCO_D)\applink.c EXHEADER= $(EXHEADER) $(INCO_D)\applink.c
LIBS_DEP=$(LIBS_DEP) $(OBJ_D)\applink.obj LIBS_DEP=$(LIBS_DEP) $(OBJ_D)\applink.obj
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册