blob: 6335237900f1d4d6fcc5b1dec763e2f83f1ad2d0 [file] [log] [blame]
#include "func.def.in"
#define ADD_UNDERSCORE(symbol) symbol == _ ## symbol
#define ADD_UNDERSCORE_DATA(symbol) symbol DATA == _ ## symbol
#define ADD_UNDERSCORE_DATA_DLL(symbol) symbol DATA == _ ## symbol ## _dll
#define ADD_DOUBLE_UNDERSCORE(symbol) symbol == __ ## symbol
; This is list of symbol aliases from the Visual C++ 1.0 oldnames.lib library
; FIXME: some of these symbol aliases are commented, check and document why
#ifdef UCRTBASE
; access is provided as an alias for __mingw_access
#else
ADD_UNDERSCORE(access)
#endif
#ifndef CRTAPP
; ADD_UNDERSCORE(cgets)
ADD_UNDERSCORE(chdir)
#endif
ADD_UNDERSCORE(chmod)
ADD_UNDERSCORE(chsize)
ADD_UNDERSCORE(close)
#ifndef CRTAPP
; ADD_UNDERSCORE(cprintf)
; ADD_UNDERSCORE(cputs)
#endif
ADD_UNDERSCORE(creat)
#ifndef CRTAPP
; ADD_UNDERSCORE(cscanf)
ADD_UNDERSCORE(cwait)
#endif
#if defined(UCRTBASE)
; daylight variable is provided by misc/ucrt_tzset.c
#elif defined(CRTDLL)
ADD_UNDERSCORE_DATA_DLL(daylight)
#else
ADD_UNDERSCORE_DATA(daylight)
#endif
ADD_UNDERSCORE(dup)
ADD_UNDERSCORE(dup2)
ADD_UNDERSCORE(ecvt)
#if defined(UCRTBASE)
; _environ variable is not available in ucrtbase.dll and there is no replacement for it
#elif defined(CRTDLL)
; ADD_UNDERSCORE_DATA_DLL(environ)
#else
; ADD_UNDERSCORE_DATA(environ)
#endif
ADD_UNDERSCORE(eof)
#ifndef CRTAPP
ADD_UNDERSCORE(execl)
ADD_UNDERSCORE(execle)
ADD_UNDERSCORE(execlp)
ADD_UNDERSCORE(execlpe)
ADD_UNDERSCORE(execv)
ADD_UNDERSCORE(execve)
ADD_UNDERSCORE(execvp)
ADD_UNDERSCORE(execvpe)
#endif
ADD_UNDERSCORE(fcloseall)
ADD_UNDERSCORE(fcvt)
ADD_UNDERSCORE(fdopen)
ADD_UNDERSCORE(fgetchar)
ADD_UNDERSCORE(filelength)
ADD_UNDERSCORE(fileno)
; ADD_UNDERSCORE(flushall)
ADD_UNDERSCORE(fputchar)
#ifdef FIXED_SIZE_SYMBOLS
#ifndef CRTDLL
ADD_UNDERSCORE(fstat)
#endif
#else
F32(fstat == _fstat32)
F64(fstat == _fstat64i32)
#endif
#ifdef FIXED_SIZE_SYMBOLS
ADD_UNDERSCORE(ftime)
#else
F32(ftime == _ftime32)
F64(ftime == _ftime64)
#endif
#if defined(UCRTBASE)
; HUGE alias and _HUGE variable are provided by math/_huge.c
#elif defined(CRTDLL)
ADD_UNDERSCORE_DATA_DLL(HUGE)
#else
ADD_UNDERSCORE_DATA(HUGE)
#endif
ADD_UNDERSCORE(gcvt)
#ifndef CRTAPP
ADD_UNDERSCORE(getch)
ADD_UNDERSCORE(getche)
ADD_UNDERSCORE(getcwd)
#endif
#ifdef UCRTBASE
; ucrtbase.dll has got _getpid for all archs
ADD_UNDERSCORE(getpid)
#elif !defined(CRTAPP)
; msvcrt.dll for arm/arm64 lacks _getpid
F_X86_ANY(ADD_UNDERSCORE(getpid))
#endif
#ifndef CRTAPP
ADD_UNDERSCORE(getw)
#endif
ADD_UNDERSCORE(isatty)
ADD_UNDERSCORE(itoa)
#ifndef CRTAPP
ADD_UNDERSCORE(kbhit)
#endif
ADD_UNDERSCORE(lfind)
; ADD_UNDERSCORE(locking)
ADD_UNDERSCORE(lsearch)
ADD_UNDERSCORE(lseek)
ADD_UNDERSCORE(ltoa)
ADD_UNDERSCORE(memccpy)
ADD_UNDERSCORE(memicmp)
ADD_UNDERSCORE(mkdir)
ADD_UNDERSCORE(mktemp)
; onexit function alias is provided by misc/_onexit.c
ADD_UNDERSCORE(open)
#ifndef CRTAPP
ADD_UNDERSCORE(putch)
ADD_UNDERSCORE(putenv)
#endif
ADD_UNDERSCORE(putw)
ADD_UNDERSCORE(read)
ADD_UNDERSCORE(rmdir)
ADD_UNDERSCORE(rmtmp)
ADD_UNDERSCORE(setmode)
ADD_UNDERSCORE(sopen)
#ifndef CRTAPP
ADD_UNDERSCORE(spawnl)
ADD_UNDERSCORE(spawnle)
ADD_UNDERSCORE(spawnlp)
ADD_UNDERSCORE(spawnlpe)
ADD_UNDERSCORE(spawnv)
ADD_UNDERSCORE(spawnve)
ADD_UNDERSCORE(spawnvp)
ADD_UNDERSCORE(spawnvpe)
#endif
#ifdef UCRTBASE
F32(stat == _stat32)
F64(stat == _stat64i32)
#else
; stat for non-UCRT is provided by mingw to workaround trailing slash issue in _stat
#endif
#ifdef NO_STRCMPI_ALIAS
; Symbol _strcmpi is natively present and defined in the library def file
; So define strcmpi as an alias to _strcmpi
ADD_UNDERSCORE(strcmpi)
#else
; Symbol _strcmpi is not present in the library, it provides only _stricmp symbol
; So define strcmpi as an alias to _stricmp
strcmpi == _stricmp
#endif
ADD_UNDERSCORE(strdup)
ADD_UNDERSCORE(stricmp)
ADD_UNDERSCORE(strlwr)
ADD_UNDERSCORE(strnicmp)
ADD_UNDERSCORE(strnset)
ADD_UNDERSCORE(strrev)
ADD_UNDERSCORE(strset)
ADD_UNDERSCORE(strupr)
ADD_UNDERSCORE(swab)
#if defined(UCRTBASE)
; _sys_errlist variable is not available in ucrtbase.dll and there is no replacement for it
#else
// sys_errlist variable is without _dll suffix in crtdll.dll
; ADD_UNDERSCORE_DATA(sys_errlist)
#endif
#if defined(UCRTBASE)
; _sys_nerr variable is not available in ucrtbase.dll and there is no replacement for it
#elif defined(CRTDLL)
; ADD_UNDERSCORE_DATA_DLL(sys_nerr)
#else
; ADD_UNDERSCORE_DATA(sys_nerr)
#endif
ADD_UNDERSCORE(tell)
ADD_UNDERSCORE(tempnam)
#if defined(UCRTBASE)
; timezone variable is provided by misc/ucrt_tzset.c
#elif defined(CRTDLL)
ADD_UNDERSCORE_DATA_DLL(timezone)
#else
ADD_UNDERSCORE_DATA(timezone)
#endif
#if defined(UCRTBASE)
; tzname variable is provided by misc/ucrt_tzset.c
#else
// tzname variable is without _dll suffix in crtdll.dll
ADD_UNDERSCORE_DATA(tzname)
#endif
#if defined(UCRTBASE)
; tzset function is provided by misc/ucrt_tzset.c
#else
ADD_UNDERSCORE(tzset)
#endif
; ADD_UNDERSCORE(ultoa)
ADD_UNDERSCORE(umask)
#ifndef CRTAPP
ADD_UNDERSCORE(ungetch)
#endif
ADD_UNDERSCORE(unlink)
#ifdef FIXED_SIZE_SYMBOLS
ADD_UNDERSCORE(utime)
#else
F32(utime == _utime32)
F64(utime == _utime64)
#endif
ADD_UNDERSCORE(write)
; This is list of symbol aliases added in the Visual C++ 2.0 oldnames.lib library
; All these symbols with leading underscore are present also in pre-2.0 CRT versions: crtdll.dll and msvcrt10.dll
; ADD_UNDERSCORE(control87)
#if __SIZEOF_LONG_DOUBLE__ == __SIZEOF_DOUBLE__
ADD_UNDERSCORE(fpreset)
#else
; ADD_UNDERSCORE(fpreset) ; Alias fpreset is set in CRT_fp10.c and CRT_fp8.c
#endif
ADD_UNDERSCORE(wcsdup)
ADD_UNDERSCORE(wcsicmp)
ADD_UNDERSCORE(wcsicoll)
ADD_UNDERSCORE(wcslwr)
ADD_UNDERSCORE(wcsnicmp)
ADD_UNDERSCORE(wcsnset)
ADD_UNDERSCORE(wcsrev)
ADD_UNDERSCORE(wcsset)
ADD_UNDERSCORE(wcsupr)
; This is list of symbol aliases added in the Visual C++ 4.0 oldnames.lib library
; All these symbols with leading underscore are present also in pre-4.0 CRT versions: crtdll.dll, msvcrt10.dll and msvcrt20.dll
; ADD_UNDERSCORE(cabs)
#ifdef UCRTBASE
; hypot is natively exported from UCRT
#else
ADD_UNDERSCORE(hypot)
#endif
ADD_UNDERSCORE(j0)
ADD_UNDERSCORE(j1)
ADD_UNDERSCORE(jn)
ADD_UNDERSCORE(y0)
ADD_UNDERSCORE(y1)
ADD_UNDERSCORE(yn)
; This is list of symbol aliases for C95 functions
#ifdef WITH_GET_PUT_WCHAR_ALIASES
getwc == fgetwc
getwchar == _fgetwchar
putwc == fputwc
putwchar == _fputwchar
#endif
#ifdef USE_WCSTOK_S_FOR_WCSTOK
wcstok == wcstok_s
#endif
; This is list of symbol aliases for C99 functions
; ADD_UNDERSCORE(logb)
#ifdef WITH_NEXTAFTER_ALIAS
ADD_UNDERSCORE(nextafter)
#endif
; This is list of symbol aliases for C99 ARM long double functions
; They are defined as aliases to regular double symbols as on ARM, long double is equal to regular double
F_LD64(acosl == acos)
F_LD64(asinl == asin)
F_LD64(atan2l == atan2)
F_LD64(atanl == atan)
F_LD64(ceill == ceil)
F_LD64(cosl == cos)
F_LD64(expl == exp)
F_LD64(floorl == floor)
F_LD64(fmodl == fmod)
F_LD64(log10l == log10)
F_LD64(logl == log)
; FIXME: Why is powl alias defined only for UCRT?
#ifdef UCRTBASE
F_LD64(powl == pow)
#endif
F_LD64(sinl == sin)
F_LD64(tanl == tan)
F_LD64(_chgsignl == _chgsign)
; This is list of symbol aliases for C11 functions
#ifdef UCRTBASE
F32(timespec_get == _timespec32_get)
F64(timespec_get == _timespec64_get)
#endif
; This is list of symbol aliases for POSIX functions
ADD_DOUBLE_UNDERSCORE(isascii)
ADD_DOUBLE_UNDERSCORE(toascii)
#ifndef CRTAPP
ADD_UNDERSCORE(pclose)
ADD_UNDERSCORE(popen)
#endif
; ADD_UNDERSCORE(scalb)
; This is list of symbol aliases for Large File Specification (extension to Single UNIX Specification)
#ifndef NO_FPOS64_ALIASES
; fgetpos and fsetpos are already 64-bit
fgetpos64 == fgetpos
fsetpos64 == fsetpos
#endif
#ifdef UCRTBASE
stat32 == _stat32
stat32i64 == _stat32i64
stat64 == _stat64
stat64i32 == _stat64i32
#else
; stat for non-UCRT is provided by mingw to workaround trailing slash issue in _stat
#endif
#ifdef FIXED_SIZE_SYMBOLS
#if !defined(NO_I64_FIXED_SIZE) && !defined(NO_FIXED_SIZE_64_ALIAS)
F64(fstat64 == _fstati64)
#endif
#else
fstat64 == _fstat64
#endif
; This is list of symbol aliases for GNU functions which are not part of POSIX or ISO C
strcasecmp == _stricmp
strncasecmp == _strnicmp
; This is list of various symbol aliases which are needed for compatibility
; Some symbols in some version of CRT library were added and some other symbols were removed or renamed
; This list provides some level of backward and forward compatibility
#ifndef NO_STRCMPI_ALIAS
_strcmpi == _stricmp
#endif
#ifdef WITH_IOB_FUNC_ALIAS
__iob_func == __p__iob
#endif
#ifdef WITH_TZ_ALIASES
__daylight == __p__daylight
#ifndef NO_DSTBIAS
__dstbias == __p__dstbias
#endif
__timezone == __p__timezone
__tzname == __p__tzname
#endif
#ifdef WITH_ATOLL_ALIAS
atoll == _atoi64
_wtoll == _wtoi64
#endif
#ifdef WITH_ATOLL_L_ALIAS
_atoll_l == _atoi64_l
_wtoll_l == _wtoi64_l
#endif
#ifdef WITH_LLABS_ALIAS
llabs == _abs64
imaxabs == _abs64
#elif defined(WITH_IMAXABS_ALIAS)
imaxabs == llabs
#endif
#ifdef WITH_IMAXDIV_ALIAS
imaxdiv == lldiv
#endif
#ifdef WITH_STRTO64_ALIAS
strtoll == _strtoi64
strtoull == _strtoui64
strtoimax == _strtoi64
strtoumax == _strtoui64
wcstoll == _wcstoi64
wcstoull == _wcstoui64
wcstoimax == _wcstoi64
wcstoumax == _wcstoui64
#endif
#ifdef WITH_STRTO64_L_ALIAS
_strtoll_l == _strtoi64_l
_strtoull_l == _strtoui64_l
_strtoimax_l == _strtoi64_l
_strtoumax_l == _strtoui64_l
_wcstoll_l == _wcstoi64_l
_wcstoull_l == _wcstoui64_l
_wcstoimax_l == _wcstoi64_l
_wcstoumax_l == _wcstoui64_l
#endif
; This is list of find symbol aliases, every CRT library has either find symbols with SIZE suffix or without them
#ifdef FIXED_SIZE_SYMBOLS
F32(_findfirst32 == _findfirst)
F64(_findfirst64i32 == _findfirst)
#ifndef NO_I64_FIXED_SIZE
F32(_findfirst32i64 == _findfirsti64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_findfirst64 == _findfirsti64)
#endif
#endif
F32(_findnext32 == _findnext)
F64(_findnext64i32 == _findnext)
#ifndef NO_I64_FIXED_SIZE
F32(_findnext32i64 == _findnexti64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_findnext64 == _findnexti64)
#endif
#endif
#ifndef NO_WIDE_FIXED_SIZE
F32(_wfindfirst32 == _wfindfirst)
F64(_wfindfirst64i32 == _wfindfirst)
#ifndef NO_I64_FIXED_SIZE
F32(_wfindfirst32i64 == _wfindfirsti64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_wfindfirst64 == _wfindfirsti64)
#endif
#endif
F32(_wfindnext32 == _wfindnext)
F64(_wfindnext64i32 == _wfindnext)
#ifndef NO_I64_FIXED_SIZE
F32(_wfindnext32i64 == _wfindnexti64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_wfindnext64 == _wfindnexti64)
#endif
#endif
#endif
#else
F32(_findfirst == _findfirst32)
F64(_findfirst == _findfirst64i32)
F32(_findfirsti64 == _findfirst32i64)
F64(_findfirsti64 == _findfirst64)
F32(_findnext == _findnext32)
F64(_findnext == _findnext64i32)
F32(_findnexti64 == _findnext32i64)
F64(_findnexti64 == _findnext64)
F32(_wfindfirst == _wfindfirst32)
F64(_wfindfirst == _wfindfirst64i32)
F32(_wfindfirsti64 == _wfindfirst32i64)
F64(_wfindfirsti64 == _wfindfirst64)
F32(_wfindnext == _wfindnext32)
F64(_wfindnext == _wfindnext64i32)
F32(_wfindnexti64 == _wfindnext32i64)
F64(_wfindnexti64 == _wfindnext64)
#endif
; This is list of stat symbol aliases, every CRT library has either stat symbols with SIZE suffix or without them
#ifdef FIXED_SIZE_SYMBOLS
#ifndef CRTDLL
F32(_fstat32 == _fstat)
#endif
F64(_fstat64i32 == _fstat)
#ifndef NO_I64_FIXED_SIZE
F32(_fstat32i64 == _fstati64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_fstat64 == _fstati64)
#endif
#endif
#ifndef CRTDLL
F32(_stat32 == _stat)
#endif
F64(_stat64i32 == _stat)
#ifndef NO_I64_FIXED_SIZE
F32(_stat32i64 == _stati64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_stat64 == _stati64)
#endif
#endif
#ifndef NO_WIDE_FIXED_SIZE
F32(_wstat32 == _wstat)
F64(_wstat64i32 == _wstat)
#ifndef NO_I64_FIXED_SIZE
F32(_wstat32i64 == _wstati64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_wstat64 == _wstati64)
#endif
#endif
#endif
#else
F32(_fstat == _fstat32)
F64(_fstat == _fstat64i32)
F32(_fstati64 == _fstat32i64)
F64(_fstati64 == _fstat64)
F32(_stat == _stat32)
F64(_stat == _stat64i32)
F32(_stati64 == _stat32i64)
F64(_stati64 == _stat64)
F32(_wstat == _wstat32)
F64(_wstat == _wstat64i32)
F32(_wstati64 == _wstat32i64)
F64(_wstati64 == _wstat64)
#endif
; This is list of time symbol aliases, every CRT library except msvcrt.dll has either time symbols with SIZE suffix or without them
#ifndef NO_TIME_ALIAS
#ifdef FIXED_SIZE_SYMBOLS
F32(_ctime32 == ctime)
F64(_ctime64 == ctime)
F32(_difftime32 == difftime)
F64(_difftime64 == difftime)
F32(_ftime32 == _ftime)
F64(_ftime64 == _ftime)
F32(_futime32 == _futime)
F64(_futime64 == _futime)
F32(_gmtime32 == gmtime)
F64(_gmtime64 == gmtime)
F32(_localtime32 == localtime)
F64(_localtime64 == localtime)
; Skip _mkgmtime as it is present only in msvcrt.dll
F32(_mktime32 == mktime)
F64(_mktime64 == mktime)
F32(_time32 == time)
F64(_time64 == time)
F32(_utime32 == _utime)
F64(_utime64 == _utime)
#ifndef NO_WIDE_FIXED_SIZE
F32(_wctime32 == _wctime)
F64(_wctime64 == _wctime)
F32(_wutime32 == _wutime)
F64(_wutime64 == _wutime)
#endif
#else
F32(ctime == _ctime32)
F64(ctime == _ctime64)
F32(difftime == _difftime32)
F64(difftime == _difftime64)
F32(_ftime == _ftime32)
F64(_ftime == _ftime64)
F32(_futime == _futime32)
F64(_futime == _futime64)
F32(gmtime == _gmtime32)
F64(gmtime == _gmtime64)
F32(localtime == _localtime32)
F64(localtime == _localtime64)
F32(_mkgmtime == _mkgmtime32)
F64(_mkgmtime == _mkgmtime64)
F32(mktime == _mktime32)
F64(mktime == _mktime64)
F32(time == _time32)
F64(time == _time64)
F32(_utime == _utime32)
F64(_utime == _utime64)
F32(_wctime == _wctime32)
F64(_wctime == _wctime64)
F32(_wutime == _wutime32)
F64(_wutime == _wutime64)
#endif
#endif
; This is list of symbols which are present in msvcrt but not in UCRT
#ifdef UCRTBASE
__lconv_init == __initialize_lconv_for_unsigned_char
__set_app_type == _set_app_type
__p__daylight == __daylight
__p__dstbias == __dstbias
__p__timezone == __timezone
__p__tzname == __tzname
#endif
; This is list of printf/scanf symbol aliases with __ms_ prefix
#ifndef UCRTBASE
__ms_fprintf == fprintf
__ms_fscanf == fscanf
__ms_fwprintf == fwprintf
__ms_fwscanf == fwscanf
__ms_printf == printf
__ms_scanf == scanf
__ms_sprintf == sprintf
__ms_sscanf == sscanf
__ms_swscanf == swscanf
__ms_vfprintf == vfprintf
__ms_vfwprintf == vfwprintf
__ms_vprintf == vprintf
__ms_vsprintf == vsprintf
__ms_vwprintf == vwprintf
__ms_wprintf == wprintf
__ms_wscanf == wscanf
#endif
; This is list of additional symbol aliases not available in any library as neither native symbols nor aliases
; FIXME: check if these really are needed
; This is wstat and wstat64 symbol available only in mingw but for a long time
#ifdef UCRTBASE
F32(wstat == _wstat32)
F64(wstat == _wstat64i32)
wstat32 == _wstat32
wstat32i64 == _wstat32i64
wstat64 == _wstat64
wstat64i32 == _wstat64i32
#else
; wstat for non-UCRT is provided by mingw to workaround trailing slash issue in _wstat
#endif
; Origin of the symbol wcscmpi is unknown. This symbol is not present in
; crtdll.dll and neither in any msvcr* version. The only source of wcscmpi is
; wcstr.h header file from the Microsoft Visual C++ 1.0 (32-bit for NT) and
; Microsoft Windows NT 3.1 SDK where wcscmpi and _wcscmpi are defined as
; macros which expand to _wcsicmp. So the raw wcscmpi is not linkable symbol
; even in the old Visual C++ versions.
wcscmpi == _wcsicmp
; Origin of these symbols is unknown too.
ADD_UNDERSCORE(chgsign)
ADD_UNDERSCORE(fgetwchar)
ADD_UNDERSCORE(finite)
ADD_UNDERSCORE(fpclass)
ADD_UNDERSCORE(fputwchar)
#ifndef CRTAPP
ADD_UNDERSCORE(heapwalk)
#endif
ADD_DOUBLE_UNDERSCORE(iscsymf)
ADD_DOUBLE_UNDERSCORE(iscsym)
#ifndef CRTAPP
ADD_UNDERSCORE(searchenv)
#endif
ADD_UNDERSCORE(stricoll)
#ifndef UCRTBASE
ADD_UNDERSCORE(vsnprintf_s)
#endif
#ifndef CRTAPP
ADD_UNDERSCORE(wpopen)
#endif