diff --git a/eng/DotNetBuild.props b/eng/DotNetBuild.props
index a6350c7fea93fa..c5da9ec68e4517 100644
--- a/eng/DotNetBuild.props
+++ b/eng/DotNetBuild.props
@@ -47,7 +47,7 @@
Properties that control flags from the VMR build, and the expected output for the VMR build should be added to this file. -->
$(InnerBuildArgs) $(FlagParameterPrefix)arch $(TargetArch)
$(InnerBuildArgs) $(FlagParameterPrefix)os $(TargetOS)
- $(InnerBuildArgs) $(FlagParameterPrefix)cross
+ $(InnerBuildArgs) $(FlagParameterPrefix)cross
$(InnerBuildArgs) $(FlagParameterPrefix)configuration $(Configuration)
$(InnerBuildArgs) $(FlagParameterPrefix)allconfigurations
$(InnerBuildArgs) $(FlagParameterPrefix)verbosity $(LogVerbosity)
diff --git a/src/coreclr/inc/jiteeversionguid.h b/src/coreclr/inc/jiteeversionguid.h
index 9022ceff18bc54..41e58ca24537b8 100644
--- a/src/coreclr/inc/jiteeversionguid.h
+++ b/src/coreclr/inc/jiteeversionguid.h
@@ -43,11 +43,11 @@ typedef const GUID *LPCGUID;
#define GUID_DEFINED
#endif // !GUID_DEFINED
-constexpr GUID JITEEVersionIdentifier = { /* 35afdf61-5417-4bd7-9302-48efa2507603 */
- 0x35afdf61,
- 0x5417,
- 0x4bd7,
- {0x93, 0x02, 0x48, 0xef, 0xa2, 0x50, 0x76, 0x03}
+constexpr GUID JITEEVersionIdentifier = { /* 6fd660c7-96be-4832-a84c-4200141f7d08 */
+ 0x6fd660c7,
+ 0x96be,
+ 0x4832,
+ {0xa8, 0x4c, 0x42, 0x00, 0x14, 0x1f, 0x7d, 0x08}
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/coreclr/jit/fgbasic.cpp b/src/coreclr/jit/fgbasic.cpp
index 200c72a4d4e1c8..00b0c3faf91c4a 100644
--- a/src/coreclr/jit/fgbasic.cpp
+++ b/src/coreclr/jit/fgbasic.cpp
@@ -6012,11 +6012,6 @@ BasicBlock* Compiler::fgNewBBbefore(BBKinds jumpKind, BasicBlock* block, bool ex
newBlk->bbRefs = 0;
- if (newBlk->bbFallsThrough() && block->isRunRarely())
- {
- newBlk->bbSetRunRarely();
- }
-
if (extendRegion)
{
fgExtendEHRegionBefore(block);
@@ -6051,11 +6046,6 @@ BasicBlock* Compiler::fgNewBBafter(BBKinds jumpKind, BasicBlock* block, bool ext
newBlk->bbRefs = 0;
- if (block->bbFallsThrough() && block->isRunRarely())
- {
- newBlk->bbSetRunRarely();
- }
-
if (extendRegion)
{
fgExtendEHRegionAfter(block);
diff --git a/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets b/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets
index 2fa194a477c9bf..75f579fc4a8617 100644
--- a/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets
+++ b/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets
@@ -168,7 +168,7 @@ The .NET Foundation licenses this file to you under the MIT license.
-
+
diff --git a/src/coreclr/nativeaot/BuildIntegration/findvcvarsall.bat b/src/coreclr/nativeaot/BuildIntegration/findvcvarsall.bat
index efee6316785f66..70294486de4500 100644
--- a/src/coreclr/nativeaot/BuildIntegration/findvcvarsall.bat
+++ b/src/coreclr/nativeaot/BuildIntegration/findvcvarsall.bat
@@ -33,6 +33,9 @@ IF /I "%~1"=="arm64" (
SET vcEnvironment=x86_arm64
IF /I "%procArch%"=="AMD64" SET vcEnvironment=amd64_arm64
)
+IF /I "%~1"=="x86" (
+ IF /I "%procArch%"=="AMD64" SET vcEnvironment=amd64_x86
+)
CALL "%vsBase%\vc\Auxiliary\Build\vcvarsall.bat" %vcEnvironment% > NUL
diff --git a/src/coreclr/scripts/superpmi.py b/src/coreclr/scripts/superpmi.py
index ef5d2c70684d49..cff7695bed0de4 100644
--- a/src/coreclr/scripts/superpmi.py
+++ b/src/coreclr/scripts/superpmi.py
@@ -227,6 +227,10 @@
Compile only specified method contexts, e.g., `-compile 20,25`. This is passed directly to the superpmi.exe `-compile` argument. See `superpmi.exe -?` for full documentation about allowed formats.
"""
+produce_repro_help = """\
+If passed, produce the *.mc repro files.
+"""
+
# Start of parser object creation.
parser = argparse.ArgumentParser(description=description)
@@ -323,6 +327,7 @@ def add_core_root_arguments(parser, build_type_default, build_type_help):
replay_common_parser.add_argument("-jit_ee_version", help=jit_ee_version_help)
replay_common_parser.add_argument("-private_store", action="append", help=private_store_help)
replay_common_parser.add_argument("-compile", "-c", help=compile_help)
+replay_common_parser.add_argument("--produce_repro", action="store_true", help=produce_repro_help)
# subparser for replay
replay_parser = subparsers.add_parser("replay", description=replay_description, parents=[core_root_parser, target_parser, superpmi_common_parser, replay_common_parser])
@@ -1500,6 +1505,7 @@ def save_repro_mc_files(temp_location, coreclr_args, artifacts_base_name, repro_
""" For commands that use the superpmi "-r" option to create "repro" .mc files, copy these to a
location where they are saved (and not in a "temp" directory) for easy use by the user.
"""
+
# If there are any .mc files, drop them into artifacts/repro/../*.mc
mc_files = [os.path.join(temp_location, item) for item in os.listdir(temp_location) if item.endswith(".mc")]
if len(mc_files) > 0:
@@ -1643,10 +1649,14 @@ def replay(self):
repro_flags = []
common_flags = [
- "-v", "ewi", # display errors, warnings, missing, jit info
- "-r", os.path.join(temp_location, "repro") # Repro name prefix, create .mc repro files
+ "-v", "ewi" # display errors, warnings, missing, jit info
]
+ if self.coreclr_args.produce_repro:
+ common_flags += [
+ "-r", os.path.join(temp_location, "repro") # Repro name prefix, create .mc repro files
+ ]
+
if self.coreclr_args.altjit:
repro_flags += [
"-jitoption", "force", "AltJit=*",
@@ -2151,8 +2161,12 @@ def replay_with_asm_diffs(self):
"-v", "ewi", # display errors, warnings, missing, jit info
"-f", fail_mcl_file, # Failing mc List
"-details", detailed_info_file, # Detailed information about each context
- "-r", os.path.join(temp_location, "repro"), # Repro name prefix, create .mc repro files
]
+ if self.coreclr_args.produce_repro:
+ flags += [
+ "-r", os.path.join(temp_location, "repro") # Repro name prefix, create .mc repro files
+ ]
+
flags += altjit_asm_diffs_flags
flags += base_option_flags
flags += diff_option_flags
@@ -4482,6 +4496,11 @@ def verify_replay_common_args():
lambda unused: True,
"Method context not valid")
+ coreclr_args.verify(args,
+ "produce_repro",
+ lambda unused: True,
+ "Unable to set produce_repro")
+
coreclr_args.verify(args,
"private_store",
lambda item: True,
diff --git a/src/coreclr/tools/superpmi/superpmi-shared/agnostic.h b/src/coreclr/tools/superpmi/superpmi-shared/agnostic.h
index ffd657bea503f0..104a7ae1fabd39 100644
--- a/src/coreclr/tools/superpmi/superpmi-shared/agnostic.h
+++ b/src/coreclr/tools/superpmi/superpmi-shared/agnostic.h
@@ -429,8 +429,8 @@ struct Agnostic_EmbedGenericHandle
struct Agnostic_ExpandRawHandleIntrinsic
{
- Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken;
- DWORDLONG hCallerHandle;
+ Agnostic_CORINFO_RESOLVED_TOKENin ResolvedToken;
+ DWORDLONG hCallerHandle;
};
struct Agnostic_CORINFO_GENERICHANDLE_RESULT
diff --git a/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp b/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp
index 6b5931a826374c..70c5c627bd404c 100644
--- a/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp
+++ b/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp
@@ -1677,7 +1677,7 @@ void MethodContext::recExpandRawHandleIntrinsic(CORINFO_RESOLVED_TOKEN* pResolve
Agnostic_ExpandRawHandleIntrinsic key;
ZeroMemory(&key, sizeof(key)); // Zero key including any struct padding
- key.ResolvedToken = SpmiRecordsHelper::StoreAgnostic_CORINFO_RESOLVED_TOKEN(pResolvedToken, ExpandRawHandleIntrinsic);
+ key.ResolvedToken = SpmiRecordsHelper::CreateAgnostic_CORINFO_RESOLVED_TOKENin(pResolvedToken);
key.hCallerHandle = CastHandle(callerHandle);
Agnostic_CORINFO_GENERICHANDLE_RESULT value;
@@ -1691,7 +1691,7 @@ void MethodContext::recExpandRawHandleIntrinsic(CORINFO_RESOLVED_TOKEN* pResolve
void MethodContext::dmpExpandRawHandleIntrinsic(const Agnostic_ExpandRawHandleIntrinsic& key, const Agnostic_CORINFO_GENERICHANDLE_RESULT& result)
{
printf("ExpandRawHandleIntrinsic key: %s, value %s cth-%016" PRIx64 " ht-%u",
- SpmiDumpHelper::DumpAgnostic_CORINFO_RESOLVED_TOKEN(key.ResolvedToken).c_str(),
+ SpmiDumpHelper::DumpAgnostic_CORINFO_RESOLVED_TOKENin(key.ResolvedToken).c_str(),
SpmiDumpHelper::DumpAgnostic_CORINFO_LOOKUP(result.lookup).c_str(),
result.compileTimeHandle,
result.handleType);
@@ -1701,7 +1701,7 @@ void MethodContext::repExpandRawHandleIntrinsic(CORINFO_RESOLVED_TOKEN* pResolve
Agnostic_ExpandRawHandleIntrinsic key;
ZeroMemory(&key, sizeof(key)); // Zero key including any struct padding
- key.ResolvedToken = SpmiRecordsHelper::RestoreAgnostic_CORINFO_RESOLVED_TOKEN(pResolvedToken, ExpandRawHandleIntrinsic);
+ key.ResolvedToken = SpmiRecordsHelper::CreateAgnostic_CORINFO_RESOLVED_TOKENin(pResolvedToken);
key.hCallerHandle = CastHandle(callerHandle);
Agnostic_CORINFO_GENERICHANDLE_RESULT value =
@@ -3153,6 +3153,7 @@ void MethodContext::repEmbedGenericHandle(CORINFO_RESOLVED_TOKEN* pResolve
ZeroMemory(&key, sizeof(key)); // Zero key including any struct padding
key.ResolvedToken = SpmiRecordsHelper::RestoreAgnostic_CORINFO_RESOLVED_TOKEN(pResolvedToken, EmbedGenericHandle);
key.fEmbedParent = (DWORD)fEmbedParent;
+ key.hCallerHandle = CastHandle(callerHandle);
Agnostic_CORINFO_GENERICHANDLE_RESULT value = LookupByKeyOrMissNoMessage(EmbedGenericHandle, key);
diff --git a/src/libraries/Microsoft.Extensions.DependencyInjection.Abstractions/src/ActivatorUtilities.cs b/src/libraries/Microsoft.Extensions.DependencyInjection.Abstractions/src/ActivatorUtilities.cs
index 8c8fcbd5f18b45..a7d8701061e5a1 100644
--- a/src/libraries/Microsoft.Extensions.DependencyInjection.Abstractions/src/ActivatorUtilities.cs
+++ b/src/libraries/Microsoft.Extensions.DependencyInjection.Abstractions/src/ActivatorUtilities.cs
@@ -9,6 +9,7 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
+using System.Runtime.InteropServices;
using Microsoft.Extensions.Internal;
#if NETCOREAPP
@@ -28,9 +29,7 @@ public static class ActivatorUtilities
// Support caching of constructor metadata for types in collectible assemblies.
private static readonly Lazy> s_collectibleConstructorInfos = new();
-#endif
-#if NET8_0_OR_GREATER
// Maximum number of fixed arguments for ConstructorInvoker.Invoke(arg1, etc).
private const int FixedArgumentThreshold = 4;
#endif
@@ -66,10 +65,29 @@ public static object CreateInstance(
{
constructors = GetOrAddConstructors(instanceType);
}
+
+ // Attempt to use the stack allocated arg values if <= 4 ctor args.
+ Span