Function lldiv() is available since msvcr100.dll and function imaxdiv()
since msvcr120.dll. So for msvcr100.dll and msvcr110.dll define imaxdiv()
as alias to lldiv(). And for older msvcrt versions include mingw-w64
implementation from imaxdiv.c. Do not pack mingw-w64 implementation of
imaxdiv() into libmingwex.a because libmingwex.a takes precedence over
libmsvcr*.a.
---
 mingw-w64-crt/Makefile.am                   | 39 +++++++++++++++------
 mingw-w64-crt/lib-common/msvcr80.mri        |  1 +
 mingw-w64-crt/lib-common/msvcr80_64.mri     |  6 ----
 mingw-w64-crt/lib-common/msvcr90.mri        |  1 +
 mingw-w64-crt/lib-common/msvcr90d.mri       |  1 +
 mingw-w64-crt/lib32/msvcr100.def.in         |  3 +-
 mingw-w64-crt/lib32/msvcr110.def.in         |  1 +
 mingw-w64-crt/lib64/msvcr100.def.in         |  3 +-
 mingw-w64-crt/lib64/msvcr110.def.in         |  1 +
 mingw-w64-crt/libarm32/msvcr110.def         |  1 +
 mingw-w64-crt/libarm32/msvcr120_clr0400.def |  1 +
 mingw-w64-crt/misc/imaxdiv.c                |  4 +++
 12 files changed, 44 insertions(+), 18 deletions(-)
 delete mode 100644 mingw-w64-crt/lib-common/msvcr80_64.mri

diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 6e670af0b2e5..02b19072ad23 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -195,6 +195,7 @@ src_msvcrt_common=\
 
 src_msvcrt=\
   misc/_configthreadlocale.c \
+  misc/imaxdiv.c \
   misc/invalid_parameter_handler.c \
   misc/output_format.c \
   misc/purecall.c \
@@ -436,6 +437,7 @@ src_crtdll=\
   misc/__p__fmode.c \
   misc/__set_app_type.c \
   misc/dummy__setusermatherr.c \
+  misc/imaxdiv.c \
   misc/invalid_parameter_handler.c \
   misc/lc_locale_func.c \
   misc/seterrno.c \
@@ -456,6 +458,7 @@ src_msvcrt10=\
   misc/__p__fmode.c \
   misc/__set_app_type.c \
   misc/dummy__setusermatherr.c \
+  misc/imaxdiv.c \
   misc/invalid_parameter_handler.c \
   misc/lc_locale_func.c \
   misc/seterrno.c \
@@ -471,6 +474,7 @@ src_msvcrt20=\
   misc/___mb_cur_max_func.c \
   misc/__set_app_type.c \
   misc/dummy__setusermatherr.c \
+  misc/imaxdiv.c \
   misc/invalid_parameter_handler.c \
   misc/lc_locale_func.c \
   misc/seterrno.c \
@@ -484,6 +488,7 @@ src_msvcrt20=\
 
 src_msvcrt40=\
   misc/___mb_cur_max_func.c \
+  misc/imaxdiv.c \
   misc/invalid_parameter_handler.c \
   misc/lc_locale_func.c \
   misc/seterrno.c \
@@ -496,13 +501,21 @@ src_msvcrt40=\
   stdio/mingw_lock.c
 
 src_msvcr70=\
+  misc/imaxdiv.c \
   misc/invalid_parameter_handler.c \
   stdio/mingw_lock.c
 
 src_msvcr71=\
+  misc/imaxdiv.c \
   misc/invalid_parameter_handler.c \
   stdio/mingw_lock.c
 
+src_msvcr80=\
+  misc/imaxdiv.c
+
+src_msvcr90=\
+  misc/imaxdiv.c
+
 src_msvcr120_app=\
   misc/__set_app_type.c \
   misc/_getpid.c
