diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 195251a..1c40fe3 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -186,14 +186,10 @@
   stdio/vsnwprintf_alias.c \
   stdio/vswprintf.c \
   stdio/vswprintf_alias.c \
-  stdio/stat32.c \
   stdio/stat32i64.c \
   stdio/stat64.c \
-  stdio/stat64i32.c \
-  stdio/wstat32.c \
   stdio/wstat32i64.c \
   stdio/wstat64.c \
-  stdio/wstat64i32.c \
   math/cbrt.c math/cbrtf.c \
   math/copysign.c math/copysignf.c \
   math/coshf.c \
@@ -350,7 +346,11 @@
   secapi/wmemcpy_s.c \
   secapi/wmemmove_s.c \
   stdio/_ftelli64.c \
-  stdio/mingw_lock.c
+  stdio/mingw_lock.c \
+  stdio/msvcr110pre_stat32.c \
+  stdio/msvcr110pre_stat64i32.c \
+  stdio/msvcr110pre_wstat32.c \
+  stdio/msvcr110pre_wstat64i32.c
 
 src_msvcrt_add_x86=\
   secapi/_access_s.c \
@@ -878,6 +878,12 @@
 src_pre_msvcr100=\
   misc/imaxdiv.c
 
+src_pre_msvcr110=\
+  stdio/msvcr110pre_stat32.c \
+  stdio/msvcr110pre_stat64i32.c \
+  stdio/msvcr110pre_wstat32.c \
+  stdio/msvcr110pre_wstat64i32.c
+
 src_pre_msvcr120=\
   $(src_msvcrt_add_vscanf) \
   math/i386__copysignf.c \
@@ -895,6 +901,12 @@
   misc/__p__osplatform_emul.c \
   misc/__p__osver_emul.c
 
+src_post_msvcr100=\
+  stdio/msvcr110plus_stat32.c \
+  stdio/msvcr110plus_stat64i32.c \
+  stdio/msvcr110plus_wstat32.c \
+  stdio/msvcr110plus_wstat64i32.c
+
 src_crtdll=\
   $(src_pre_msvcrt20) \
   $(src_pre_msvcrt40) \
@@ -903,6 +915,7 @@
   $(src_pre_msvcr71) \
   $(src_pre_msvcr80) \
   $(src_pre_msvcr100) \
+  $(src_pre_msvcr110) \
   $(src_pre_msvcr120) \
   misc/crtdll__getmainargs.c \
   misc/crtdll__ismbblead.c \
@@ -918,6 +931,7 @@
   $(src_pre_msvcr71) \
   $(src_pre_msvcr80) \
   $(src_pre_msvcr100) \
+  $(src_pre_msvcr110) \
   $(src_pre_msvcr120) \
   misc/crtdll__getmainargs.c \
   misc/msvcrt10__ismbblead.c
@@ -929,6 +943,7 @@
   $(src_pre_msvcr71) \
   $(src_pre_msvcr80) \
   $(src_pre_msvcr100) \
+  $(src_pre_msvcr110) \
   $(src_pre_msvcr120) \
   misc/msvcrt20__getmainargs.c \
   misc/msvcrt20__wgetmainargs.c
@@ -939,6 +954,7 @@
   $(src_pre_msvcr71) \
   $(src_pre_msvcr80) \
   $(src_pre_msvcr100) \
+  $(src_pre_msvcr110) \
   $(src_pre_msvcr120) \
   misc/msvcrt__getmainargs.c \
   misc/msvcrt__wgetmainargs.c
@@ -948,6 +964,7 @@
   $(src_pre_msvcr71) \
   $(src_pre_msvcr80) \
   $(src_pre_msvcr100) \
+  $(src_pre_msvcr110) \
   $(src_pre_msvcr120) \
   misc/msvcrt__getmainargs.c \
   misc/msvcrt__wgetmainargs.c
@@ -956,27 +973,32 @@
   $(src_pre_msvcr71) \
   $(src_pre_msvcr80) \
   $(src_pre_msvcr100) \
+  $(src_pre_msvcr110) \
   $(src_pre_msvcr120) \
   misc/__p__osplatform.c
 
 src_msvcr71=\
   $(src_pre_msvcr80) \
   $(src_pre_msvcr100) \
