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