> (Also see `8319429: Resetting MXCSR flags degrades ecore`) > > This PR fixes two issues: > - the original issue is a crash caused by `__ warn` corrupting the stack on > Windows only > - This issue also uncovered that -Xcheck:jni test cases were getting 65k > lines of warning on HelloWorld (on both Linux _and_ windows): > > OpenJDK 64-Bit Server VM warning: MXCSR changed by native JNI code, use > -XX:+RestoreMXCSROnJNICall > > > First, the crash. Caused when FXRSTOR is attempting to write reserved bits > into MXCSR. If those bits happen to be set, crash. (Hence the crash isn't > deterministic. But frequent enough if `__ warn` is used). It is caused by the > binding not reserving stack space for register parameters () >  > Prolog of the warn function then proceeds to store the for arg registers onto > the stack, overriding the fxstore save area. (See > https://learn.microsoft.com/en-us/cpp/build/x64-calling-convention?view=msvc-170#calling-convention-defaults) > > Fix uses `frame::arg_reg_save_area_bytes` to bump the stack pointer. > > --- > > I also kept the fix to `verify_mxcsr` since without it, `-Xcheck:jni` is > practically unusable when `-XX:+EnableX86ECoreOpts` are set (65k+ lines of > warnings)
Volodymyr Paprotski has updated the pull request incrementally with one additional commit since the last revision: Update src/hotspot/cpu/x86/macroAssembler_x86.cpp Co-authored-by: Julian Waters <32636402+theshermantan...@users.noreply.github.com> ------------- Changes: - all: https://git.openjdk.org/jdk/pull/22673/files - new: https://git.openjdk.org/jdk/pull/22673/files/b23764ab..cbd3812d Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=22673&range=06 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=22673&range=05-06 Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod Patch: https://git.openjdk.org/jdk/pull/22673.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/22673/head:pull/22673 PR: https://git.openjdk.org/jdk/pull/22673