@@ -569,7 +582,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/imaxdiv.c          
misc/isblank.c               misc/iswblank.c        \
+  misc/gettimeofday.c    misc/imaxabs.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 \
@@ -981,15 +994,15 @@ lib32/libmsvcr71.a: lib32/msvcr71.mri 
lib32/libmsvcr71_def.a lib32/libmsvcrt_com
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib32_DATA += lib32/libmsvcr80.a
-lib32/libmsvcr80.a: lib-common/msvcr80.mri lib32/libmsvcr80_def.a 
lib32/libmsvcrt_common.a
+lib32/libmsvcr80.a: lib-common/msvcr80.mri lib32/libmsvcr80_def.a 
lib32/libmsvcrt_common.a lib32/libmsvcr80_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib32_DATA += lib32/libmsvcr90.a
-lib32/libmsvcr90.a: lib-common/msvcr90.mri lib32/libmsvcr90_def.a 
lib32/libmsvcrt_common.a
+lib32/libmsvcr90.a: lib-common/msvcr90.mri lib32/libmsvcr90_def.a 
lib32/libmsvcrt_common.a lib32/libmsvcr90_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib32_DATA += lib32/libmsvcr90d.a
-lib32/libmsvcr90d.a: lib-common/msvcr90d.mri lib32/libmsvcr90d_def.a 
lib32/libmsvcrt_common.a
+lib32/libmsvcr90d.a: lib-common/msvcr90d.mri lib32/libmsvcr90d_def.a 
lib32/libmsvcrt_common.a lib32/libmsvcr90_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib32_DATA += lib32/libmsvcr100.a
@@ -1017,7 +1030,7 @@ lib32/libucrtbase.a: lib-common/ucrtbase.mri 
lib32/libucrtbase_def.a lib32/libuc
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib32_DATA += lib32/libucrt.a lib32/libucrtapp.a
-noinst_LIBRARIES += lib32/libcrtdll_extra.a lib32/libmsvcrt10_extra.a 
lib32/libmsvcrt20_extra.a lib32/libmsvcrt40_extra.a lib32/libmsvcrt_common.a 
lib32/libmsvcrt_extra.a lib32/libmsvcr70_extra.a lib32/libmsvcr71_extra.a 
lib32/libmsvcr120_app_extra.a lib32/libucrt_extra.a lib32/libucrtapp_extra.a
+noinst_LIBRARIES += lib32/libcrtdll_extra.a lib32/libmsvcrt10_extra.a 
lib32/libmsvcrt20_extra.a lib32/libmsvcrt40_extra.a lib32/libmsvcrt_common.a 
lib32/libmsvcrt_extra.a lib32/libmsvcr70_extra.a lib32/libmsvcr71_extra.a 
lib32/libmsvcr80_extra.a lib32/libmsvcr90_extra.a lib32/libmsvcr120_app_extra.a 
lib32/libucrt_extra.a lib32/libucrtapp_extra.a
 lib32_libcrtdll_extra_a_SOURCES = $(src_crtdll)
 lib32_libcrtdll_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib32_libmsvcrt10_extra_a_SOURCES = $(src_msvcrt10)
@@ -1034,6 +1047,10 @@ 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_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)
 lib32_libmsvcr120_app_extra_a_SOURCES = $(src_msvcr120_app)
 lib32_libmsvcr120_app_extra_a_CPPFLAGS=$(CPPFLAGS32) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib32_libucrt_extra_a_SOURCES = $(src_ucrtbase)
@@ -1321,15 +1338,15 @@ if !W32API
 lib64_DATA += lib64/libmsvcp60.a lib64/libmsvcp120_app.a
 
 lib64_DATA += lib64/libmsvcr80.a
-lib64/libmsvcr80.a: lib-common/msvcr80_64.mri lib64/libmsvcr80_def.a 
lib64/libmsvcrt_common.a lib64/libmsvcr80_extra.a
+lib64/libmsvcr80.a: lib-common/msvcr80.mri lib64/libmsvcr80_def.a 
lib64/libmsvcrt_common.a lib64/libmsvcr80_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib64_DATA += lib64/libmsvcr90.a
-lib64/libmsvcr90.a: lib-common/msvcr90.mri lib64/libmsvcr90_def.a 
lib64/libmsvcrt_common.a
+lib64/libmsvcr90.a: lib-common/msvcr90.mri lib64/libmsvcr90_def.a 
lib64/libmsvcrt_common.a lib64/libmsvcr90_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib64_DATA += lib64/libmsvcr90d.a
-lib64/libmsvcr90d.a: lib-common/msvcr90d.mri lib64/libmsvcr90d_def.a 
lib64/libmsvcrt_common.a
+lib64/libmsvcr90d.a: lib-common/msvcr90d.mri lib64/libmsvcr90d_def.a 
lib64/libmsvcrt_common.a lib64/libmsvcr90_extra.a
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib64_DATA += lib64/libmsvcr100.a
@@ -1357,13 +1374,15 @@ lib64/libucrtbase.a: lib-common/ucrtbase.mri 
lib64/libucrtbase_def.a lib64/libuc
        cd $(dir $@) && $(AR) -M < $(abspath $<)
 
 lib64_DATA += lib64/libucrt.a lib64/libucrtapp.a
