[llvm] Fix LLVM JIT when used with multiple AppDomains. #32219
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
!! This PR is a copy of mono/mono#18824, please do not edit or review it in this repo !!
!! Merge the PR only after the original PR is merged !!
We currently reuse LLVM's command line parsing system to configure and
enable passes. When using the default code generator pass configuration,
the
ImplicitNullChecks
andX86CallFrameOptimization
passes can onlybe enabled or disabled via the command line argument parser: the
cl::opt
s controlling these (and many other) passes are private totheir translation units, and
TargetPassConfig
/X86PassConfig
readfrom these
cl::opt
s with no other means to override these values.Unfortunately, some LLVM command line options have restrictions on the
number of times they may be set, and running the LLVM command line
argument parser more than once can fail, because the 'number of
occurrences' counter is stored in each global
cl::opt
. This causesseveral tests to fail--one such test is unhandled-exception-7.cs.
This change:
removes the lazy LLVM JIT initialization logic and instead
runs this initialization once during
mini_init
,moves some stray JIT-only code from mini-llvm.c to llvm-jit.cpp,
wraps the declarations in domain-internals.h with a
G_BEGIN_DECLS
/G_END_DECLS
pair, so that they avoid namemangling when included in C++ source, and
removes
exception_cb
andemitted_cb
: neither were actually usedby live code.