diff --git a/dll/win32/ucrtbase/ucrtbase.spec b/dll/win32/ucrtbase/ucrtbase.spec index e56735016dc..7f759dd50d2 100644 --- a/dll/win32/ucrtbase/ucrtbase.spec +++ b/dll/win32/ucrtbase/ucrtbase.spec @@ -391,15 +391,19 @@ @ cdecl _fseeki64_nolock(ptr int64 long) @ cdecl _fsopen(str str long) @ cdecl _fstat32(long ptr) +@ cdecl -arch=win32 -impsym _fstat(long ptr) _fstat32 @ cdecl _fstat32i64(long ptr) @ cdecl _fstat64(long ptr) @ cdecl _fstat64i32(long ptr) +@ cdecl -arch=win64 -impsym _fstat(long ptr) _fstat64i32 @ cdecl _ftell_nolock(ptr) @ cdecl -ret64 _ftelli64(ptr) @ cdecl -ret64 _ftelli64_nolock(ptr) @ cdecl _ftime32(ptr) +@ cdecl -arch=win32 -impsym _ftime(ptr) _ftime32 @ cdecl _ftime32_s(ptr) @ cdecl _ftime64(ptr) +@ cdecl -arch=win64 -impsym _ftime(ptr) _ftime64 @ cdecl _ftime64_s(ptr) @ cdecl -arch=i386 -ret64 _ftol() @ cdecl _fullpath(ptr str long) @@ -1975,9 +1979,11 @@ @ cdecl _splitpath(str ptr ptr ptr ptr) @ cdecl _splitpath_s(str ptr long ptr long ptr long ptr long) @ cdecl _stat32(str ptr) +@ cdecl -arch=win32 -impsym _stat(ptr) _stat32 @ cdecl _stat32i64(str ptr) @ cdecl _stat64(str ptr) @ cdecl _stat64i32(str ptr) +@ cdecl -arch=win64 -impsym _stat(ptr) _stat64i32 @ cdecl _statusfp() @ cdecl -stub -arch=i386 _statusfp2(ptr ptr) @ cdecl _strcoll_l(str str ptr) @@ -2064,7 +2070,9 @@ @ cdecl _unlock_file(ptr) @ cdecl _unlock_locales() @ cdecl _utime32(str ptr) +@ cdecl -arch=win32 -impsym _utime(str ptr) _utime32 @ cdecl _utime64(str ptr) +@ cdecl -arch=win64 -impsym _utime(str ptr) _utime64 @ cdecl _waccess(wstr long) @ cdecl _waccess_s(wstr long) @ cdecl _wasctime(ptr) diff --git a/sdk/include/asm/alias.inc b/sdk/include/asm/alias.inc new file mode 100644 index 00000000000..a81f3465771 --- /dev/null +++ b/sdk/include/asm/alias.inc @@ -0,0 +1,58 @@ + +#ifdef _M_IX86 +#define SYM(name) _##name +#define IMPSYM(name) __imp__##name +#else +#define SYM(name) name +#define IMPSYM(name) __imp_##name +#endif + +#if (defined(_M_IX86) || defined(_M_AMD64)) + +#include + +MACRO(CREATE_ALIAS1, alias, target) +#ifdef _USE_ML + EXTERN SYM(&target):PROC + ALIAS = +#else + .weakref SYM(&alias), SYM(&target) +#endif +ENDM + +MACRO(CREATE_ALIAS2, alias, target) +#ifdef _USE_ML + EXTERN IMPSYM(&target):PROC + ALIAS = +#else + .weakref IMPSYM(&alias), IMPSYM(&target) +#endif +ENDM + +MACRO(CREATE_ALIAS, alias, target) + CREATE_ALIAS1 &alias, &target + CREATE_ALIAS2 &alias, &target +ENDM + +#elif defined(_M_ARM) + +#include + + MACRO + CREATE_ALIAS1 $alias, $target + IMPORT SYM($alias), WEAK SYM($target) + MEND + + MACRO + CREATE_ALIAS2 $alias, $target + IMPORT IMPSYM($alias), WEAK IMPSYM($target) + MEND + + MACRO + CREATE_ALIAS $alias, $target + CREATE_ALIAS1 $alias, $target + CREATE_ALIAS2 $alias, $target + MEND +#else +#error "Unsupported platform." +#endif diff --git a/sdk/lib/crt/oldnames-common.S b/sdk/lib/crt/oldnames-common.S new file mode 100644 index 00000000000..b4da5d01b5c --- /dev/null +++ b/sdk/lib/crt/oldnames-common.S @@ -0,0 +1,118 @@ + +#include + + /* Do not remove indentation, this would break ARM build! */ + CREATE_ALIAS access, _access + CREATE_ALIAS chdir, _chdir + CREATE_ALIAS chmod, _chmod + CREATE_ALIAS chsize, _chsize + CREATE_ALIAS close, _close + CREATE_ALIAS creat, _creat + CREATE_ALIAS cwait, _cwait + CREATE_ALIAS dup, _dup + CREATE_ALIAS dup2, _dup2 + CREATE_ALIAS ecvt, _ecvt + CREATE_ALIAS eof, _eof + CREATE_ALIAS execl, _execl + CREATE_ALIAS execle, _execle + CREATE_ALIAS execlp, _execlp + CREATE_ALIAS execlpe, _execlpe + CREATE_ALIAS execv, _execv + CREATE_ALIAS execve, _execve + CREATE_ALIAS execvp, _execvp + CREATE_ALIAS execvpe, _execvpe + CREATE_ALIAS fcvt, _fcvt + CREATE_ALIAS fdopen, _fdopen + CREATE_ALIAS fgetchar, _fgetchar + CREATE_ALIAS fgetwchar, _fgetwchar + CREATE_ALIAS filelength, _filelength + CREATE_ALIAS fileno, _fileno + CREATE_ALIAS fpreset, _fpreset + CREATE_ALIAS fputchar, _fputchar + CREATE_ALIAS fputwchar, _fputwchar + CREATE_ALIAS gcvt, _gcvt + CREATE_ALIAS getch, _getch + CREATE_ALIAS getche, _getche + CREATE_ALIAS getcwd, _getcwd + CREATE_ALIAS getpid, _getpid + CREATE_ALIAS getw, _getw + CREATE_ALIAS heapwalk, _heapwalk + CREATE_ALIAS isatty, _isatty + CREATE_ALIAS isascii, __isascii + CREATE_ALIAS itoa, _itoa + CREATE_ALIAS kbhit, _kbhit + CREATE_ALIAS lfind, _lfind + CREATE_ALIAS lsearch, _lsearch + CREATE_ALIAS lseek, _lseek + CREATE_ALIAS ltoa, _ltoa + CREATE_ALIAS memccpy, _memccpy + CREATE_ALIAS memicmp, _memicmp + CREATE_ALIAS mkdir, _mkdir + CREATE_ALIAS mktemp, _mktemp + CREATE_ALIAS open, _open + CREATE_ALIAS pclose, _pclose + CREATE_ALIAS popen, _popen + CREATE_ALIAS putch, _putch + CREATE_ALIAS putenv, _putenv + CREATE_ALIAS putw, _putw + CREATE_ALIAS read, _read + CREATE_ALIAS rmdir, _rmdir + CREATE_ALIAS rmtmp, _rmtmp + CREATE_ALIAS searchenv, _searchenv + CREATE_ALIAS setmode, _setmode + CREATE_ALIAS sopen, _sopen + CREATE_ALIAS spawnl, _spawnl + CREATE_ALIAS spawnle, _spawnle + CREATE_ALIAS spawnlp, _spawnlp + CREATE_ALIAS spawnlpe, _spawnlpe + CREATE_ALIAS spawnv, _spawnv + CREATE_ALIAS spawnve, _spawnve + CREATE_ALIAS spawnvp, _spawnvp + CREATE_ALIAS spawnvpe, _spawnvpe + CREATE_ALIAS strdup, _strdup + CREATE_ALIAS stricmp, _stricmp + CREATE_ALIAS stricoll, _stricoll + CREATE_ALIAS strlwr, _strlwr + CREATE_ALIAS strnicmp, _strnicmp + CREATE_ALIAS strnset, _strnset + CREATE_ALIAS strrev, _strrev + CREATE_ALIAS strset, _strset + CREATE_ALIAS strupr, _strupr + CREATE_ALIAS swab, _swab + CREATE_ALIAS tell, _tell + CREATE_ALIAS tempnam, _tempnam + CREATE_ALIAS tzset, _tzset + CREATE_ALIAS umask, _umask + CREATE_ALIAS ungetch, _ungetch + CREATE_ALIAS unlink, _unlink + CREATE_ALIAS wcsdup, _wcsdup + CREATE_ALIAS wcsicmp, _wcsicmp + CREATE_ALIAS wcsicoll, _wcsicoll + CREATE_ALIAS wcslwr, _wcslwr + CREATE_ALIAS wcsnicmp, _wcsnicmp + CREATE_ALIAS wcsnset, _wcsnset + CREATE_ALIAS wcsrev, _wcsrev + CREATE_ALIAS wcsset, _wcsset + CREATE_ALIAS wcsupr, _wcsupr + CREATE_ALIAS wpopen, _wpopen + CREATE_ALIAS write, _write + // non-ANSI functions declared in math.h + CREATE_ALIAS j0, _j0 + CREATE_ALIAS j1, _j1 + CREATE_ALIAS jn, _jn + CREATE_ALIAS y0, _y0 + CREATE_ALIAS y1, _y1 + CREATE_ALIAS yn, _yn + CREATE_ALIAS chgsign, _chgsign + CREATE_ALIAS scalb, _scalb + CREATE_ALIAS finite, _finite + CREATE_ALIAS fpclass, _fpclass + + // These do not exist as exports in ucrtbase, but as import symbols + CREATE_ALIAS fstat, _fstat + CREATE_ALIAS ftime, _ftime + CREATE_ALIAS stat, _stat + CREATE_ALIAS utime, _utime + + END + diff --git a/sdk/lib/crt/oldnames-msvcrt.S b/sdk/lib/crt/oldnames-msvcrt.S index 58d2f6e9491..dcab39e8493 100644 --- a/sdk/lib/crt/oldnames-msvcrt.S +++ b/sdk/lib/crt/oldnames-msvcrt.S @@ -1,182 +1,18 @@ -#ifdef _M_IX86 -#define SYM(name) _##name -#define IMPSYM(name) __imp__##name -#else -#define SYM(name) name -#define IMPSYM(name) __imp_##name -#endif +#include -#if (defined(_M_IX86) || defined(_M_AMD64)) - -#include - -MACRO(CREATE_ALIAS1, alias, target) -#ifdef _USE_ML - EXTERN SYM(&target):PROC - ALIAS = -#else - .weakref SYM(&alias), SYM(&target) -#endif -ENDM - -MACRO(CREATE_ALIAS2, alias, target) -#ifdef _USE_ML - EXTERN IMPSYM(&target):PROC - ALIAS = -#else - .weakref IMPSYM(&alias), IMPSYM(&target) -#endif -ENDM - -MACRO(CREATE_ALIAS, alias, target) - CREATE_ALIAS1 &alias, &target - CREATE_ALIAS2 &alias, &target -ENDM - -#elif defined(_M_ARM) - -#include - - MACRO - CREATE_ALIAS1 $alias, $target - IMPORT SYM($alias), WEAK SYM($target) - MEND - - MACRO - CREATE_ALIAS2 $alias, $target - IMPORT IMPSYM($alias), WEAK IMPSYM($target) - MEND - - MACRO - CREATE_ALIAS $alias, $target - CREATE_ALIAS1 $alias, $target - CREATE_ALIAS2 $alias, $target - MEND -#else -#error "Unsupported platform." -#endif - - /* Do not remove indentation, this would break ARM build! */ - CREATE_ALIAS access, _access - CREATE_ALIAS chdir, _chdir - CREATE_ALIAS chmod, _chmod - CREATE_ALIAS chsize, _chsize - CREATE_ALIAS close, _close - CREATE_ALIAS creat, _creat - CREATE_ALIAS cwait, _cwait + // These exports only exist in msvcrt.dll, not in ucrtbase.dll + // Do not remove indentation, this would break ARM build! CREATE_ALIAS2 daylight, _daylight - CREATE_ALIAS dup, _dup - CREATE_ALIAS dup2, _dup2 - CREATE_ALIAS ecvt, _ecvt - CREATE_ALIAS eof, _eof - CREATE_ALIAS execl, _execl - CREATE_ALIAS execle, _execle - CREATE_ALIAS execlp, _execlp - CREATE_ALIAS execlpe, _execlpe - CREATE_ALIAS execv, _execv - CREATE_ALIAS execve, _execve - CREATE_ALIAS execvp, _execvp - CREATE_ALIAS execvpe, _execvpe - CREATE_ALIAS fcvt, _fcvt - CREATE_ALIAS fdopen, _fdopen - CREATE_ALIAS fgetchar, _fgetchar - CREATE_ALIAS fgetwchar, _fgetwchar - CREATE_ALIAS filelength, _filelength - CREATE_ALIAS fileno, _fileno - CREATE_ALIAS fpreset, _fpreset - CREATE_ALIAS fputchar, _fputchar - CREATE_ALIAS fputwchar, _fputwchar - CREATE_ALIAS fstat, _fstat - CREATE_ALIAS ftime, _ftime - CREATE_ALIAS gcvt, _gcvt - CREATE_ALIAS getch, _getch - CREATE_ALIAS getche, _getche - CREATE_ALIAS getcwd, _getcwd - CREATE_ALIAS getpid, _getpid - CREATE_ALIAS getw, _getw - CREATE_ALIAS heapwalk, _heapwalk - CREATE_ALIAS isatty, _isatty - CREATE_ALIAS isascii, __isascii - CREATE_ALIAS itoa, _itoa - CREATE_ALIAS kbhit, _kbhit - CREATE_ALIAS lfind, _lfind - CREATE_ALIAS lsearch, _lsearch - CREATE_ALIAS lseek, _lseek - CREATE_ALIAS ltoa, _ltoa - CREATE_ALIAS memccpy, _memccpy - CREATE_ALIAS memicmp, _memicmp - CREATE_ALIAS mkdir, _mkdir - CREATE_ALIAS mktemp, _mktemp - CREATE_ALIAS open, _open - CREATE_ALIAS pclose, _pclose - CREATE_ALIAS popen, _popen - CREATE_ALIAS putch, _putch - CREATE_ALIAS putenv, _putenv - CREATE_ALIAS putw, _putw - CREATE_ALIAS read, _read - CREATE_ALIAS rmdir, _rmdir - CREATE_ALIAS rmtmp, _rmtmp - CREATE_ALIAS searchenv, _searchenv - CREATE_ALIAS setmode, _setmode CREATE_ALIAS snprintf, _snprintf - CREATE_ALIAS sopen, _sopen - CREATE_ALIAS spawnl, _spawnl - CREATE_ALIAS spawnle, _spawnle - CREATE_ALIAS spawnlp, _spawnlp - CREATE_ALIAS spawnlpe, _spawnlpe - CREATE_ALIAS spawnv, _spawnv - CREATE_ALIAS spawnve, _spawnve - CREATE_ALIAS spawnvp, _spawnvp - CREATE_ALIAS spawnvpe, _spawnvpe - CREATE_ALIAS stat, _stat CREATE_ALIAS strcmpi, _strcmpi - CREATE_ALIAS strdup, _strdup - CREATE_ALIAS stricmp, _stricmp - CREATE_ALIAS stricoll, _stricoll - CREATE_ALIAS strlwr, _strlwr - CREATE_ALIAS strnicmp, _strnicmp - CREATE_ALIAS strnset, _strnset - CREATE_ALIAS strrev, _strrev - CREATE_ALIAS strset, _strset - CREATE_ALIAS strupr, _strupr - CREATE_ALIAS swab, _swab - CREATE_ALIAS tell, _tell - CREATE_ALIAS tempnam, _tempnam CREATE_ALIAS2 timezone, _timezone CREATE_ALIAS2 tzname, _tzname - CREATE_ALIAS tzset, _tzset - CREATE_ALIAS umask, _umask - CREATE_ALIAS ungetch, _ungetch - CREATE_ALIAS unlink, _unlink - CREATE_ALIAS utime, _utime - CREATE_ALIAS wcsdup, _wcsdup - CREATE_ALIAS wcsicmp, _wcsicmp - CREATE_ALIAS wcsicoll, _wcsicoll - CREATE_ALIAS wcslwr, _wcslwr - CREATE_ALIAS wcsnicmp, _wcsnicmp - CREATE_ALIAS wcsnset, _wcsnset - CREATE_ALIAS wcsrev, _wcsrev - CREATE_ALIAS wcsset, _wcsset - CREATE_ALIAS wcsupr, _wcsupr - CREATE_ALIAS wpopen, _wpopen - CREATE_ALIAS write, _write - // non-ANSI functions declared in math.h - CREATE_ALIAS j0, _j0 - CREATE_ALIAS j1, _j1 - CREATE_ALIAS jn, _jn - CREATE_ALIAS y0, _y0 - CREATE_ALIAS y1, _y1 - CREATE_ALIAS yn, _yn - CREATE_ALIAS chgsign, _chgsign - CREATE_ALIAS scalb, _scalb - CREATE_ALIAS finite, _finite - CREATE_ALIAS fpclass, _fpclass - // C99 functions + + // C99 functions (already properly exported in ucrtbase.dll)) CREATE_ALIAS cabs, _cabs CREATE_ALIAS hypot, _hypot CREATE_ALIAS logb, _logb CREATE_ALIAS nextafter, _nextafter END - diff --git a/sdk/lib/crt/oldnames.cmake b/sdk/lib/crt/oldnames.cmake index 0af57b8cfef..93b2a55721a 100644 --- a/sdk/lib/crt/oldnames.cmake +++ b/sdk/lib/crt/oldnames.cmake @@ -17,7 +17,7 @@ if(NOT MSVC) _add_library(oldnames STATIC EXCLUDE_FROM_ALL ${LIBRARY_PRIVATE_DIR}/oldnames.a) set_target_properties(oldnames PROPERTIES LINKER_LANGUAGE "C") else() - add_asm_files(oldnames_asm oldnames-msvcrt.S) + add_asm_files(oldnames_asm oldnames-common.S oldnames-msvcrt.S) add_library(oldnames ${oldnames_asm}) set_target_properties(oldnames PROPERTIES LINKER_LANGUAGE "C") endif()