mirror of
https://github.com/openssl/openssl.git
synced 2025-01-18 13:44:20 +08:00
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
@ -51,5 +51,6 @@ my %targets = (
|
||||
dso_scheme => "win32",
|
||||
shared_defflag => '',
|
||||
perl_platform => 'Windows::cppbuilder',
|
||||
uplink_arch => 'common',
|
||||
}
|
||||
);
|
||||
|
@ -216,7 +216,7 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
# define _IOB_ENTRIES 20
|
||||
# endif
|
||||
/* Safety net to catch purely internal BIO_set_fp calls */
|
||||
# if defined(_MSC_VER) && _MSC_VER>=1900
|
||||
# if (defined(_MSC_VER) && _MSC_VER>=1900) || defined(__BORLANDC__)
|
||||
if (ptr == stdin || ptr == stdout || ptr == stderr)
|
||||
BIO_clear_flags(b, BIO_FLAGS_UPLINK_INTERNAL);
|
||||
# elif defined(_IOB_ENTRIES)
|
||||
|
@ -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…
Reference in New Issue
Block a user