Windows build system: fix 32-bit appveyor build.
authorAndy Polyakov <appro@openssl.org>
Wed, 23 Mar 2016 20:04:22 +0000 (21:04 +0100)
committerAndy Polyakov <appro@openssl.org>
Tue, 29 Mar 2016 07:51:40 +0000 (09:51 +0200)
Reviewed-by: Richard Levitte <levitte@openssl.org>
Configurations/10-main.conf
ms/uplink.c

index 737ae85e7772490ccdd629a99a11019f1c8861d2..4e9579cadac3e74cf4e6d49827321eb7c3eb4863 100644 (file)
@@ -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" },
index 4f480a7981712dde22e522f6d6e3890ef243d8d6..6a5091b570cef2eb31aacfb62055afc3ca5d7cb5 100644 (file)
@@ -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()
 {