mirror of
https://github.com/VSadov/Satori.git
synced 2025-06-10 18:11:04 +09:00
![]() When a pinvoke/reverse pinvoke needs marshalling the VM creates an IL stub to perform this marshalling. These IL stubs have a non-standard parameter called the "secret stub parameter". The VM uses this parameter to map the IL stub back to the user defined function that caused the IL stub to be required (multiple user functions can share the same IL stubs, so the mapping cannot be done by other means). To facilitate the access of this value the JIT must make the parameter's value available to the VM somehow. Previously this was done in two separate ways for 32-bit and 64-bit target: - For 32-bit targets the parameter was marked as do-not-enregister and always spilled to the stack frame at a location that was known by the VM. - For 64-bit targets the parameter was saved in the `InlinedCallFrame` as part of a VM helper call. We still marked it as do-not-enregister, probably because parameter homing did not handle it. For 64-bit targets this introduces a bit of inefficiency: the secret stub parameter is only needed for the IL stubs case, but `InlinedCallFrame` is used for all inlined pinvokes. So we ended up with a larger frame than necessary and with an additional store to the frame, even outside IL stubs. This change removes that inefficiency by unifying how 32-bit and 64-bit targets work: - Switch all platforms to only allocate space in `InlinedCallFrame` for the secret stub parameter when necessary - Move responsibility of storing the secret stub parameter out of `CORINFO_HELP_INIT_PINVOKE_FRAME` and to the JIT generated code - Remove special casing of frame layout around the secret stub parameter and frame structures within the JIT - Enable enregistration for the secret stub parameter Fix #100662 |
||
---|---|---|
.. | ||
ijw | ||
version | ||
build-commons.sh | ||
configurecompiler.cmake | ||
configureoptimization.cmake | ||
configurepaths.cmake | ||
configureplatform.cmake | ||
configuretools.cmake | ||
createdump-entitlements.plist | ||
entitlements.plist | ||
functions.cmake | ||
gen-buildsys.cmd | ||
gen-buildsys.sh | ||
generateexportedsymbols.sh | ||
generateversionscript.sh | ||
genmoduleindex.cmd | ||
genmoduleindex.sh | ||
init-vs-env.cmd | ||
naming.props | ||
output-toolchain-info.cmake | ||
sanitizer-ignorelist.txt | ||
set-cmake-path.ps1 | ||
tryrun.cmake | ||
tryrun_ios_tvos.cmake |