-noinst_LIBRARIES += lib64/libmsvcrt_common.a lib64/libmsvcrt_extra.a 
lib64/libmsvcr80_extra.a lib64/libmsvcr120_app_extra.a lib64/libucrt_extra.a 
lib64/libucrtapp_extra.a
+noinst_LIBRARIES += lib64/libmsvcrt_common.a lib64/libmsvcrt_extra.a 
lib64/libmsvcr80_extra.a lib64/libmsvcr90_extra.a lib64/libmsvcr120_app_extra.a 
lib64/libucrt_extra.a lib64/libucrtapp_extra.a
 lib64_libmsvcrt_common_a_SOURCES = $(src_msvcrt_common)
 lib64_libmsvcrt_common_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib64_libmsvcrt_extra_a_SOURCES = $(src_msvcrt64)
 lib64_libmsvcrt_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ 
-D__LIBMSVCRT_OS__ $(extra_include) $(sysincludes)
-lib64_libmsvcr80_extra_a_SOURCES = $(src_msvcr80_64)
+lib64_libmsvcr80_extra_a_SOURCES = $(src_msvcr80) $(src_msvcr80_64)
 lib64_libmsvcr80_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
+lib64_libmsvcr90_extra_a_SOURCES = $(src_msvcr90)
+lib64_libmsvcr90_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib64_libmsvcr120_app_extra_a_SOURCES = $(src_msvcr120_app)
 lib64_libmsvcr120_app_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 lib64_libucrt_extra_a_SOURCES = $(src_ucrtbase)
diff --git a/mingw-w64-crt/lib-common/msvcr80.mri 
b/mingw-w64-crt/lib-common/msvcr80.mri
index 16d666843e4c..608693706373 100644
--- a/mingw-w64-crt/lib-common/msvcr80.mri
+++ b/mingw-w64-crt/lib-common/msvcr80.mri
@@ -1,5 +1,6 @@
 CREATE libmsvcr80.a
 ADDLIB libmsvcr80_def.a
 ADDLIB libmsvcrt_common.a
+ADDLIB libmsvcr80_extra.a
 SAVE
 END
diff --git a/mingw-w64-crt/lib-common/msvcr80_64.mri 
b/mingw-w64-crt/lib-common/msvcr80_64.mri
deleted file mode 100644
index 608693706373..000000000000
--- a/mingw-w64-crt/lib-common/msvcr80_64.mri
+++ /dev/null
@@ -1,6 +0,0 @@
-CREATE libmsvcr80.a
-ADDLIB libmsvcr80_def.a
-ADDLIB libmsvcrt_common.a
-ADDLIB libmsvcr80_extra.a
-SAVE
-END
diff --git a/mingw-w64-crt/lib-common/msvcr90.mri 
b/mingw-w64-crt/lib-common/msvcr90.mri
index 262cf3eb8d3e..89f9cc506550 100644
--- a/mingw-w64-crt/lib-common/msvcr90.mri
+++ b/mingw-w64-crt/lib-common/msvcr90.mri
@@ -1,5 +1,6 @@
 CREATE libmsvcr90.a
 ADDLIB libmsvcr90_def.a
 ADDLIB libmsvcrt_common.a
+ADDLIB libmsvcr90_extra.a
 SAVE
 END
diff --git a/mingw-w64-crt/lib-common/msvcr90d.mri 
b/mingw-w64-crt/lib-common/msvcr90d.mri
index 322f17aaa935..75c16ea7cb57 100644
--- a/mingw-w64-crt/lib-common/msvcr90d.mri
+++ b/mingw-w64-crt/lib-common/msvcr90d.mri
@@ -1,5 +1,6 @@
 CREATE libmsvcr90d.a
 ADDLIB libmsvcr90d_def.a
 ADDLIB libmsvcrt_common.a
+ADDLIB libmsvcr90_extra.a
 SAVE
 END
