I see a hit for `_errno` from _setmbcp[1]: ``` (gdb) b _errno Breakpoint 1 at 0x140002620 (gdb) r Starting program: I:\crt-tests\init.exe [New Thread 17720.0x3b9c] [New Thread 17720.0x48c8]
Thread 1 hit Breakpoint 1.1, 0x00007ffbbc7d7454 in _errno () from C:\WINDOWS\SYSTEM32\msvcr110.dll (gdb) bt #0 0x00007ffbbc7d7454 in _errno () from C:\WINDOWS\SYSTEM32\msvcr110.dll #1 0x00007ffbbc7f3825 in _setmbcp () from C:\WINDOWS\SYSTEM32\msvcr110.dll #2 0x00007ffbbc7f34f2 in _ismbcl2_l () from C:\WINDOWS\SYSTEM32\msvcr110.dll #3 0x00007ffbbc7d31a2 in exit () from C:\WINDOWS\SYSTEM32\msvcr110.dll #4 0x00007ffbea39f96e in ntdll!RtlEncodeRemotePointer () from C:\WINDOWS\SYSTEM32\ntdll.dll #5 0x00007ffbea24bcae in ntdll!RtlRaiseException () from C:\WINDOWS\SYSTEM32\ntdll.dll #6 0x00007ffbea2497ac in ntdll!RtlDeleteElementGenericTableAvlEx () from C:\WINDOWS\SYSTEM32\ntdll.dll #7 0x00007ffbea2d76ea in ntdll!LdrGetProcedureAddressForCaller () from C:\WINDOWS\SYSTEM32\ntdll.dll #8 0x00007ffbea2d7716 in ntdll!LdrGetProcedureAddressForCaller () from C:\WINDOWS\SYSTEM32\ntdll.dll #9 0x00007ffbea2fd8c6 in ntdll!EtwEventWriteNoRegistration () from C:\WINDOWS\SYSTEM32\ntdll.dll #10 0x00007ffbea2fba50 in ntdll!EtwEventWriteNoRegistration () from C:\WINDOWS\SYSTEM32\ntdll.dll #11 0x00007ffbea2fb83a in ntdll!EtwEventWriteNoRegistration () from C:\WINDOWS\SYSTEM32\ntdll.dll #12 0x00007ffbea32910e in ntdll!LdrInitializeThunk () from C:\WINDOWS\SYSTEM32\ntdll.dll #13 0x0000000000000000 in ?? () ``` I think I see what's going on. I have UTF-8 enabled globally on my system and it seems that CRT attempts to set multibyte code page (with _setmbcp) to active ANSI code page (GetACP() == CP_UTF8, in my case), and since msvcr110.dll does not support UTF-8, its _setmbcp fails with EINVAL. (What's interesting is that it does not happen with msvcrt.dll.) If I set a breakpoint for GetACP it will be hit in the same place. - Kirill Makurin [1] https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/setmbcp ________________________________ From: LIU Hao Sent: Thursday, November 13, 2025 8:56 PM To: [email protected]; Kirill Makurin Cc: Pali Rohár Subject: Re: [Mingw-w64-public] errno is set to EINVAL when entering main 在 2025-11-13 14:52, Kirill Makurin 写道: > I wanted to quickly test whether library I'm working on builds and works with > msvcr*.dll, and when I was running the tests, I noticed that all tests for > C89/C95/uchar.h conversion functions failed. After small investigation I > realized that errno was to EINVAL upon entry to `main`. > > Can anyone look into this? This doesn't reproduce the issue for me. You may try starting the program using GDB, with breakpoints on `_errno` and `_set_errno`. -- Best regards, LIU Hao _______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
