From fdf6f73e5e09a98112d85ee745ac5b3c78942956 Mon Sep 17 00:00:00 2001 From: Andy Polyakov Date: Wed, 23 Mar 2016 21:04:22 +0100 Subject: [PATCH] Windows build system: fix 32-bit appveyor build. Reviewed-by: Richard Levitte --- Configurations/10-main.conf | 2 +- ms/uplink.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf index 737ae85e77..4e9579cada 100644 --- a/Configurations/10-main.conf +++ b/Configurations/10-main.conf @@ -1295,7 +1295,7 @@ sub vc_wince_info { # x86 Win32 target defaults to ANSI API, if you want UNICODE, # configure with 'perl Configure VC-WIN32 -DUNICODE -D_UNICODE' inherit_from => [ "VC-noCE-common", asm("x86_asm"), - sub { $disabled{shared} ? () : "x86_uplink" } ], + sub { $disabled{shared} ? () : "uplink_common" } ], as => sub { my $ver=`nasm -v 2>NUL`; my $vew=`nasmw -v 2>NUL`; return $ver ge $vew ? "nasm" : "nasmw" }, diff --git a/ms/uplink.c b/ms/uplink.c index 4f480a7981..6a5091b570 100644 --- a/ms/uplink.c +++ b/ms/uplink.c @@ -90,6 +90,34 @@ void OPENSSL_Uplink(volatile void **table, int index) table[index] = func; } +#if defined(_MSC_VER) && defined(_M_IX86) +# define LAZY(i) \ +__declspec(naked) static void lazy##i (void) { \ + _asm push i \ + _asm push OFFSET OPENSSL_UplinkTable \ + _asm call OPENSSL_Uplink \ + _asm add esp,8 \ + _asm jmp OPENSSL_UplinkTable+4*i } + +# if APPLINK_MAX>25 +# error "Add more stubs..." +# endif +/* make some in advance... */ +LAZY(1) LAZY(2) LAZY(3) LAZY(4) LAZY(5) + LAZY(6) LAZY(7) LAZY(8) LAZY(9) LAZY(10) + LAZY(11) LAZY(12) LAZY(13) LAZY(14) LAZY(15) + LAZY(16) LAZY(17) LAZY(18) LAZY(19) LAZY(20) + LAZY(21) LAZY(22) LAZY(23) LAZY(24) LAZY(25) +void *OPENSSL_UplinkTable[] = { + (void *)APPLINK_MAX, + lazy1, lazy2, lazy3, lazy4, lazy5, + lazy6, lazy7, lazy8, lazy9, lazy10, + lazy11, lazy12, lazy13, lazy14, lazy15, + lazy16, lazy17, lazy18, lazy19, lazy20, + lazy21, lazy22, lazy23, lazy24, lazy25, +}; +#endif + #ifdef SELFTEST main() { -- 2.25.1