]> git.ipfire.org Git - thirdparty/openssl.git/blobdiff - ms/uplink.c
Link with uplink module
[thirdparty/openssl.git] / ms / uplink.c
index 8c61a7ed1d70b7b069c71140f92f1fed5f870adb..f924eb3e58e8123d9838d99fbabb4bbbd5e19d1b 100644 (file)
@@ -99,14 +99,29 @@ void OPENSSL_Uplink(volatile void **table, int index)
     table[index] = func;
 }
 
-#if defined(_MSC_VER) && defined(_M_IX86)
-# define LAZY(i)         \
+#if (defined(_MSC_VER) || defined(__BORLANDC__)) && defined(_M_IX86)
+# if defined(_MSC_VER)
+#  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    }
+# elif defined(__BORLANDC__) && defined(__clang__)
+void *OPENSSL_UplinkTable[26]; /* C++Builder requires declaration before use */
+#  define LAZY(i)         \
+__declspec(naked) static void lazy##i (void) { \
+    __asm__("pushl $" #i "; "                  \
+            "pushl %0; "                       \
+            "call  %P1; "                      \
+            "addl  $8, %%esp; "                \
+            "jmp   *%2 "                       \
+            : /* no outputs */                 \
+            : "i" (OPENSSL_UplinkTable),       \
+              "i" (OPENSSL_Uplink),            \
+              "m" (OPENSSL_UplinkTable[i]));   }
+# endif
 
 # if APPLINK_MAX>25
 #  error "Add more stubs..."