+  $(src_pre_msvcr110) \
   $(src_pre_msvcr120) \
   misc/__p__osplatform.c
 
 src_msvcr80=\
   $(src_pre_msvcr100) \
+  $(src_pre_msvcr110) \
   $(src_pre_msvcr120) \
   $(src_pre_msvcr120_post_msvcr71)
 
 src_msvcr90=\
   $(src_pre_msvcr100) \
+  $(src_pre_msvcr110) \
   $(src_pre_msvcr120) \
   $(src_pre_msvcr120_post_msvcr71) \
   $(src_post_msvcr80)
 
 src_msvcr100=\
+  $(src_pre_msvcr110) \
   $(src_pre_msvcr120) \
   $(src_pre_msvcr120_post_msvcr71) \
   $(src_post_msvcr80)
@@ -984,13 +1006,16 @@
 src_msvcr110=\
   $(src_pre_msvcr120) \
   $(src_pre_msvcr120_post_msvcr71) \
-  $(src_post_msvcr80)
+  $(src_post_msvcr80) \
+  $(src_post_msvcr100)
 
 src_msvcr120=\
-  $(src_post_msvcr80)
+  $(src_post_msvcr80) \
+  $(src_post_msvcr100)
 
 src_msvcr120_app=\
   $(src_post_msvcr80) \
+  $(src_post_msvcr100) \
   misc/__p___initenv.c \
   misc/__p___winitenv.c \
   misc/__p__environ.c \
