Fix behavior of inlined NDirect methods with MulticoreJit (#55185)
authorGleb Balykov <g.balykov@samsung.com>
Mon, 2 Aug 2021 14:13:40 +0000 (17:13 +0300)
committerGitHub <noreply@github.com>
Mon, 2 Aug 2021 14:13:40 +0000 (07:13 -0700)
commitaa4290f3f0aadf86882a439d124db3215851760b
treee29b8caf8aa24e9bef18ee2ec2c2f722af811415
parent749fa1381f122f7a0bb23374a9e220f834ccbbb3
Fix behavior of inlined NDirect methods with MulticoreJit (#55185)

* Disable loading of methods from r2r images in MulticoreJit thread, if they have NDirect methods inlined in them

NDirect methods can be inlined in other methods during aot compilation.
If such method is loaded in mcj thread, it results in NDirect method being loaded.
Additionally, there's no way to control inlining during aot from runtime side, because r2r ni.dll might already exist.
In order to fix this, runtime aborts loading if method has NDirect methods inlined in it and this all happens in mcj thread.

* Forbid inlining of pinvoke methods with SuppressGCTransitionAttribute in MulticoreJit thread
src/coreclr/debug/daccess/nidump.cpp
src/coreclr/debug/daccess/nidump.h
src/coreclr/vm/ceeload.cpp
src/coreclr/vm/ceeload.h
src/coreclr/vm/ceeload.inl
src/coreclr/vm/jitinterface.cpp
src/coreclr/vm/jitinterface.h
src/coreclr/vm/prestub.cpp
src/coreclr/vm/readytoruninfo.cpp