Commit graph

825 commits

Author SHA1 Message Date
Doug Lyons
45ed1a9b6d
[UCRT] Fix MSVC compiling on VS 2017 after Timo's UCRT commits (#7718)
CORE-19996
Verified using https://godbolt.org.
2025-02-15 20:03:52 -06:00
Timo Kreuzer
166d83b206 [CRT] Fix cvt to not overflow the buffer on NAN/INF
Fixes crash in msvcrt_winetest printf
2025-02-12 16:54:45 +02:00
Timo Kreuzer
92d479a54b [VCRUNTIME] Add initialization / cleanup of wine code 2025-02-06 09:17:37 +02:00
Timo Kreuzer
32c349d30e [VCRUNTIME] Add TLS callback support 2025-02-06 09:17:37 +02:00
Timo Kreuzer
7f050e0a6d [VCRUNTIME] Improve includes in internal_shared.h 2025-02-06 09:17:37 +02:00
Timo Kreuzer
a978879ddb [VCSTARTUP] Implement (w)mainCRTStartup
__acrt_initialize is here as a stub to later support linking ucrt statically. When it is statically linked the real function should be called, but when the executable links to ucrtdll, the initialization happens when the DLL is loaded, so we call a stub here.
2025-02-06 09:17:37 +02:00
Timo Kreuzer
d243b6cdf3 [VCRUNTIME] Implement __std_terminate() 2025-02-06 09:17:37 +02:00
Timo Kreuzer
9186b861a6 [VCRUNTIME][VCSTARTUP] Add separate vcruntime and vcstartup lib
vcruntime contains the code that is linked into ucrtbase (in VS it is also provided as vcruntime140.dll)
vcstartup contains the code that is statically linked into executables that link to ucrtbase.dll. In Visual Studio this is part of msvcrt.lib (the import library for msvcrt), similar to our current msvcrtex, and it gets linked when you link to ucrtbase as well. The name is based on the folder name in the library.
Both libraries share some code, but each file is only compiled once.
2025-02-06 09:17:37 +02:00
Max Korostil
2b2bdabe72
[RTL][NTDLL_APITEST] Fix buffer overflow in RtlDosSearchPath_Ustr (#7698)
In addition:
- `IS_PATH_SEPARATOR(*--End)` -> `--End; IS_PATH_SEPARATOR(*End)` fix,
- Use SIZE_T type for `WorstCaseLength` and `NamePlusExtLength`.
2025-02-05 21:17:11 +01:00
Timo Kreuzer
aa46e0f0a7 [RTL/x64] Fix a bug in RtlpUnwindInternal
Check if the stack pointer is out of bounds, before trying to unwind a frame. This will not fix any crashes, but it prevents simple crashes from going into a recursive exception.
2025-02-04 09:00:35 +02:00
Timo Kreuzer
ae0fa8ba49 [UCRTSUPPORT] Add wine c++ exception code 2025-01-28 22:50:04 +02:00
Timo Kreuzer
e2d69ad98c [CRT] Split MSVC C++ aliases from cpp.s to cpp_alias.s 2025-01-28 22:50:04 +02:00
Katayama Hirofumi MZ
fe11f7a2e5
[REACTOS] Refresh old URLs (#7632)
URLs are getting old. We have to
update URLs for documentation
purpose.
JIRA issue: CORE-19963
- Refresh old URLs.
- Add " (DEAD_LINK)" labels
  to dead links.
- Use MS Learn links rather
  than MSDN ones.
- Some dead links revived by
  Web Archive.
- Don't change Wine Tests
  and Wine Sync.
- Don't change 3rd party libraries.
- Don't append "redirected" labels.
2025-01-28 13:36:45 +09:00
Justin Miller
0bf42067d2 [KERNEL32][ROSTESTS][SDK] Enable threadpooling
[NTDLL] Init KeyedEvents even on NT5.2 dll_export
[MEDIA] Update winesync.txt accordingly
[SDK][DLL] Initialize crtical sections at runtime
2025-01-26 23:30:59 -08:00
Denis Malikov
405ed2b4ce [KERNEL32_VISTA][SDK] Import Threadpool.c from wine-9.7 2025-01-26 23:30:59 -08:00
Timo Kreuzer
efdda7f7d9 [APISETS] Use ucrtbase as the lord intended instead of msvcrt 2025-01-26 18:08:55 +02:00
Timo Kreuzer
41ffe7f3c6 [UCRTBASE] Add ucrtbase.dll to build 2025-01-26 18:08:55 +02:00
Timo Kreuzer
9f15d9ee57 [UCRT:MATH] Implement _dtest, _fdtest 2025-01-26 18:08:55 +02:00
Timo Kreuzer
59c55e003e [UCRT:MATH] Implement _dclass, _fdclass 2025-01-26 18:08:55 +02:00
Timo Kreuzer
efe84ec41a [UCRT] Add "aliases" for some hacked clang builtins 2025-01-26 18:08:55 +02:00
Timo Kreuzer
d74ab36324 [UCRTSUPPORT] Add ucrtsupport library
This library is compiled from our old CRT sources to supplement missing UCRT code.
2025-01-26 18:08:55 +02:00
Timo Kreuzer
b09b5584e0 [UCRT:MATH] Implement math error support functions 2025-01-26 18:08:55 +02:00
Timo Kreuzer
8aab548ecd [UCRT:VCRUNTIME] Implement __isa_available_init() 2025-01-26 18:08:55 +02:00
Timo Kreuzer
9c887efa0e [UCRT:VCRUNTIME] Add initializer sections
Use #pragma section only for MSVC (and Clang-cl), because Clang doesn't like allocating non-const variables in a read-only section, while GCC doesn't understand these pragmas and ignores them.
2025-01-26 18:08:55 +02:00
Timo Kreuzer
4198ceb83a [UCRT:VCRUNTIME] Implement vcruntime init stubs 2025-01-26 18:08:55 +02:00
Timo Kreuzer
4d80956566 [UCRT:VCRUNTIME] Implement __report_rangecheckfailure() 2025-01-26 18:08:55 +02:00
Timo Kreuzer
b0f3e623b7 [UCRT:VCRUNTIME] Implement __report_gsfailure() 2025-01-26 18:08:55 +02:00
Timo Kreuzer
5dcd1d1714 [UCRT:VCRUNTIME] Implement __security_init_cookie and __security_check_cookie 2025-01-26 18:08:55 +02:00
Timo Kreuzer
055875fbd8 [UCRT:FLOAT] Add _fltused 2025-01-26 18:08:55 +02:00
Timo Kreuzer
4462342076 [UCRT:STARTUP] Implement __scrt_uninitialize_crt stub 2025-01-26 18:08:55 +02:00
Timo Kreuzer
d21fd37650 [UCRT:LOCALE] Implement __acrt_WideCharToMultiByte 2025-01-26 18:08:55 +02:00
Timo Kreuzer
bd3c7654ec [UCRT:LOCALE] Implement __acrt_MultiByteToWideChar 2025-01-26 18:08:55 +02:00
Timo Kreuzer
4ea1841f31 [UCRT:LOCALE] Implement __acrt_GetStringTypeW 2025-01-26 18:08:55 +02:00
Timo Kreuzer
f07ea94798 [UCRT] Fix build of memcpy_s.cpp
extern inline creates a global symbol on MSVC, but not on GCC. Use extern instead.
2025-01-22 18:56:08 +02:00
Timo Kreuzer
fea0f9243d [UCRT] Remove __inline from conversion functions
Otherwise no actual symbols will be created.
2025-01-22 18:56:08 +02:00
Timo Kreuzer
61175644d0 [UCRT] Add architecturally optimized code to build 2025-01-22 18:56:08 +02:00
Timo Kreuzer
94eb475177 [UCRT][ASM] Make asm code GCC compatible 2025-01-22 18:56:08 +02:00
Timo Kreuzer
4fec953e6e [UCRT][ASM] Rename all .asm files to .s 2025-01-22 18:56:08 +02:00
Timo Kreuzer
72aed01dbd [ASM] Fix up some x86 assembly code 2025-01-22 18:56:08 +02:00
Timo Kreuzer
e2ffc35894 [UCRT] Fix/improve __crt_state_management 2025-01-22 18:56:08 +02:00
Timo Kreuzer
c2b1271dbe [UCRT] Improve __crt_seh_guarded_call
This is a workaround for an MSVC compiler bug, which would result in degraded performance. See https://developercommunity.visualstudio.com/t/_local_unwind-generated-when-returning-f/10673261?
2025-01-22 18:56:08 +02:00
Timo Kreuzer
a58b713a5e [UCRT] Properly implement __crt_fast_encode/decode_pointer 2025-01-22 18:56:08 +02:00
Timo Kreuzer
c1145f0c89 [UCRT] Properly implement parameter checking macros
Partly copied from corecrt_internal_strtox.h, partly imported from dotnet runtime (https://github.com/dotnet/runtime/blob/release/8.0/src/coreclr/pal/src/safecrt/internal.h)
2025-01-22 18:56:08 +02:00
Katayama Hirofumi MZ
bb7cf5a5b7
[FREETYPE][FTFD][NTGDI] Split FT_Bitmap_Convert hack (#7628)
Our FT_Bitmap_Convert function had a hack to make the
bitmap image compatible to ReactOS. I think the hack on
FT_Bitmap_Convert should be separated from our font
engine.
JIRA issue: CORE-16047
- Add FT_Bitmap_Convert_ReactOS_Hack function, that is
  based on FT_Bitmap_Convert, and split the hack of
  FT_Bitmap_Convert.
- Use FT_Bitmap_Convert_ReactOS_Hack in
  IntGetBitmapGlyphWithCache function instead of
  FT_Bitmap_Convert.
- Modify ftfd.spec to add 
  FT_Bitmap_Convert_ReactOS_Hack.
2025-01-22 10:57:40 +09:00
Timo Kreuzer
fe7a58d92e [RTL] Update CountOfOwnedCriticalSections in the TEB
Useful for debugging.
Motivation: With SMP on x64 I found a number of instances where critical sections would be left abandoned, causing lockups. From what I can tell it was exceptions inside rpcrt4, which leave the process in a blocked state. Might or might not be related to x64 / SMP.

For real value, you still need to put checks at certain places manually, but this is not super straight forward, because there can be false positives, e.g. when a process is terminated due to an exception, where the abandoned lock is acceptable, and we have this during testing. It's difficult to 100% distinguish this from silent and very bad lock leaks.

Problematic code:

    __try
    {
        SomeFunction(); // throws an exception with a CS held, e.g. heap code
    }
    __except(1)
    {
        DPRINT1("Oops. let's just pretend it's all ok!\n");
    }
2025-01-18 21:15:17 +02:00
Timo Kreuzer
7bb12665d6 [UCRT] Add CMake files 2025-01-16 14:18:53 +02:00
Timo Kreuzer
ef440b9aef [UCRT] Add a hack for a clang bug
See CORE-19902
2025-01-16 14:18:53 +02:00
Timo Kreuzer
2eb3149565 [UCRT] Make includes unix compatible 2025-01-16 14:18:53 +02:00
Timo Kreuzer
90dad446b7 [UCRT] Fix GCC build of __crt_char_traits
This is a workaround for GCC. It will disable debugging for tdupenv_s_crt.
How it works on MSVC? Magic.
2025-01-16 14:18:53 +02:00
Timo Kreuzer
693f9f51a0 [UCRT] Hack some template code, so that retarded compilers can handle it 2025-01-16 14:18:53 +02:00