- In RtlInitializeContext only set the registers required, don't offset RSP
- In KiInitializeContextThread force control segments, which are not set by RtlInitializeContext
- Allocate the stack home space in KiInitializeContextThread
- Fix BaseInitializeContext to work with the changed stack adjustments
llvm-mingw's static runtime (libc++, libmingwex, libc++abi, libunwind)
references symbols the NT 5.2 export surface does not provide. Add a
static library, linked into the Clang runtime chain below
DLL_EXPORT_VERSION 0x601, providing:
- C99 vsnprintf/snprintf on top of _vsnprintf/_vscprintf.
- __imp_* aliases binding dllimport references to the static CRT
definitions instead of ucrtbase import thunks, which collide with
them (lld: "<sym> was replaced").
- K32EnumProcessModules, forwarded to psapi's EnumProcessModules.
- The Win7 SRW lock and Vista condition variable surface, bound to the
RTL implementation linked statically from rtl_vista. Modules get one
self-contained, consistent synchronization implementation (ReactOS'
lock layout is not Windows-compatible), no kernel32_vista.dll
dependency, and stay runnable on any Windows version. Static SRW
linking suggested by Timo Kreuzer.
Address review feedback on the llvm-compat shims:
sync_static.c now uses the proper SDK/NDK headers with WINAPI/NTAPI, imp_alias.h
moved to sdk/include/reactos and fixes the msvcrtex slot decorations too, and a
new InitOnceExecuteOnce shim lets us drop libkernel32_vista from the interface.
JIRA issue: CORE-20617
@learn-more found #9157 breaks the build as follows:
> error C2220: the following warning is treated as an error
> warning C4163: 'strncmp': not available as an intrinsic function
> warning C4163: 'strncpy': not available as an intrinsic function
_MSC_VER=1932 was not the version that the intrinsic functions
(strncmp, strncpy, wcsncmp, wcsncpy) added.
Using Compiler Explorer could detect the correct version:
_MSC_VER=1950.
Keep the configured event log `MaxSize` as a capacity limit and track the
physical file size separately.
New logs now start at the Windows 64 KiB file-size granularity, instead of
growing immediately to the full configured maximum. They are then grown in
64 KiB chunks as records are written, while preserving the logical used area
in the header offsets and EOF record.
Previously this was mixed with vcruntime, with some objects being shared. But this is messy. Instead use a separate library and link ucrtbase to this as well. This also matches more closely how native libraries are organized, where vcstartup is merged into the CRT import libraries, while vcruntime is merged into the static CRT libraries.
VS2022 version 17.2 and later (`_MSC_VER >= 1932`) added new intrinsic
functions (`strncmp`, `strncpy`, `wcsncmp`, and `wcsncpy`).
As we implement these ourselves, we have to avoid compiler error C2169.
This problem surfaced with a recent GitHub Actions update:
https://github.com/actions/runner-images/issues/14017
Use `#pragma function(...)` to disable new intrinsic functions.
It is the same function as RtlInterlockedPushListSList, but with stdcall calling convention instead of fastcall.
On x86 this is a wrapper, on all other architectures it is simply a forwarder.
- Use the NT6 structure of _RTL_USER_PROCESS_PARAMETERS
- Fix string alignment to match Vista+
- Use ImageName as fallback for the CommandLine
- Use NULL-string as fallback fo RuntimeData
- Copy the environment instead of just copying the pointer
- Fixes a number of ntdll_winetest:env tests
Stop `PS_JOB_TOKEN_FILTER`'s pack(1) scope from leaking into `EJOB`, which misaligns kernel fields on ARM64.
Use the Win64 heap entry layout on ARM64 and assert the heap metadata offsets verified against NT ARM64 symbols.
Keep heap alignment masks pointer-sized and size `STACK_TRACE_DATABASE` `ERESOURCE` padding for all Win64 targets.
CORE-18200
This is needed to prevent compile errors, when _INC_WINDOWS is defined.
So far WIN32_LEAN_AND_MEAN is wrongly defined by some idl generated headers.
In VS with native headers similar issues exist.
- Don't compile the non-conformng swprintf (it is identical to _swprinf)
- Rename swprintf to _swprintf
- Forward non-conforming exports to the underscored versions in CRT dlls
Previously the debug macros printed file/line, class and message separately, which resulted in possible intermingling with other debug messages, e.g. from rosautotest. This caused random parse errors for testman.
This is fixed by using a temp buffer for the prefix in rosfmt_default_dbg_vlog and then calling vDbgPrintExWithPrefix. Also make the __WINE_DPRINTF macro identical between GCC and MSVC.
See ROSTESTS-178
CORE-20539
Move an "assert" added by Pierre Schweitzer in [b0b7df](https://github.com/reactos/reactos/commit/b0bf7df).
Relocate his added "assert" inside an "if (FsCheckFlags & FSCHECK_IMMEDIATE_WRITE)".
This avoids some asserts when running in read-only mode.
Co-authored-by: Hermès BÉLUSCA - MAÏTO <[email protected]>
CORE-20539
Before calling "fs_write" test if we are in a read-write mode by checking "rw".
I intend to re-evaluate this to try and reduce the difference to dosfschk in the future.
Co-authored-by: Hermès BÉLUSCA - MAÏTO <[email protected]>
The point of kernel32_vista was to provide a dll that can be used for winesyncs to still have NT6 APIs.
We're now switching to an architecture where we'll have kernelbase OR a kernel32_win7 depending on NT target compile
but this means that for an ANSI exe such as this, we need an alternative solution.
Thankfully it's pretty much only for this but just in case i made it a library.
conutils\pager.c(658):
warning C4267: '=': conversion from 'size_t' to 'DWORD', possible loss of data
conutils\outstream.c(179),(263):
warning C4267: '=': conversion from 'size_t' to 'DWORD', possible loss of data
conutils\outstream.c(433):
warning C4267: '=': conversion from 'size_t' to 'INT', possible loss of data