On Saturday 15 March 2025 21:17:07 Jacek Caban wrote:
> On 15.03.2025 17:36, Martin Storsjö wrote:
> > On Mon, 10 Mar 2025, Pali Rohár wrote:
> > 
> > > ---
> > > .../api-ms-win-crt-private-l1-1-0.def.in      | 64 +++++++++----------
> > > 1 file changed, 32 insertions(+), 32 deletions(-)
> > > 
> > > diff --git
> > > a/mingw-w64-crt/lib-common/api-ms-win-crt-private-l1-1-0.def.in
> > > b/mingw-w64-crt/lib-common/api-ms-win-crt-private-l1-1-0.def.in
> > > index 3bcce9953157..90d530d6a686 100644
> > > --- a/mingw-w64-crt/lib-common/api-ms-win-crt-private-l1-1-0.def.in
> > > +++ b/mingw-w64-crt/lib-common/api-ms-win-crt-private-l1-1-0.def.in
> > > @@ -700,7 +700,7 @@ _o__strtof_l
> > > _o__strtoi64
> > > _o__strtoi64_l
> > > _o__strtol_l
> > > -_o__strtold_l
> > > +F_ARM_ANY(_o__strtold_l) ; Can't use long double functions from the
> > > CRT on x86
> > > _o__strtoll_l
> > > _o__strtoui64
> > > _o__strtoui64_l
> > 
> > I'm a little undecided about this one.
> > 
> > So far, I don't think we've done much about these extra prefixed
> > functions in the def files, other than keeping track of which symbols
> > exist in which DLL. In which way do the _o_ prefixed symbols differ from
> > the unprefixed ones?

_o_ prefixed symbols use UCRT global state, mostly used by DLL libs.
non-prefixes symbols use application specific global state which does
not affect global state of DLL libraries.

It is documented on MS UCRT webpage:
https://learn.microsoft.com/en-us/cpp/c-runtime-library/global-state

If I understand correctly then system-wide DLL library should use _o_
prefixed symbols. To make it easier for using, msvc/ucrt provides import
library named "ucrt.osmode.lib" which for each import function FUNC call
exported symbol _o_FUNC. So source code DLL library can use normal C
named functions without _o_ prefix.

mingw-w64 does not provide libucrt.osmode.a yet, but it could be
extended and implemented in future (if there would be need for it).

gcc has already -mcrtdll= argument and it can already process
-mcrtdll=ucrt.osmode (as it process any -mcrtdll=ucrt*"), so it is just
waiting until mingw-w64 gain such support.

> > As for avoiding long doubles, there would be more of a case for that, if
> > this was a function that we'd have a declaration for and try to
> > reference somewhere. But nothing references these functions anywhere and
> > nothing declares them; we don't have any implementation of our own that
> > we'd like to link instead of these ones.

AFAIK, no mingw-w64 code calls long double _o_ prefixed symbol. And
applications should not call long double those symbols as ABI of those
symbols expects regular double (not long double).

If there is a needed for supporting 80-bit long double functions with
_o_ prefix then it would be needed to emulate them in mingw-w64 as UCRT
has support only for 64-bit double functions.

> > So - so far, I have at least personally just decided to ignore this
> > whole range of symbols.
> 
> 
> FWIW, ignoring them seems reasonable to me.
> 
> 
> Jacek
> 

We already ignore all long double named symbols from all CRT .dll
libraries, so we should also these _o_ long double named symbols.
They are ABI incompatible with gcc/mingw-w64.


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

Reply via email to