Link with uplink module
The Clang-based `bcc32c.exe` expects AT&T syntax for inline assembly. References: - http://docwiki.embarcadero.com/RADStudio/Sydney/en/Differences_Between_Clang-enhanced_C%2B%2B_Compilers_and_Previous-Generation_C%2B%2B_Compilers#Inline_Assembly - https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html - https://sourceware.org/binutils/docs/as/i386_002dVariations.html Reviewed-by: Richard Levitte <levitte@openssl.org> Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com> (Merged from https://github.com/openssl/openssl/pull/13540)
This commit is contained in:
parent
491a1e3363
commit
daf98015aa
4 changed files with 25 additions and 3 deletions
|
@ -38,6 +38,12 @@
|
|||
# include <io.h>
|
||||
# include <fcntl.h>
|
||||
|
||||
# ifdef __BORLANDC__
|
||||
/* _lseek in <io.h> is a function-like macro so we can't take its address */
|
||||
# undef _lseek
|
||||
# define _lseek lseek
|
||||
# endif
|
||||
|
||||
static void *app_stdin(void)
|
||||
{
|
||||
return stdin;
|
||||
|
|
19
ms/uplink.c
19
ms/uplink.c
|
@ -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..."
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue