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

Reply via email to