Re: GDB 10.1 release -- 2020-09-18 Update

Eli Zaretskii
2020-09-21T16:26:42Z

> Date: Sat, 19 Sep 2020 12:48:50 -0700
> From: Joel Brobecker <brobecker@adacore.com>
> Cc: gdb-patches@sourceware.org
>
> Let's test it first, both in your context, and in a situation
> where the Windows version is more recent, and also with a mingw64
> version of MinGW. Perhaps the way we could do it is if you sent
> the actual GDB patch to install those two gnulib patches into
> our copy after testing on your end that this fixes things, and
> then I could test your patch with newer Windows + MinGW64?

I attach below the patch for our copy of Gnulib on the release
branch. It works here. (I will again ask you to kindly regenerate
the configure script(s) that depend on gnulib/import/m4/*.m4 files.)

> There's also the question of updating gnulib on master. I haven't
> heard of anyone who's volunteered for that one... I assume one
> will happen at some point out of someone needing it for other
> reasons, but there is no guarantee this will happen. Do you want
> to take care of doing an update as well?

I've never done this, and would prefer that someone else does that.
Sorry for being such a coward.

Here's the patch for the release branch:

diff --git a/gnulib/ChangeLog b/gnulib/ChangeLog
index bf61742..dfd6d79 100644
--- a/gnulib/ChangeLog
+++ b/gnulib/ChangeLog
@@ -1,3 +1,16 @@
+2020-09-16 Bruno Haible <bruno@clisp.org>
+
+ stat, fstat: Fix when compiling for versions older than Windows Vista.
+ Reported by Eli Zaretskii <eliz@gnu.org> in
+ <https://lists.gnu.org/archive/html/bug-gnulib/2020-09/msg00027.html>.
+ * import/stat-w32.c: Include <sdkddkver.h>. Test the value of
+ _WIN32_WINNT that was originally set before we redefined it.
+ (VOLUME_NAME_NONE): Define if the Windows headers don't define
+ it.
+ * import/m4/stat.m4 (gl_PREREQ_STAT_W32): New macro.
+ (gl_PREREQ_STAT): Require it.
+ * import/m4/fstat.m4 (gl_PREREQ_FSTAT): Likewise.
+
2020-09-08 Tom Tromey <tromey@adacore.com>

PR win32/25302:
diff --git a/gnulib/import/m4/fstat.m4 b/gnulib/import/m4/fstat.m4
index 53c0896..bd8cb79 100644
--- a/gnulib/import/m4/fstat.m4
+++ b/gnulib/import/m4/fstat.m4
@@ -1,4 +1,4 @@
-# fstat.m4 serial 6
+# fstat.m4 serial 7
dnl Copyright (C) 2011-2020 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -35,5 +35,6 @@ AC_DEFUN([gl_FUNC_FSTAT],
# Prerequisites of lib/fstat.c and lib/stat-w32.c.
AC_DEFUN([gl_PREREQ_FSTAT], [
AC_REQUIRE([gl_HEADER_SYS_STAT_H])
+ AC_REQUIRE([gl_PREREQ_STAT_W32])
:
])
diff --git a/gnulib/import/m4/stat.m4 b/gnulib/import/m4/stat.m4
index 8ef355f..5e827b5 100644
--- a/gnulib/import/m4/stat.m4
+++ b/gnulib/import/m4/stat.m4
@@ -1,4 +1,4 @@
-# serial 16
+# serial 17

# Copyright (C) 2009-2020 Free Software Foundation, Inc.
#
@@ -70,5 +70,16 @@ AC_DEFUN([gl_FUNC_STAT],
# Prerequisites of lib/stat.c and lib/stat-w32.c.
AC_DEFUN([gl_PREREQ_STAT], [
AC_REQUIRE([gl_HEADER_SYS_STAT_H])
+ AC_REQUIRE([gl_PREREQ_STAT_W32])
:
])
+
+# Prerequisites of lib/stat-w32.c.
+AC_DEFUN([gl_PREREQ_STAT_W32], [
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ case "$host_os" in
+ mingw*)
+ AC_CHECK_HEADERS([sdkddkver.h])
+ ;;
+ esac
+])
diff --git a/gnulib/import/stat-w32.c b/gnulib/import/stat-w32.c
index 19bdfaa..108ce19 100644
--- a/gnulib/import/stat-w32.c
+++ b/gnulib/import/stat-w32.c
@@ -20,10 +20,22 @@

#if defined _WIN32 && ! defined __CYGWIN__

-/* Ensure that <windows.h> defines FILE_ID_INFO. */
-#if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8)
-# undef _WIN32_WINNT
-# define _WIN32_WINNT _WIN32_WINNT_WIN8
+/* Attempt to make <windows.h> define FILE_ID_INFO.
+ But ensure that the redefinition of _WIN32_WINNT does not make us assume
+ Windows Vista or newer when building for an older version of Windows. */
+#if HAVE_SDKDDKVER_H
+# include <sdkddkver.h>
+# if _WIN32_WINNT >= _WIN32_WINNT_VISTA
+# define WIN32_ASSUME_VISTA 1
+# else
+# define WIN32_ASSUME_VISTA 0
+# endif
+# if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8)
+# undef _WIN32_WINNT
+# define _WIN32_WINNT _WIN32_WINNT_WIN8
+# endif
+#else
+# define WIN32_ASSUME_VISTA (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
#endif

#include <sys/types.h>
@@ -46,7 +58,12 @@
#undef GetFinalPathNameByHandle
#define GetFinalPathNameByHandle GetFinalPathNameByHandleA

-#if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA)
+/* Older mingw headers do not define VOLUME_NAME_NONE. */
+#ifndef VOLUME_NAME_NONE
+# define VOLUME_NAME_NONE 4
+#endif
+
+#if !WIN32_ASSUME_VISTA

/* Avoid warnings from gcc -Wcast-function-type. */
# define GetProcAddress \
@@ -149,7 +166,7 @@ _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf)
DWORD type = GetFileType (h);
if (type == FILE_TYPE_DISK)
{
-#if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA)
+#if !WIN32_ASSUME_VISTA
if (!initialized)
initialize ();
#endif