diff --git a/mingw-w64-crt/lib32/msvcr100.def.in 
b/mingw-w64-crt/lib32/msvcr100.def.in
index 83ee8225ed53..77f98c455d38 100644
--- a/mingw-w64-crt/lib32/msvcr100.def.in
+++ b/mingw-w64-crt/lib32/msvcr100.def.in
@@ -1784,7 +1784,8 @@ labs
 ldexp DATA
 ldiv
 llabs DATA
-lldiv DATA
+lldiv
+imaxdiv == lldiv
 localeconv
 log DATA
 ; If we implement log10, we can set it to DATA only.
diff --git a/mingw-w64-crt/lib32/msvcr110.def.in 
b/mingw-w64-crt/lib32/msvcr110.def.in
index 62a5ee341553..ffe409511029 100644
--- a/mingw-w64-crt/lib32/msvcr110.def.in
+++ b/mingw-w64-crt/lib32/msvcr110.def.in
@@ -1918,6 +1918,7 @@ ldexp DATA
 ldiv
 llabs
 lldiv
+imaxdiv == lldiv
 localeconv
 log DATA
 ; If we implement log10, we can set it to DATA only.
diff --git a/mingw-w64-crt/lib64/msvcr100.def.in 
b/mingw-w64-crt/lib64/msvcr100.def.in
index a2e3cb60f4dd..6be376c52c86 100644
--- a/mingw-w64-crt/lib64/msvcr100.def.in
+++ b/mingw-w64-crt/lib64/msvcr100.def.in
@@ -1740,7 +1740,8 @@ labs
 ldexp DATA
 ldiv
 llabs DATA
-lldiv DATA
+lldiv
+imaxdiv == lldiv
 localeconv
 log DATA
 log10
diff --git a/mingw-w64-crt/lib64/msvcr110.def.in 
b/mingw-w64-crt/lib64/msvcr110.def.in
index 6bcb84080952..550ea0ed7288 100644
--- a/mingw-w64-crt/lib64/msvcr110.def.in
+++ b/mingw-w64-crt/lib64/msvcr110.def.in
@@ -1865,6 +1865,7 @@ ldexp
 ldiv
 llabs
 lldiv
+imaxdiv == lldiv
 localeconv
 log
 log10
diff --git a/mingw-w64-crt/libarm32/msvcr110.def 
b/mingw-w64-crt/libarm32/msvcr110.def
index 0b4855db8ed3..63ec70709f14 100644
--- a/mingw-w64-crt/libarm32/msvcr110.def
+++ b/mingw-w64-crt/libarm32/msvcr110.def
@@ -1495,6 +1495,7 @@ ldexp
 ldiv
 llabs
 lldiv
+imaxdiv == lldiv
 localeconv
 log
 log10
diff --git a/mingw-w64-crt/libarm32/msvcr120_clr0400.def 
b/mingw-w64-crt/libarm32/msvcr120_clr0400.def
index a1b3f7f30955..e5af3ccf0768 100644
--- a/mingw-w64-crt/libarm32/msvcr120_clr0400.def
+++ b/mingw-w64-crt/libarm32/msvcr120_clr0400.def
@@ -1494,6 +1494,7 @@ ldexp
 ldiv
 llabs
 lldiv
+imaxdiv == lldiv
 localeconv
 log
 log10
diff --git a/mingw-w64-crt/misc/imaxdiv.c b/mingw-w64-crt/misc/imaxdiv.c
index 6faf4943a88a..7db911fa940c 100644
--- a/mingw-w64-crt/misc/imaxdiv.c
+++ b/mingw-w64-crt/misc/imaxdiv.c
@@ -19,6 +19,7 @@
 #include       <stdlib.h>
 
 imaxdiv_t
+__cdecl
 imaxdiv(intmax_t numer, intmax_t denom)
 {
   imaxdiv_t    result;
@@ -26,6 +27,9 @@ imaxdiv(intmax_t numer, intmax_t denom)
   result.rem = numer % denom;
   return result;
 }
+imaxdiv_t (__cdecl *__MINGW_IMP_SYMBOL(imaxdiv))(intmax_t, intmax_t) = imaxdiv;
 
 lldiv_t __attribute__ ((alias ("imaxdiv")))
+__cdecl
 lldiv (long long, long long); 
+lldiv_t (__cdecl *__MINGW_IMP_SYMBOL(lldiv))(long long, long long) = lldiv;
-- 
2.20.1



_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to