diff --git a/mingw-w64-crt/stdio/stat32.c b/mingw-w64-crt/stdio/msvcr110plus_stat32.c
similarity index 100%
rename from mingw-w64-crt/stdio/stat32.c
rename to mingw-w64-crt/stdio/msvcr110plus_stat32.c
diff --git a/mingw-w64-crt/stdio/stat64i32.c b/mingw-w64-crt/stdio/msvcr110plus_stat64i32.c
similarity index 100%
rename from mingw-w64-crt/stdio/stat64i32.c
rename to mingw-w64-crt/stdio/msvcr110plus_stat64i32.c
diff --git a/mingw-w64-crt/stdio/wstat32.c b/mingw-w64-crt/stdio/msvcr110plus_wstat32.c
similarity index 100%
rename from mingw-w64-crt/stdio/wstat32.c
rename to mingw-w64-crt/stdio/msvcr110plus_wstat32.c
diff --git a/mingw-w64-crt/stdio/wstat64i32.c b/mingw-w64-crt/stdio/msvcr110plus_wstat64i32.c
similarity index 100%
rename from mingw-w64-crt/stdio/wstat64i32.c
rename to mingw-w64-crt/stdio/msvcr110plus_wstat64i32.c
diff --git a/mingw-w64-crt/stdio/msvcr110pre_stat32.c b/mingw-w64-crt/stdio/msvcr110pre_stat32.c
new file mode 100644
index 0000000..d2d45e8
--- /dev/null
+++ b/mingw-w64-crt/stdio/msvcr110pre_stat32.c
@@ -0,0 +1,54 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <errno.h>
+
+char *__mingw_fix_stat_path(const char *_path);
+
+/* For pre-msvcr110 builds, we cannot use _stat32() function as it does
+ * not signal EOVERFLOW when file size does not fit into the st_size field,
+ * as it is required by POSIX stat() function.
+ * This file is used only for pre-msvcr110 builds.
+ */
+int __cdecl stat32(const char *_Filename, struct _stat32 *_Stat);
+int __cdecl stat32(const char *_Filename, struct _stat32 *_Stat)
+{
+  struct _stat32i64 st;
+  char *_path = __mingw_fix_stat_path(_Filename);
+  int ret = _stat32i64(_path, &st);
+  if (_path != _Filename)
+    free(_path);
+  if (ret != 0)
+    return ret;
+  if (st.st_size > UINT32_MAX) {
+    errno = EOVERFLOW;
+    return -1;
+  }
+  _Stat->st_dev=st.st_dev;
+  _Stat->st_ino=st.st_ino;
+  _Stat->st_mode=st.st_mode;
+  _Stat->st_nlink=st.st_nlink;
+  _Stat->st_uid=st.st_uid;
+  _Stat->st_gid=st.st_gid;
+  _Stat->st_rdev=st.st_rdev;
+  _Stat->st_size=(_off_t) st.st_size;
+  _Stat->st_atime=st.st_atime;
+  _Stat->st_mtime=st.st_mtime;
+  _Stat->st_ctime=st.st_ctime;
+  return 0;
+}
+int (__cdecl *__MINGW_IMP_SYMBOL(stat32))(const char *, struct _stat32 *) = stat32;
+
+/* On 32-bit systems is stat() function ABI compatible with stat32() function */
+#ifndef _WIN64
+#undef stat
+struct stat;
+int __attribute__ ((alias ("stat32"))) __cdecl stat(const char *name, struct stat *stat);
+extern int __attribute__ ((alias (__MINGW64_STRINGIFY(__MINGW_IMP_SYMBOL(stat32))))) (__cdecl *__MINGW_IMP_SYMBOL(stat))(const char *name, struct stat *stat);
+#endif
diff --git a/mingw-w64-crt/stdio/msvcr110pre_stat64i32.c b/mingw-w64-crt/stdio/msvcr110pre_stat64i32.c
new file mode 100644
index 0000000..e3311f2
--- /dev/null
+++ b/mingw-w64-crt/stdio/msvcr110pre_stat64i32.c
@@ -0,0 +1,54 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <errno.h>
+
+char *__mingw_fix_stat_path(const char *_path);
+
+/* For pre-msvcr110 builds, we cannot use _stat64i32() function as it does
+ * not signal EOVERFLOW when file size does not fit into the st_size field,
+ * as it is required by POSIX stat() function.
+ * This file is used only for pre-msvcr110 builds.
+ */
+int __cdecl stat64i32(const char *_Filename, struct _stat64i32 *_Stat);
+int __cdecl stat64i32(const char *_Filename, struct _stat64i32 *_Stat)
+{
+  struct _stat64 st;
+  char *_path = __mingw_fix_stat_path(_Filename);
+  int ret = _stat64(_path, &st);
+  if (_path != _Filename)
+    free(_path);
+  if (ret != 0)
+    return ret;
+  if (st.st_size > UINT32_MAX) {
+    errno = EOVERFLOW;
+    return -1;
+  }
+  _Stat->st_dev=st.st_dev;
+  _Stat->st_ino=st.st_ino;
+  _Stat->st_mode=st.st_mode;
+  _Stat->st_nlink=st.st_nlink;
+  _Stat->st_uid=st.st_uid;
+  _Stat->st_gid=st.st_gid;
+  _Stat->st_rdev=st.st_rdev;
+  _Stat->st_size=(_off_t) st.st_size;
+  _Stat->st_atime=st.st_atime;
+  _Stat->st_mtime=st.st_mtime;
+  _Stat->st_ctime=st.st_ctime;
+  return 0;
+}
+int (__cdecl *__MINGW_IMP_SYMBOL(stat64i32))(const char *, struct _stat64i32 *) = stat64i32;
+
+/* On 64-bit systems is stat() function ABI compatible with stat64i32() function */
+#ifdef _WIN64
+#undef stat
+struct stat;
+int __attribute__ ((alias ("stat64i32"))) __cdecl stat(const char *name, struct stat *stat);
+extern int __attribute__ ((alias (__MINGW64_STRINGIFY(__MINGW_IMP_SYMBOL(stat64i32))))) (__cdecl *__MINGW_IMP_SYMBOL(stat))(const char *name, struct stat *stat);
+#endif
diff --git a/mingw-w64-crt/stdio/msvcr110pre_wstat32.c b/mingw-w64-crt/stdio/msvcr110pre_wstat32.c
new file mode 100644
index 0000000..b7fb948
--- /dev/null
+++ b/mingw-w64-crt/stdio/msvcr110pre_wstat32.c
@@ -0,0 +1,55 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <errno.h>
+
+wchar_t *__mingw_fix_wstat_path(const wchar_t *_path);
+
+/* For pre-msvcr110 builds, we cannot use _wstat32() function as it does
+ * not signal EOVERFLOW when file size does not fit into the st_size field,
+ * as it is required by POSIX stat() function.
+ * This file is used only for pre-msvcr110 builds.
+ */
+int __cdecl wstat32(const wchar_t *_Filename, struct _stat32 *_Stat);
+int __cdecl wstat32(const wchar_t *_Filename, struct _stat32 *_Stat)
+{
+  struct _stat32i64 st;
+  wchar_t *_path = __mingw_fix_wstat_path(_Filename);
+  int ret = _wstat32i64(_path, &st);
+  if (_path != _Filename)
+    free(_path);
+  if (ret != 0)
+    return ret;
+  if (st.st_size > UINT32_MAX) {
+    errno = EOVERFLOW;
+    return -1;
+  }
+  _Stat->st_dev=st.st_dev;
+  _Stat->st_ino=st.st_ino;
+  _Stat->st_mode=st.st_mode;
+  _Stat->st_nlink=st.st_nlink;
+  _Stat->st_uid=st.st_uid;
+  _Stat->st_gid=st.st_gid;
+  _Stat->st_rdev=st.st_rdev;
+  _Stat->st_size=(_off_t) st.st_size;
+  _Stat->st_atime=st.st_atime;
+  _Stat->st_mtime=st.st_mtime;
+  _Stat->st_ctime=st.st_ctime;
+  return 0;
+}
+int (__cdecl *__MINGW_IMP_SYMBOL(wstat32))(const wchar_t *, struct _stat32 *) = wstat32;
+
+/* On 32-bit systems is wstat() function ABI compatible with wstat32() function */
+#ifndef _WIN64
+#undef stat
+#undef wstat
+struct stat;
+int __attribute__ ((alias ("wstat32"))) __cdecl wstat(const wchar_t *name, struct stat *stat);
+extern int __attribute__ ((alias (__MINGW64_STRINGIFY(__MINGW_IMP_SYMBOL(wstat32))))) (__cdecl *__MINGW_IMP_SYMBOL(wstat))(const wchar_t *name, struct stat *stat);
+#endif
diff --git a/mingw-w64-crt/stdio/msvcr110pre_wstat64i32.c b/mingw-w64-crt/stdio/msvcr110pre_wstat64i32.c
new file mode 100644
index 0000000..d872e9e
--- /dev/null
+++ b/mingw-w64-crt/stdio/msvcr110pre_wstat64i32.c
@@ -0,0 +1,55 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <errno.h>
+
+wchar_t *__mingw_fix_wstat_path(const wchar_t *_path);
+
+/* For pre-msvcr110 builds, we cannot use _wstat64i32() function as it does
+ * not signal EOVERFLOW when file size does not fit into the st_size field,
+ * as it is required by POSIX stat() function.
+ * This file is used only for pre-msvcr110 builds.
+ */
+int __cdecl wstat64i32(const wchar_t *_Filename, struct _stat64i32 *_Stat);
+int __cdecl wstat64i32(const wchar_t *_Filename, struct _stat64i32 *_Stat)
+{
+  struct _stat64 st;
+  wchar_t *_path = __mingw_fix_wstat_path(_Filename);
+  int ret = _wstat64(_path, &st);
+  if (_path != _Filename)
+    free(_path);
+  if (ret != 0)
+    return ret;
+  if (st.st_size > UINT32_MAX) {
+    errno = EOVERFLOW;
+    return -1;
+  }
+  _Stat->st_dev=st.st_dev;
+  _Stat->st_ino=st.st_ino;
+  _Stat->st_mode=st.st_mode;
+  _Stat->st_nlink=st.st_nlink;
+  _Stat->st_uid=st.st_uid;
+  _Stat->st_gid=st.st_gid;
+  _Stat->st_rdev=st.st_rdev;
+  _Stat->st_size=(_off_t) st.st_size;
+  _Stat->st_atime=st.st_atime;
+  _Stat->st_mtime=st.st_mtime;
+  _Stat->st_ctime=st.st_ctime;
+  return 0;
+}
+int (__cdecl *__MINGW_IMP_SYMBOL(wstat64i32))(const wchar_t *, struct _stat64i32 *) = wstat64i32;
+
+/* On 64-bit systems is wstat() function ABI compatible with wstat64i32() function */
+#ifdef _WIN64
+#undef stat
+#undef wstat
+struct stat;
+int __attribute__ ((alias ("wstat64i32"))) __cdecl wstat(const wchar_t *name, struct stat *stat);
+extern int __attribute__ ((alias (__MINGW64_STRINGIFY(__MINGW_IMP_SYMBOL(wstat64i32))))) (__cdecl *__MINGW_IMP_SYMBOL(wstat))(const wchar_t *name, struct stat *stat);
+#endif
