Function _abs64() is available since msvcr80.dll on 64-bit systems and
since msvcr90.dll on 32-bit systems. It is also available on 64-bit version
of msvcrt.dll system library. Function llabs() is available since
msvcr100.dll and function imaxabs() since msvcr120.dll.
For older msvcrt versions which do not provide _abs64() function, include
mingw-w64 implementation from imaxabs.c file (by merging it with abs64.c
file) and for new msvcrt version define just symbol aliases. Do not pack
mingw-w64 implementation of imaxabs() into libmingwex.a because
libmingwex.a takes precedence over libmsvcr*.a.
---
mingw-w64-crt/Makefile.am | 16 +++++++++++++---
mingw-w64-crt/lib-common/msvcrt.def.in | 2 ++
mingw-w64-crt/lib32/msvcr100.def.in | 3 ++-
mingw-w64-crt/lib32/msvcr110.def.in | 1 +
mingw-w64-crt/lib32/msvcr90.def.in | 2 ++
mingw-w64-crt/lib32/msvcr90d.def.in | 2 ++
mingw-w64-crt/lib64/msvcr100.def.in | 3 ++-
mingw-w64-crt/lib64/msvcr110.def.in | 1 +
mingw-w64-crt/lib64/msvcr80.def.in | 2 ++
mingw-w64-crt/lib64/msvcr90.def.in | 2 ++
mingw-w64-crt/lib64/msvcr90d.def.in | 2 ++
mingw-w64-crt/libarm32/msvcr110.def | 1 +
mingw-w64-crt/libarm32/msvcr120_clr0400.def | 1 +
mingw-w64-crt/math/abs64.c | 6 ------
mingw-w64-crt/misc/imaxabs.c | 8 +++++++-
15 files changed, 40 insertions(+), 12 deletions(-)
delete mode 100644 mingw-w64-crt/math/abs64.c
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 02b19072ad23..7fbf2adfa070 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -294,6 +294,7 @@ src_msvcrt32=\
misc/_create_locale.c \
misc/_free_locale.c \
misc/_get_current_locale.c \
+ misc/imaxabs.c \
misc/lc_locale_func.c \
misc/seterrno.c \
misc/wassert.c \
@@ -420,6 +421,9 @@ src_msvcrtarm64=\
stdio/_setmaxstdio.c \
stdio/gets.c
+src_msvcr80_32=\
+ misc/imaxabs.c
+
src_msvcr80_64=\
misc/__p___argv.c \
misc/__p__acmdln.c \
@@ -437,6 +441,7 @@ src_crtdll=\
misc/__p__fmode.c \
misc/__set_app_type.c \
misc/dummy__setusermatherr.c \
+ misc/imaxabs.c \
misc/imaxdiv.c \
misc/invalid_parameter_handler.c \
misc/lc_locale_func.c \
@@ -458,6 +463,7 @@ src_msvcrt10=\
misc/__p__fmode.c \
misc/__set_app_type.c \
misc/dummy__setusermatherr.c \
+ misc/imaxabs.c \
misc/imaxdiv.c \
misc/invalid_parameter_handler.c \
misc/lc_locale_func.c \
@@ -474,6 +480,7 @@ src_msvcrt20=\
misc/___mb_cur_max_func.c \
misc/__set_app_type.c \
misc/dummy__setusermatherr.c \
+ misc/imaxabs.c \
misc/imaxdiv.c \
misc/invalid_parameter_handler.c \
misc/lc_locale_func.c \
@@ -488,6 +495,7 @@ src_msvcrt20=\
src_msvcrt40=\
misc/___mb_cur_max_func.c \
+ misc/imaxabs.c \
misc/imaxdiv.c \
misc/invalid_parameter_handler.c \
misc/lc_locale_func.c \
@@ -501,11 +509,13 @@ src_msvcrt40=\
stdio/mingw_lock.c
src_msvcr70=\
+ misc/imaxabs.c \
misc/imaxdiv.c \
misc/invalid_parameter_handler.c \
stdio/mingw_lock.c
src_msvcr71=\
+ misc/imaxabs.c \
misc/imaxdiv.c \
misc/invalid_parameter_handler.c \
stdio/mingw_lock.c
@@ -570,7 +580,7 @@ src_libmingwex=\
math/sqrtf.c math/sqrtl.c math/tanhf.c math/tanhl.c
math/tgamma.c \
math/tgammaf.c math/tgammal.c math/truncl.c \
math/powi.def.h math/sqrt.def.h \
- math/cephes_mconf.h math/fp_consts.h math/abs64.c \
+ math/cephes_mconf.h math/fp_consts.h \
\
misc/mb_wc_common.h \
misc/mingw_longjmp.S \
@@ -582,7 +592,7 @@ src_libmingwex=\
misc/feclearexcept.c misc/fegetenv.c misc/fegetexceptflag.c
misc/fegetround.c misc/feholdexcept.c \
misc/feraiseexcept.c misc/fesetenv.c misc/fesetexceptflag.c
misc/fesetround.c misc/fetestexcept.c \
misc/feupdateenv.c misc/ftruncate.c misc/fwide.c
misc/getlogin.c misc/getopt.c \
- misc/gettimeofday.c misc/imaxabs.c misc/isblank.c
misc/iswblank.c \
+ misc/gettimeofday.c misc/isblank.c misc/iswblank.c \
misc/mempcpy.c misc/mingw-aligned-malloc.c \
misc/mingw_matherr.c misc/mingw_mbwc_convert.c misc/mingw_usleep.c
misc/mingw_wcstod.c misc/mingw_wcstof.c \
misc/mingw_wcstold.c \
@@ -1047,7 +1057,7 @@ lib32_libmsvcr70_extra_a_SOURCES = $(src_msvcr70)
lib32_libmsvcr70_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__
$(extra_include) $(sysincludes)
lib32_libmsvcr71_extra_a_SOURCES = $(src_msvcr71)
lib32_libmsvcr71_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__
$(extra_include) $(sysincludes)
-lib32_libmsvcr80_extra_a_SOURCES = $(src_msvcr80)
+lib32_libmsvcr80_extra_a_SOURCES = $(src_msvcr80) $(src_msvcr80_32)
lib32_libmsvcr80_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__
$(extra_include) $(sysincludes)
lib32_libmsvcr90_extra_a_SOURCES = $(src_msvcr90)
lib32_libmsvcr90_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__
$(extra_include) $(sysincludes)
diff --git a/mingw-w64-crt/lib-common/msvcrt.def.in
b/mingw-w64-crt/lib-common/msvcrt.def.in
index afdb3f8b2b1b..da26f7b6c5e9 100644
--- a/mingw-w64-crt/lib-common/msvcrt.def.in
+++ b/mingw-w64-crt/lib-common/msvcrt.def.in
@@ -350,6 +350,8 @@ __wgetmainargs
F_X86_ANY(__winitenv DATA)
F_I386(_abnormal_termination)
F_NON_I386(_abs64)
+F_NON_I386(llabs == _abs64)
+F_NON_I386(imaxabs == _abs64)
_access
; _access_s Replaced by emu
_acmdln DATA
diff --git a/mingw-w64-crt/lib32/msvcr100.def.in
b/mingw-w64-crt/lib32/msvcr100.def.in
index 77f98c455d38..e2e0e18c770f 100644
--- a/mingw-w64-crt/lib32/msvcr100.def.in
+++ b/mingw-w64-crt/lib32/msvcr100.def.in
@@ -1783,7 +1783,8 @@ isxdigit
labs
ldexp DATA
ldiv
-llabs DATA
+llabs
+imaxabs == llabs
lldiv
imaxdiv == lldiv
localeconv
diff --git a/mingw-w64-crt/lib32/msvcr110.def.in
b/mingw-w64-crt/lib32/msvcr110.def.in
index ffe409511029..2045e0a5462a 100644
--- a/mingw-w64-crt/lib32/msvcr110.def.in
+++ b/mingw-w64-crt/lib32/msvcr110.def.in
@@ -1917,6 +1917,7 @@ labs
ldexp DATA
ldiv
llabs
+imaxabs == llabs
lldiv
imaxdiv == lldiv
localeconv
diff --git a/mingw-w64-crt/lib32/msvcr90.def.in
b/mingw-w64-crt/lib32/msvcr90.def.in
index 900b8a639b70..4424adfe5b27 100644
--- a/mingw-w64-crt/lib32/msvcr90.def.in
+++ b/mingw-w64-crt/lib32/msvcr90.def.in
@@ -329,6 +329,8 @@ __wgetmainargs
__winitenv DATA
_abnormal_termination
_abs64
+llabs == _abs64
+imaxabs == _abs64
_access
_access_s
_acmdln DATA
diff --git a/mingw-w64-crt/lib32/msvcr90d.def.in
b/mingw-w64-crt/lib32/msvcr90d.def.in
index 7667df0c9ebd..2835301f01ad 100644
--- a/mingw-w64-crt/lib32/msvcr90d.def.in
+++ b/mingw-w64-crt/lib32/msvcr90d.def.in
@@ -372,6 +372,8 @@ __wgetmainargs
__winitenv DATA
_abnormal_termination
_abs64
+llabs == _abs64
+imaxabs == _abs64
_access
_access_s
_acmdln DATA
diff --git a/mingw-w64-crt/lib64/msvcr100.def.in
b/mingw-w64-crt/lib64/msvcr100.def.in
index 6be376c52c86..1c72309d494b 100644
--- a/mingw-w64-crt/lib64/msvcr100.def.in
+++ b/mingw-w64-crt/lib64/msvcr100.def.in
@@ -1739,7 +1739,8 @@ isxdigit
labs
ldexp DATA
ldiv
-llabs DATA
+llabs
+imaxabs == llabs
lldiv
imaxdiv == lldiv
localeconv
diff --git a/mingw-w64-crt/lib64/msvcr110.def.in
b/mingw-w64-crt/lib64/msvcr110.def.in
index 550ea0ed7288..f3fc9a25bbb0 100644
--- a/mingw-w64-crt/lib64/msvcr110.def.in
+++ b/mingw-w64-crt/lib64/msvcr110.def.in
@@ -1864,6 +1864,7 @@ labs
ldexp
ldiv
llabs
+imaxabs == llabs
lldiv
imaxdiv == lldiv
localeconv
diff --git a/mingw-w64-crt/lib64/msvcr80.def.in
b/mingw-w64-crt/lib64/msvcr80.def.in
index 60f91cb667a3..16a6b57c08bc 100644
--- a/mingw-w64-crt/lib64/msvcr80.def.in
+++ b/mingw-w64-crt/lib64/msvcr80.def.in
@@ -183,6 +183,8 @@ __wcserror
__wgetmainargs
__winitenv DATA
_abs64
+llabs == _abs64
+imaxabs == _abs64
_access
_acmdln DATA
_aexit_rtn DATA
diff --git a/mingw-w64-crt/lib64/msvcr90.def.in
b/mingw-w64-crt/lib64/msvcr90.def.in
index 8095147fe779..1ffd75541c03 100644
--- a/mingw-w64-crt/lib64/msvcr90.def.in
+++ b/mingw-w64-crt/lib64/msvcr90.def.in
@@ -291,6 +291,8 @@ __wcsncnt
__wgetmainargs
__winitenv DATA
_abs64
+llabs == _abs64
+imaxabs == _abs64
_access
_access_s
_acmdln DATA
diff --git a/mingw-w64-crt/lib64/msvcr90d.def.in
b/mingw-w64-crt/lib64/msvcr90d.def.in
index a98257ee8e2b..07adb60ddac5 100644
--- a/mingw-w64-crt/lib64/msvcr90d.def.in
+++ b/mingw-w64-crt/lib64/msvcr90d.def.in
@@ -328,6 +328,8 @@ __wcsncnt
__wgetmainargs
__winitenv DATA
_abs64
+llabs == _abs64
+imaxabs == _abs64
_access
_access_s
_acmdln DATA
diff --git a/mingw-w64-crt/libarm32/msvcr110.def
b/mingw-w64-crt/libarm32/msvcr110.def
index 63ec70709f14..4d3d0ee6dafa 100644
--- a/mingw-w64-crt/libarm32/msvcr110.def
+++ b/mingw-w64-crt/libarm32/msvcr110.def
@@ -1494,6 +1494,7 @@ labs
ldexp
ldiv
llabs
+imaxabs == llabs
lldiv
imaxdiv == lldiv
localeconv
diff --git a/mingw-w64-crt/libarm32/msvcr120_clr0400.def
b/mingw-w64-crt/libarm32/msvcr120_clr0400.def
index e5af3ccf0768..ab659babc161 100644
--- a/mingw-w64-crt/libarm32/msvcr120_clr0400.def
+++ b/mingw-w64-crt/libarm32/msvcr120_clr0400.def
@@ -1493,6 +1493,7 @@ labs
ldexp
ldiv
llabs
+imaxabs == llabs
lldiv
imaxdiv == lldiv
localeconv
diff --git a/mingw-w64-crt/math/abs64.c b/mingw-w64-crt/math/abs64.c
deleted file mode 100644
index 3f2133a8c1b4..000000000000
--- a/mingw-w64-crt/math/abs64.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <intrin.h>
-#include <stdlib.h>
-
-__MINGW_EXTENSION __int64 __cdecl _abs64(__int64 x) {
- return llabs(x);
-}
diff --git a/mingw-w64-crt/misc/imaxabs.c b/mingw-w64-crt/misc/imaxabs.c
index 2ee550d1e765..4f144a7ad56c 100644
--- a/mingw-w64-crt/misc/imaxabs.c
+++ b/mingw-w64-crt/misc/imaxabs.c
@@ -16,7 +16,13 @@
#include <inttypes.h>
intmax_t
+__cdecl
imaxabs (intmax_t _j)
{ return _j >= 0 ? _j : -_j; }
+intmax_t (__cdecl *__MINGW_IMP_SYMBOL(imaxabs))(intmax_t) = imaxabs;
-long long __attribute__ ((alias ("imaxabs"))) llabs (long long);
+long long __attribute__ ((alias ("imaxabs"))) __cdecl llabs (long long);
+long long (__cdecl *__MINGW_IMP_SYMBOL(llabs))(long long) = llabs;
+
+__int64 __attribute__ ((alias ("imaxabs"))) __cdecl _abs64 (__int64);
+__int64 (__cdecl *__MINGW_IMP_SYMBOL(_abs64))(__int64) = _abs64;
--
2.20.1
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public