On Monday 20 May 2024 13:07:29 Martin Storsjö wrote:
> On Thu, 9 May 2024, Pali Rohár wrote:
> 
> > crtdll.dll library has some DATA symbols with _dll suffix.
> > Fix generating aliases for these symbols.
> > ---
> > .../def-include/msvcrt-common.def.in          | 23 +++++++++++++++++++
> > mingw-w64-crt/lib32/crtdll.def.in             |  1 +
> > 2 files changed, 24 insertions(+)
> > 
> > diff --git a/mingw-w64-crt/def-include/msvcrt-common.def.in 
> > b/mingw-w64-crt/def-include/msvcrt-common.def.in
> > index 125982d5bf53..98ab6d6b62f8 100644
> > --- a/mingw-w64-crt/def-include/msvcrt-common.def.in
> > +++ b/mingw-w64-crt/def-include/msvcrt-common.def.in
> > @@ -2,6 +2,7 @@
> > 
> > #define ADD_UNDERSCORE(symbol) symbol == _ ## symbol
> > #define ADD_UNDERSCORE_DATA(symbol) symbol DATA == _ ## symbol
> > +#define ADD_UNDERSCORE_DATA_DLL(symbol) symbol DATA == _ ## symbol ## _dll
> > #define ADD_DOUBLE_UNDERSCORE(symbol) symbol == __ ## symbol
> > 
> > ; This is list of symbol aliases from the Visual C++ 1.0 oldnames.lib 
> > library
> > @@ -22,14 +23,22 @@ ADD_UNDERSCORE(creat)
> > ; ADD_UNDERSCORE(cscanf)
> > ADD_UNDERSCORE(cwait)
> > #ifndef UCRTBASE
> > +#ifdef CRTDLL
> > +ADD_UNDERSCORE_DATA_DLL(daylight)
> > +#else
> > ADD_UNDERSCORE_DATA(daylight)
> > #endif
> > +#endif
> 
> Instead of nesting these ifdefs, I think this would be clearer like this:
> 
> #ifdef CRTDLL
> ...
> #elif !defined(UCRTBASE)
> ...
> #endif
> 
> This seems to be the case for a couple of the other changes as well, but the
> last ifdef, around sys_errlist and sys_nerr, probably is best to keep as is
> here.
> 
> // Martin

That makes sense. Now I looked at it and I'm proposing following change
which also documents why those symbols are skipped for UCRT:

From 79abe4f3b5ab347327532d9aba0cfdaccb37dbb4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.ro...@gmail.com>
Date: Mon, 20 May 2024 20:44:47 +0200
Subject: [PATCH] crt: Fix DATA aliases for crtdll.dll

crtdll.dll library has some DATA symbols with _dll suffix.
Fix generating aliases for these symbols.

With this change also document why those symbols are not for UCRTBASE.
---
 .../def-include/msvcrt-common.def.in          | 45 ++++++++++++++++---
 mingw-w64-crt/lib32/crtdll.def.in             |  1 +
 2 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/mingw-w64-crt/def-include/msvcrt-common.def.in 
b/mingw-w64-crt/def-include/msvcrt-common.def.in
index 125982d5bf53..b44c0daae656 100644
--- a/mingw-w64-crt/def-include/msvcrt-common.def.in
+++ b/mingw-w64-crt/def-include/msvcrt-common.def.in
@@ -2,6 +2,7 @@
 
 #define ADD_UNDERSCORE(symbol) symbol == _ ## symbol
 #define ADD_UNDERSCORE_DATA(symbol) symbol DATA == _ ## symbol
+#define ADD_UNDERSCORE_DATA_DLL(symbol) symbol DATA == _ ## symbol ## _dll
 #define ADD_DOUBLE_UNDERSCORE(symbol) symbol == __ ## symbol
 
 ; This is list of symbol aliases from the Visual C++ 1.0 oldnames.lib library
@@ -21,13 +22,21 @@ ADD_UNDERSCORE(close)
 ADD_UNDERSCORE(creat)
 ; ADD_UNDERSCORE(cscanf)
 ADD_UNDERSCORE(cwait)
