mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Windows/DynamicLibrary.inc: Split explicit symbols into explicit_symbols.inc.
config.h.* have conditions whether each symbol is defined or not. Autoconf and CMake may check symbols in libgcc.a for JIT on Mingw. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124950 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -110,35 +110,14 @@ bool DynamicLibrary::LoadLibraryPermanently(const char *filename,
|
||||
|
||||
// Stack probing routines are in the support library (e.g. libgcc), but we don't
|
||||
// have dynamic linking on windows. Provide a hook.
|
||||
#if defined(__MINGW32__) || defined (_MSC_VER)
|
||||
#define EXPLICIT_SYMBOL(SYM) \
|
||||
if (!strcmp(symbolName, #SYM)) return (void*)&SYM
|
||||
#define EXPLICIT_SYMBOL2(SYMFROM, SYMTO) \
|
||||
if (!strcmp(symbolName, #SYMFROM)) return (void*)&SYMTO
|
||||
#define EXPLICIT_SYMBOL_DEF(SYM) \
|
||||
extern "C" { extern void *SYM; }
|
||||
#define EXPLICIT_SYMBOL(SYM) \
|
||||
extern "C" { extern void *SYM; }
|
||||
#define EXPLICIT_SYMBOL2(SYMFROM, SYMTO) EXPLICIT_SYMBOL(SYMTO)
|
||||
|
||||
#if defined(__MINGW32__)
|
||||
EXPLICIT_SYMBOL_DEF(_alloca)
|
||||
EXPLICIT_SYMBOL_DEF(__main)
|
||||
EXPLICIT_SYMBOL_DEF(__ashldi3)
|
||||
EXPLICIT_SYMBOL_DEF(__ashrdi3)
|
||||
EXPLICIT_SYMBOL_DEF(__cmpdi2)
|
||||
EXPLICIT_SYMBOL_DEF(__divdi3)
|
||||
EXPLICIT_SYMBOL_DEF(__fixdfdi)
|
||||
EXPLICIT_SYMBOL_DEF(__fixsfdi)
|
||||
EXPLICIT_SYMBOL_DEF(__fixunsdfdi)
|
||||
EXPLICIT_SYMBOL_DEF(__fixunssfdi)
|
||||
EXPLICIT_SYMBOL_DEF(__floatdidf)
|
||||
EXPLICIT_SYMBOL_DEF(__floatdisf)
|
||||
EXPLICIT_SYMBOL_DEF(__lshrdi3)
|
||||
EXPLICIT_SYMBOL_DEF(__moddi3)
|
||||
EXPLICIT_SYMBOL_DEF(__udivdi3)
|
||||
EXPLICIT_SYMBOL_DEF(__umoddi3)
|
||||
#elif defined(_MSC_VER)
|
||||
EXPLICIT_SYMBOL_DEF(_alloca_probe)
|
||||
#endif
|
||||
#endif
|
||||
#include "explicit_symbols.inc"
|
||||
|
||||
#undef EXPLICIT_SYMBOL
|
||||
#undef EXPLICIT_SYMBOL2
|
||||
|
||||
void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
|
||||
// First check symbols added via AddSymbol().
|
||||
@@ -159,39 +138,17 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(__MINGW32__)
|
||||
{
|
||||
EXPLICIT_SYMBOL(_alloca);
|
||||
EXPLICIT_SYMBOL(__main);
|
||||
EXPLICIT_SYMBOL(__ashldi3);
|
||||
EXPLICIT_SYMBOL(__ashrdi3);
|
||||
EXPLICIT_SYMBOL(__cmpdi2);
|
||||
EXPLICIT_SYMBOL(__divdi3);
|
||||
EXPLICIT_SYMBOL(__fixdfdi);
|
||||
EXPLICIT_SYMBOL(__fixsfdi);
|
||||
EXPLICIT_SYMBOL(__fixunsdfdi);
|
||||
EXPLICIT_SYMBOL(__fixunssfdi);
|
||||
EXPLICIT_SYMBOL(__floatdidf);
|
||||
EXPLICIT_SYMBOL(__floatdisf);
|
||||
EXPLICIT_SYMBOL(__lshrdi3);
|
||||
EXPLICIT_SYMBOL(__moddi3);
|
||||
EXPLICIT_SYMBOL(__udivdi3);
|
||||
EXPLICIT_SYMBOL(__umoddi3);
|
||||
#define EXPLICIT_SYMBOL(SYM) \
|
||||
if (!strcmp(symbolName, #SYM)) return (void*)&SYM;
|
||||
#define EXPLICIT_SYMBOL2(SYMFROM, SYMTO) \
|
||||
if (!strcmp(symbolName, #SYMFROM)) return (void*)&SYMTO;
|
||||
|
||||
EXPLICIT_SYMBOL2(alloca, _alloca);
|
||||
#undef EXPLICIT_SYMBOL
|
||||
#undef EXPLICIT_SYMBOL2
|
||||
#undef EXPLICIT_SYMBOL_DEF
|
||||
}
|
||||
#elif defined(_MSC_VER)
|
||||
{
|
||||
EXPLICIT_SYMBOL2(alloca, _alloca_probe);
|
||||
EXPLICIT_SYMBOL2(_alloca, _alloca_probe);
|
||||
#undef EXPLICIT_SYMBOL
|
||||
#undef EXPLICIT_SYMBOL2
|
||||
#undef EXPLICIT_SYMBOL_DEF
|
||||
#include "explicit_symbols.inc"
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef EXPLICIT_SYMBOL
|
||||
#undef EXPLICIT_SYMBOL2
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
66
lib/Support/Windows/explicit_symbols.inc
Normal file
66
lib/Support/Windows/explicit_symbols.inc
Normal file
@@ -0,0 +1,66 @@
|
||||
/* in libgcc.a */
|
||||
|
||||
#ifdef HAVE__ALLOCA
|
||||
EXPLICIT_SYMBOL(_alloca)
|
||||
EXPLICIT_SYMBOL2(alloca, _alloca);
|
||||
#endif
|
||||
#ifdef HAVE___ALLOCA
|
||||
EXPLICIT_SYMBOL(__alloca)
|
||||
#endif
|
||||
#ifdef HAVE___CHKSTK
|
||||
EXPLICIT_SYMBOL(__chkstk)
|
||||
#endif
|
||||
#ifdef HAVE____CHKSTK
|
||||
EXPLICIT_SYMBOL(___chkstk)
|
||||
#endif
|
||||
#ifdef HAVE___MAIN
|
||||
EXPLICIT_SYMBOL(__main) // FIXME: Don't call it.
|
||||
#endif
|
||||
|
||||
#ifdef HAVE___ASHLDI3
|
||||
EXPLICIT_SYMBOL(__ashldi3)
|
||||
#endif
|
||||
#ifdef HAVE___ASHRDI3
|
||||
EXPLICIT_SYMBOL(__ashrdi3)
|
||||
#endif
|
||||
#ifdef HAVE___CMPDI2 // FIXME: unused
|
||||
EXPLICIT_SYMBOL(__cmpdi2)
|
||||
#endif
|
||||
#ifdef HAVE___DIVDI3
|
||||
EXPLICIT_SYMBOL(__divdi3)
|
||||
#endif
|
||||
#ifdef HAVE___FIXDFDI
|
||||
EXPLICIT_SYMBOL(__fixdfdi)
|
||||
#endif
|
||||
#ifdef HAVE___FIXSFDI
|
||||
EXPLICIT_SYMBOL(__fixsfdi)
|
||||
#endif
|
||||
#ifdef HAVE___FIXUNSDFDI
|
||||
EXPLICIT_SYMBOL(__fixunsdfdi)
|
||||
#endif
|
||||
#ifdef HAVE___FIXUNSSFDI
|
||||
EXPLICIT_SYMBOL(__fixunssfdi)
|
||||
#endif
|
||||
#ifdef HAVE___FLOATDIDF
|
||||
EXPLICIT_SYMBOL(__floatdidf)
|
||||
#endif
|
||||
#ifdef HAVE___FLOATDISF
|
||||
EXPLICIT_SYMBOL(__floatdisf)
|
||||
#endif
|
||||
#ifdef HAVE___LSHRDI3
|
||||
EXPLICIT_SYMBOL(__lshrdi3)
|
||||
#endif
|
||||
#ifdef HAVE___MODDI3
|
||||
EXPLICIT_SYMBOL(__moddi3)
|
||||
#endif
|
||||
#ifdef HAVE___UDIVDI3
|
||||
EXPLICIT_SYMBOL(__udivdi3)
|
||||
#endif
|
||||
#ifdef HAVE___UMODDI3
|
||||
EXPLICIT_SYMBOL(__umoddi3)
|
||||
#endif
|
||||
|
||||
/* msvcrt */
|
||||
#if defined(_MSC_VER)
|
||||
EXPLICIT_SYMBOL2(alloca, _alloca_probe);
|
||||
#endif
|
Reference in New Issue
Block a user