-#ifndef UCRTBASE
+#if defined(UCRTBASE)
+; daylight variable is provided by ucrtbase_compat.c
+#elif defined(CRTDLL)
+ADD_UNDERSCORE_DATA_DLL(daylight)
+#else
 ADD_UNDERSCORE_DATA(daylight)
 #endif
 ADD_UNDERSCORE(dup)
 ADD_UNDERSCORE(dup2)
 ADD_UNDERSCORE(ecvt)
-#ifndef UCRTBASE
+#if defined(UCRTBASE)
+; _environ variable is not available in ucrtbase.dll and there is no 
replacement for it
+#elif defined(CRTDLL)
+; ADD_UNDERSCORE_DATA_DLL(environ)
+#else
 ; ADD_UNDERSCORE_DATA(environ)
 #endif
 ADD_UNDERSCORE(eof)
@@ -49,7 +58,11 @@ ADD_UNDERSCORE(fileno)
 ADD_UNDERSCORE(fputchar)
 ; ADD_UNDERSCORE(fstat)
 ; ADD_UNDERSCORE(ftime)
-#ifndef UCRTBASE
+#if defined(UCRTBASE)
+; _HUGE variable is not available in ucrtbase.dll and there is no replacement 
for it
+#elif defined(CRTDLL)
+; ADD_UNDERSCORE_DATA_DLL(HUGE)
+#else
 ; ADD_UNDERSCORE_DATA(HUGE)
 #endif
 ADD_UNDERSCORE(gcvt)
@@ -113,15 +126,37 @@ ADD_UNDERSCORE(strrev)
 ADD_UNDERSCORE(strset)
 ADD_UNDERSCORE(strupr)
 ADD_UNDERSCORE(swab)
-#ifndef UCRTBASE
+#if defined(UCRTBASE)
+; _sys_errlist variable is not available in ucrtbase.dll and there is no 
replacement for it
+#else
+// sys_errlist variable is without _dll suffix in crtdll.dll
 ; ADD_UNDERSCORE_DATA(sys_errlist)
+#endif
+#if defined(UCRTBASE)
+; _sys_nerr variable is not available in ucrtbase.dll and there is no 
replacement for it
+#elif defined(CRTDLL)
+; ADD_UNDERSCORE_DATA_DLL(sys_nerr)
+#else
 ; ADD_UNDERSCORE_DATA(sys_nerr)
 #endif
 ADD_UNDERSCORE(tell)
 ADD_UNDERSCORE(tempnam)
-#ifndef UCRTBASE
+#if defined(UCRTBASE)
+; timezone variable is provided by ucrtbase_compat.c
+#elif defined(CRTDLL)
+ADD_UNDERSCORE_DATA_DLL(timezone)
+#else
 ADD_UNDERSCORE_DATA(timezone)
+#endif
+#if defined(UCRTBASE)
+; tzname variable is provided by ucrtbase_compat.c
+#else
+// tzname variable is without _dll suffix in crtdll.dll
 ADD_UNDERSCORE_DATA(tzname)
+#endif
+#if defined(UCRTBASE)
+; tzset function is provided by ucrtbase_compat.c
+#else
 ADD_UNDERSCORE(tzset)
 #endif
 ; ADD_UNDERSCORE(ultoa)
diff --git a/mingw-w64-crt/lib32/crtdll.def.in 
b/mingw-w64-crt/lib32/crtdll.def.in
index 17689b1f5b13..62e281ae147a 100644
--- a/mingw-w64-crt/lib32/crtdll.def.in
+++ b/mingw-w64-crt/lib32/crtdll.def.in
@@ -623,6 +623,7 @@ _ltow
 _ultow
 
 ; include symbol aliases for compatibility with msvcrt.dll
+#define CRTDLL
 #define PRE_C95_SWPRINTF
 #define FIXED_SIZE_SYMBOLS
 #define NO_WIDE_FIXED_SIZE
-- 
2.20.1


_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to