diff --git a/eng/Signing.props b/eng/Signing.props index 34821db7fc4e3..da3f34bd4145a 100644 --- a/eng/Signing.props +++ b/eng/Signing.props @@ -47,10 +47,15 @@ - - - - + + + + + + + + + diff --git a/eng/Subsets.props b/eng/Subsets.props index f7f61f98f6e9b..0c1a2f5e573c1 100644 --- a/eng/Subsets.props +++ b/eng/Subsets.props @@ -54,7 +54,7 @@ - clr.runtime+linuxdac+clr.corelib+clr.nativecorelib+clr.tools+clr.packages + clr.runtime+clr.jit+clr.alljits+linuxdac+clr.corelib+clr.nativecorelib+clr.tools+clr.packages mono.llvm+ $(DefaultMonoSubsets)mono.runtime+mono.corelib+mono.packages @@ -74,12 +74,17 @@ <_subset>+$(_subset.Trim('+'))+ + + + ClrRuntimeSubset=true;ClrJitSubset=true + + @@ -132,16 +137,28 @@ - - + + $(ClrRuntimeBuildSubsets);ClrRuntimeSubset=true;ClrJitSubset=true + + + + $(ClrRuntimeBuildSubsets);ClrJitSubset=true + + + + $(ClrRuntimeBuildSubsets);ClrAllJitsSubset=true;ClrJitSubset=true + + + + - + - + diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 006a180fa0aa2..0a5624096f7df 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -201,13 +201,17 @@ endif() # Definitions (for platform) #----------------------------------- if (CLR_CMAKE_HOST_ARCH_AMD64) + set(ARCH_HOST_NAME x64) add_definitions(-DHOST_AMD64) add_definitions(-DHOST_64BIT) elseif (CLR_CMAKE_HOST_ARCH_I386) + set(ARCH_HOST_NAME x86) add_definitions(-DHOST_X86) elseif (CLR_CMAKE_HOST_ARCH_ARM) + set(ARCH_HOST_NAME arm) add_definitions(-DHOST_ARM) elseif (CLR_CMAKE_HOST_ARCH_ARM64) + set(ARCH_HOST_NAME arm64) add_definitions(-DHOST_ARM64) add_definitions(-DHOST_64BIT) else () @@ -262,18 +266,22 @@ endif(CLR_CMAKE_HOST_WIN32) # Architecture specific files folder name if (CLR_CMAKE_TARGET_ARCH_AMD64) set(ARCH_SOURCES_DIR amd64) - add_definitions(-DTARGET_AMD64) - add_definitions(-DTARGET_64BIT) + set(ARCH_TARGET_NAME x64) + add_compile_definitions($<$>>:TARGET_AMD64>) + add_compile_definitions($<$>>:TARGET_64BIT>) elseif (CLR_CMAKE_TARGET_ARCH_ARM64) set(ARCH_SOURCES_DIR arm64) - add_definitions(-DTARGET_ARM64) - add_definitions(-DTARGET_64BIT) + set(ARCH_TARGET_NAME arm64) + add_compile_definitions($<$>>:TARGET_ARM64>) + add_compile_definitions($<$>>:TARGET_64BIT>) elseif (CLR_CMAKE_TARGET_ARCH_ARM) set(ARCH_SOURCES_DIR arm) - add_definitions(-DTARGET_ARM) + set(ARCH_TARGET_NAME arm) + add_compile_definitions($<$>>:TARGET_ARM>) elseif (CLR_CMAKE_TARGET_ARCH_I386) + set(ARCH_TARGET_NAME x86) set(ARCH_SOURCES_DIR i386) - add_definitions(-DTARGET_X86) + add_compile_definitions($<$>>:TARGET_X86>) else () clr_unknown_arch() endif () @@ -374,24 +382,24 @@ if (CLR_CMAKE_HOST_UNIX) endif(CLR_CMAKE_HOST_UNIX) if(CLR_CMAKE_TARGET_UNIX) - add_definitions(-DTARGET_UNIX) + add_compile_definitions($<$>>:TARGET_UNIX>) # Contracts are disabled on UNIX. add_definitions(-DDISABLE_CONTRACTS) if(CLR_CMAKE_TARGET_OSX) - add_definitions(-DTARGET_OSX) + add_compile_definitions($<$>>:TARGET_OSX>) elseif(CLR_CMAKE_TARGET_FREEBSD) - add_definitions(-DTARGET_FREEBSD) + add_compile_definitions($<$>>:TARGET_FREEBSD>) elseif(CLR_CMAKE_TARGET_LINUX) - add_definitions(-DTARGET_LINUX) + add_compile_definitions($<$>>:TARGET_LINUX>) elseif(CLR_CMAKE_TARGET_NETBSD) - add_definitions(-DTARGET_NETBSD) + add_compile_definitions($<$>>:TARGET_NETBSD>) elseif(CLR_CMAKE_TARGET_SUNOS) - add_definitions(-DTARGET_SUNOS) + add_compile_definitions($<$>>:TARGET_SUNOS>) elseif(CLR_CMAKE_TARGET_ANDROID) - add_definitions(-DTARGET_ANDROID) + add_compile_definitions($<$>>:TARGET_ANDROID>) endif() else(CLR_CMAKE_TARGET_UNIX) - add_definitions(-DTARGET_WINDOWS) + add_compile_definitions($<$>>:TARGET_WINDOWS>) endif(CLR_CMAKE_TARGET_UNIX) if(CLR_CMAKE_HOST_UNIX_ARM) diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake index dbfadfda59914..2bdb152292654 100644 --- a/eng/native/configureplatform.cmake +++ b/eng/native/configureplatform.cmake @@ -364,8 +364,8 @@ endif(CLR_CMAKE_TARGET_UNIX) # check if host & target os/arch combination are valid if (CLR_CMAKE_TARGET_OS STREQUAL CLR_CMAKE_HOST_OS) if(NOT(CLR_CMAKE_TARGET_ARCH STREQUAL CLR_CMAKE_HOST_ARCH)) - if(NOT((CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM64) OR (CLR_CMAKE_HOST_ARCH_I386 AND CLR_CMAKE_TARGET_ARCH_ARM) OR (CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM))) - message(FATAL_ERROR "Invalid platform and target arch combination") + if(NOT((CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM64) OR (CLR_CMAKE_HOST_ARCH_I386 AND CLR_CMAKE_TARGET_ARCH_ARM) OR (CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM) OR (CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_I386))) + message(FATAL_ERROR "Invalid platform and target arch combination TARGET_ARCH=${CLR_CMAKE_TARGET_ARCH} HOST_ARCH=${CLR_CMAKE_HOST_ARCH}") endif() endif() else() diff --git a/src/coreclr/CMakeLists.txt b/src/coreclr/CMakeLists.txt index b94eb54a67154..e5dbed52b56cc 100644 --- a/src/coreclr/CMakeLists.txt +++ b/src/coreclr/CMakeLists.txt @@ -51,9 +51,9 @@ include(pgosupport.cmake) #------------------------------- # Include libraries native shims #------------------------------- -if(NOT CLR_CROSS_COMPONENTS_BUILD) +if(NOT CLR_CROSS_COMPONENTS_BUILD AND CLR_CMAKE_BUILD_SUBSET_RUNTIME) add_subdirectory(src/libraries-native) -endif(NOT CLR_CROSS_COMPONENTS_BUILD) +endif(NOT CLR_CROSS_COMPONENTS_BUILD AND CLR_CMAKE_BUILD_SUBSET_RUNTIME) #----------------------------------------- # Add Projects @@ -86,7 +86,7 @@ add_subdirectory(src/pal/prebuilt/inc) add_subdirectory(src/debug/debug-pal) -if(CLR_CMAKE_TARGET_WIN32) +if(CLR_CMAKE_TARGET_WIN32 AND CLR_CMAKE_BUILD_SUBSET_RUNTIME) add_subdirectory(src/gc/sample) endif() @@ -115,7 +115,9 @@ include_directories("../../artifacts/obj/coreclr") if(FEATURE_STANDALONE_GC) add_definitions(-DFEATURE_STANDALONE_GC) - add_subdirectory(src/gc) + if (CLR_CMAKE_BUILD_SUBSET_RUNTIME) + add_subdirectory(src/gc) + endif (CLR_CMAKE_BUILD_SUBSET_RUNTIME) endif(FEATURE_STANDALONE_GC) if (CLR_CMAKE_HOST_UNIX) diff --git a/src/coreclr/build-runtime.cmd b/src/coreclr/build-runtime.cmd index 628f4eefbff28..49e4894c5134a 100644 --- a/src/coreclr/build-runtime.cmd +++ b/src/coreclr/build-runtime.cmd @@ -83,7 +83,12 @@ set __BuildCrossArchNative=0 set __SkipCrossArchNative=0 set __SkipGenerateVersion=0 set __RestoreOptData=1 +set __BuildJit=1 +set __BuildAllJits=1 +set __BuildRuntime=1 set __CrossArch= +set __CrossArch2= +set __CrossOS=0 set __PgoOptDataPath= set __CMakeArgs= @@ -149,8 +154,8 @@ if [!__PassThroughArgs!]==[] ( set __PassThroughArgs=%__PassThroughArgs% %1 ) -if /i "%1" == "-alpinedac" (set __BuildNative=0&set __BuildCrossArchNative=1&set __CrossArch=x64&set __TargetOS=alpine&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) -if /i "%1" == "-linuxdac" (set __BuildNative=0&set __BuildCrossArchNative=1&set __CrossArch=x64&set __TargetOS=Linux&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) +if /i "%1" == "-alpinedac" (set __BuildNative=0&set __BuildCrossArchNative=1&set __CrossArch=x64&set __CrossOS=1&set __TargetOS=alpine&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) +if /i "%1" == "-linuxdac" (set __BuildNative=0&set __BuildCrossArchNative=1&set __CrossArch=x64&set __CrossOS=1&set __TargetOS=Linux&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) if /i "%1" == "-cmakeargs" (set __CMakeArgs=%2 %__CMakeArgs%&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop) if /i "%1" == "-configureonly" (set __ConfigureOnly=1&set __BuildNative=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) @@ -163,6 +168,9 @@ if /i "%1" == "-usenmakemakefiles" (set __NMakeMakefiles=1&set __ConfigureOnly if /i "%1" == "-pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) if /i "%1" == "-enforcepgo" (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) if /i "%1" == "-nopgooptimize" (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) +if /i "%1" == "-skipjit" (set __BuildJit=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) +if /i "%1" == "-skipalljits" (set __BuildAllJits=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) +if /i "%1" == "-skipruntime" (set __BuildRuntime=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) REM TODO these are deprecated remove them eventually REM don't add more, use the - syntax instead @@ -208,10 +216,14 @@ if %__TotalSpecifiedBuildArch% GTR 1 ( ) if %__BuildArchX64%==1 set __BuildArch=x64 -if %__BuildArchX86%==1 set __BuildArch=x86 +if %__BuildArchX86%==1 ( + set __BuildArch=x86 + if /i "%__CrossOS%" NEQ "1" set __CrossArch=x64 +) if %__BuildArchArm%==1 ( set __BuildArch=arm set __CrossArch=x86 + if /i "%__CrossOS%" NEQ "1" set __CrossArch2=x64 ) if %__BuildArchArm64%==1 ( set __BuildArch=arm64 @@ -251,6 +263,9 @@ if %__SkipCrossArchNative% EQU 0 ( if /i "%__BuildArch%"=="arm" ( set __BuildCrossArchNative=1 ) + if /i "%__BuildArch%"=="x86" ( + set __BuildCrossArchNative=1 + ) ) ) @@ -269,9 +284,11 @@ if "%__NMakeMakefiles%"=="1" (set "__IntermediatesDir=%__RootBinDir%\nmakeobj\%_ set "__PackagesBinDir=%__BinDir%\.nuget" set "__CrossComponentBinDir=%__BinDir%" set "__CrossCompIntermediatesDir=%__IntermediatesDir%\crossgen" +set "__CrossComp2IntermediatesDir=%__IntermediatesDir%\crossgen_2" if NOT "%__CrossArch%" == "" set __CrossComponentBinDir=%__CrossComponentBinDir%\%__CrossArch% +if NOT "%__CrossArch2%" == "" set __CrossComponent2BinDir=%__BinDir%\%__CrossArch2% REM Generate path to be set for CMAKE_INSTALL_PREFIX to contain forward slash set "__CMakeBinDir=%__BinDir%" @@ -400,6 +417,8 @@ if NOT DEFINED PYTHON ( goto ExitWithError ) +set __CMakeClrBuildSubsetArgs="-DCLR_CMAKE_BUILD_SUBSET_JIT=%__BuildJit%" "-DCLR_CMAKE_BUILD_SUBSET_ALLJITS=%__BuildAllJits%" "-DCLR_CMAKE_BUILD_SUBSET_RUNTIME=%__BuildRuntime%" + REM ========================================================================================= REM === REM === Build Cross-Architecture Native Components (if applicable) @@ -425,21 +444,48 @@ if %__BuildCrossArchNative% EQU 1 ( set __CMakeBinDir=%__CrossComponentBinDir% set "__CMakeBinDir=!__CMakeBinDir:\=/!" - set __ExtraCmakeArgs="-DCLR_CROSS_COMPONENTS_BUILD=1" "-DCLR_CMAKE_TARGET_ARCH=%__BuildArch%" "-DCLR_CMAKE_TARGET_OS=%__TargetOS%" "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_PATH=%__PgoOptDataPath%" "-DCLR_CMAKE_PGO_OPTIMIZE=%__PgoOptimize%" "-DCMAKE_SYSTEM_VERSION=10.0" "-DCLR_ENG_NATIVE_DIR=%__RepoRootDir%/eng/native" "-DCLR_REPO_ROOT_DIR=%__RepoRootDir%" %__CMakeArgs% + set __ExtraCmakeArgs=%__CMakeClrBuildSubsetArgs% "-DCLR_CROSS_COMPONENTS_BUILD=1" "-DCLR_CMAKE_TARGET_ARCH=%__BuildArch%" "-DCLR_CMAKE_TARGET_OS=%__TargetOS%" "-DCLR_CMAKE_PGO_INSTRUMENT=0" "-DCLR_CMAKE_OPTDATA_PATH=%__PgoOptDataPath%" "-DCLR_CMAKE_PGO_OPTIMIZE=0" "-DCMAKE_SYSTEM_VERSION=10.0" "-DCLR_ENG_NATIVE_DIR=%__RepoRootDir%/eng/native" "-DCLR_REPO_ROOT_DIR=%__RepoRootDir%" %__CMakeArgs% call "%__SourceDir%\pal\tools\gen-buildsys.cmd" "%__ProjectDir%" "%__CrossCompIntermediatesDir%" %__VSVersion% %__CrossArch% !__ExtraCmakeArgs! if not !errorlevel! == 0 ( - echo %__ErrMsgPrefix%%__MsgPrefix%Error: failed to generate cross architecture native component build project! + echo %__ErrMsgPrefix%%__MsgPrefix%Error: failed to generate cross architecture native component build project %__CrossArch%! goto ExitWithError ) @if defined _echo @echo on + if NOT "%__CrossArch2%" == "" ( + if not exist "%__CrossComp2IntermediatesDir%" md "%__CrossComp2IntermediatesDir%" + if /i "%__CrossArch2%" == "x86" ( set __VCBuildArch=x86 ) + if /i "%__CrossArch2%" == "x64" ( set __VCBuildArch=x86_amd64 ) + + set __CMakeBinDir=%__CrossComponent2BinDir% + set "__CMakeBinDir=!__CMakeBinDir:\=/!" + set __ExtraCmakeArgs=%__CMakeClrBuildSubsetArgs% "-DCLR_CROSS_COMPONENTS_BUILD=1" "-DCLR_CMAKE_TARGET_ARCH=%__BuildArch%" "-DCLR_CMAKE_TARGET_OS=%__TargetOS%" "-DCLR_CMAKE_PGO_INSTRUMENT=0" "-DCLR_CMAKE_OPTDATA_PATH=%__PgoOptDataPath%" "-DCLR_CMAKE_PGO_OPTIMIZE=0" "-DCMAKE_SYSTEM_VERSION=10.0" "-DCLR_ENG_NATIVE_DIR=%__RepoRootDir%/eng/native" "-DCLR_REPO_ROOT_DIR=%__RepoRootDir%" %__CMakeArgs% + call "%__SourceDir%\pal\tools\gen-buildsys.cmd" "%__ProjectDir%" "%__CrossComp2IntermediatesDir%" %__VSVersion% %__CrossArch2% !__ExtraCmakeArgs! + + if not !errorlevel! == 0 ( + echo %__ErrMsgPrefix%%__MsgPrefix%Error: failed to generate cross architecture native component build project %__CrossArch2%! + goto ExitWithError + ) + + set __VCBuildArch=x86_amd64 + if /i "%__CrossArch%" == "x86" ( set __VCBuildArch=x86 ) + @if defined _echo @echo on + ) + :SkipConfigureCrossBuild if not exist "%__CrossCompIntermediatesDir%\CMakeCache.txt" ( - echo %__ErrMsgPrefix%%__MsgPrefix%Error: unable to find generated cross architecture native component build project! + echo %__ErrMsgPrefix%%__MsgPrefix%Error: unable to find generated cross architecture native component build project %__CrossArch%! goto ExitWithError ) + if NOT "%__CrossArch2%" == "" ( + if not exist "%__CrossComp2IntermediatesDir%\CMakeCache.txt" ( + echo %__ErrMsgPrefix%%__MsgPrefix%Error: unable to find generated cross architecture native component build project %__CrossArch2%! + goto ExitWithError + ) + ) + if defined __ConfigureOnly goto SkipCrossCompBuild set __BuildLogRootName=Cross @@ -465,6 +511,30 @@ if %__BuildCrossArchNative% EQU 1 ( goto ExitWithCode ) + if NOT "%__CrossArch2%" == "" ( + set __BuildLogRootName=Cross2 + set "__BuildLog=%__LogsDir%\!__BuildLogRootName!_%__TargetOS%__%__BuildArch%__%__BuildType%.log" + set "__BuildWrn=%__LogsDir%\!__BuildLogRootName!_%__TargetOS%__%__BuildArch%__%__BuildType%.wrn" + set "__BuildErr=%__LogsDir%\!__BuildLogRootName!_%__TargetOS%__%__BuildArch%__%__BuildType%.err" + set "__BinLog=%__LogsDir%\!__BuildLogRootName!_%__TargetOS%__%__BuildArch%__%__BuildType%.binlog" + set "__MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!" + set "__MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!" + set "__MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!" + set "__MsbuildBinLog=/bl:!__BinLog!" + set "__Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr! !__MsbuildBinLog!" + + REM We pass the /m flag directly to MSBuild so that we can get both MSBuild and CL parallelism, which is fastest for our builds. + "%CMakePath%" --build %__CrossComp2IntermediatesDir% --target install --config %__BuildType% -- /nologo /m !__Logging! + + if not !errorlevel! == 0 ( + set __exitCode=!errorlevel! + echo %__ErrMsgPrefix%%__MsgPrefix%Error: cross-arch components build failed. Refer to the build log files for details. + echo !__BuildLog! + echo !__BuildWrn! + echo !__BuildErr! + goto ExitWithCode + ) + ) :SkipCrossCompBuild REM } Scope environment changes end endlocal @@ -508,7 +578,8 @@ if %__BuildNative% EQU 1 ( echo %__MsgPrefix%Regenerating the Visual Studio solution - set __ExtraCmakeArgs="-DCMAKE_SYSTEM_VERSION=10.0" !___CrossBuildDefine! "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_PATH=%__PgoOptDataPath%" "-DCLR_CMAKE_PGO_OPTIMIZE=%__PgoOptimize%" "-DCLR_ENG_NATIVE_DIR=%__RepoRootDir%/eng/native" "-DCLR_REPO_ROOT_DIR=%__RepoRootDir%" %__CMakeArgs% + set __ExtraCmakeArgs=%__CMakeClrBuildSubsetArgs% "-DCMAKE_SYSTEM_VERSION=10.0" !___CrossBuildDefine! "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_PATH=%__PgoOptDataPath%" "-DCLR_CMAKE_PGO_OPTIMIZE=%__PgoOptimize%" "-DCLR_ENG_NATIVE_DIR=%__RepoRootDir%/eng/native" "-DCLR_REPO_ROOT_DIR=%__RepoRootDir%" %__CMakeArgs% + call "%__SourceDir%\pal\tools\gen-buildsys.cmd" "%__ProjectDir%" "%__IntermediatesDir%" %__VSVersion% %__BuildArch% !__ExtraCmakeArgs! if not !errorlevel! == 0 ( echo %__ErrMsgPrefix%%__MsgPrefix%Error: failed to generate native component build project! diff --git a/src/coreclr/build-runtime.sh b/src/coreclr/build-runtime.sh index 24bb0067380b5..f4007ebd1a74b 100755 --- a/src/coreclr/build-runtime.sh +++ b/src/coreclr/build-runtime.sh @@ -22,6 +22,9 @@ usage_list+=("-nopgooptimize: do not use profile guided optimizations.") usage_list+=("-pgoinstrument: generate instrumented code for profile guided optimization enabled binaries.") usage_list+=("-skipcrossarchnative: Skip building cross-architecture native binaries.") usage_list+=("-staticanalyzer: skip native image generation.") +usage_list+=("-skipjit: skip building jit.") +usage_list+=("-skipalljits: skip building crosstargetting jits.") +usage_list+=("-skipruntime: skip building runtime.") setup_dirs_local() { @@ -121,6 +124,17 @@ handle_arguments_local() { __StaticAnalyzer=1 ;; + skipjit|-skipjit) + __BuildJit=0 + ;; + + skipalljits|-skipalljits) + __BuildAllJits=0 + ;; + + skipruntime|-skipruntime) + __BuildRuntime=0 + ;; *) __UnprocessedBuildArgs="$__UnprocessedBuildArgs $1" ;; @@ -173,6 +187,9 @@ __UseNinja=0 __VerboseBuild=0 __ValidateCrossArg=1 __CMakeArgs="" +__BuildJit=1 +__BuildAllJits=1 +__BuildRuntime=1 source "$__ProjectRoot"/_build-commons.sh @@ -229,6 +246,7 @@ restore_optdata # Build the coreclr (native) components. __CMakeArgs="-DCLR_CMAKE_PGO_INSTRUMENT=$__PgoInstrument -DCLR_CMAKE_OPTDATA_PATH=$__PgoOptDataPath -DCLR_CMAKE_PGO_OPTIMIZE=$__PgoOptimize -DCLR_REPO_ROOT_DIR=\"$__RepoRootDir\" $__CMakeArgs" +__CMakeArgs="-DCLR_CMAKE_BUILD_SUBSET_JIT=$__BuildJit -DCLR_CMAKE_BUILD_SUBSET_ALLJITS=$__BuildAllJits -DCLR_CMAKE_BUILD_SUBSET_RUNTIME=$__BuildRuntime $__CMakeArgs" if [[ "$__SkipConfigure" == 0 && "$__CodeCoverage" == 1 ]]; then __CMakeArgs="-DCLR_CMAKE_ENABLE_CODE_COVERAGE=1 $__CMakeArgs" diff --git a/src/coreclr/clrdefinitions.cmake b/src/coreclr/clrdefinitions.cmake index b717c10d840a4..eafe212786d85 100644 --- a/src/coreclr/clrdefinitions.cmake +++ b/src/coreclr/clrdefinitions.cmake @@ -16,7 +16,7 @@ if (CLR_CMAKE_TARGET_ARCH_ARM64) if (CLR_CMAKE_TARGET_UNIX) add_definitions(-DFEATURE_EMULATE_SINGLESTEP) endif() - add_definitions(-DFEATURE_MULTIREG_RETURN) + add_compile_definitions($<$>>:FEATURE_MULTIREG_RETURN>) elseif (CLR_CMAKE_TARGET_ARCH_ARM) if (CLR_CMAKE_HOST_WIN32 AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD) # Set this to ensure we can use Arm SDK for Desktop binary linkage when doing native (Arm32) build @@ -33,11 +33,12 @@ if (CLR_CMAKE_TARGET_UNIX) endif(CLR_CMAKE_TARGET_OSX) if (CLR_CMAKE_TARGET_ARCH_AMD64) - add_definitions(-DUNIX_AMD64_ABI) + add_compile_definitions($<$>>:UNIX_AMD64_ABI>) + add_compile_definitions($<$>>:FEATURE_MULTIREG_RETURN>) elseif (CLR_CMAKE_TARGET_ARCH_ARM) - add_definitions(-DUNIX_ARM_ABI) + add_compile_definitions($<$>>:UNIX_ARM_ABI>) elseif (CLR_CMAKE_TARGET_ARCH_I386) - add_definitions(-DUNIX_X86_ABI) + add_compile_definitions($<$>>:UNIX_X86_ABI>) endif() endif(CLR_CMAKE_TARGET_UNIX) @@ -145,7 +146,7 @@ endif(CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_WIN32) add_definitions(-DFEATURE_MANAGED_ETW_CHANNELS) if(FEATURE_MERGE_JIT_AND_ENGINE) - add_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE) + add_compile_definitions($<$>>:FEATURE_MERGE_JIT_AND_ENGINE>) endif(FEATURE_MERGE_JIT_AND_ENGINE) add_compile_definitions($<$>>:FEATURE_MULTICOREJIT>) if(CLR_CMAKE_TARGET_UNIX) @@ -199,12 +200,6 @@ if (CLR_CMAKE_TARGET_ARCH_AMD64) # Enable the AMD64 Unix struct passing JIT-EE interface for all AMD64 platforms, to enable altjit. add_definitions(-DUNIX_AMD64_ABI_ITF) endif (CLR_CMAKE_TARGET_ARCH_AMD64) -if(CLR_CMAKE_TARGET_UNIX_AMD64) - add_definitions(-DFEATURE_MULTIREG_RETURN) -endif (CLR_CMAKE_TARGET_UNIX_AMD64) -if(CLR_CMAKE_TARGET_UNIX AND CLR_CMAKE_TARGET_ARCH_AMD64) - add_definitions(-DUNIX_AMD64_ABI) -endif(CLR_CMAKE_TARGET_UNIX AND CLR_CMAKE_TARGET_ARCH_AMD64) add_definitions(-DFEATURE_USE_ASM_GC_WRITE_BARRIERS) if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64) add_definitions(-DFEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP) @@ -231,5 +226,49 @@ if(CLR_CMAKE_TARGET_OSX) endif(CLR_CMAKE_TARGET_OSX) if (NOT CLR_CMAKE_TARGET_ARCH_I386 OR NOT CLR_CMAKE_TARGET_WIN32) - add_definitions(-DFEATURE_EH_FUNCLETS) + add_compile_definitions($<$>>:FEATURE_EH_FUNCLETS>) endif (NOT CLR_CMAKE_TARGET_ARCH_I386 OR NOT CLR_CMAKE_TARGET_WIN32) + + +# Use this function to enable building with a specific target OS and architecture set of defines +# This is known to work for the set of defines used by the JIT and gcinfo, it is not likely correct for +# other components of the runtime +function(set_target_definitions_to_custom_os_and_arch) + set(oneValueArgs TARGET OS ARCH) + cmake_parse_arguments(TARGETDETAILS "" "${oneValueArgs}" "" ${ARGN}) + + set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_ARCH TRUE) + set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_OS TRUE) + + if ((TARGETDETAILS_OS STREQUAL "unix")) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_UNIX) + if (TARGETDETAILS_ARCH STREQUAL "x64") + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_AMD64_ABI) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_MULTIREG_RETURN) + elseif (TARGETDETAILS_ARCH STREQUAL "arm") + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_ARM_ABI) + elseif (TARGETDETAILS_ARCH STREQUAL "x86") + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_X86_ABI) + elseif (TARGETDETAILS_ARCH STREQUAL "arm64") + endif() + else() + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_WINDOWS) + endif((TARGETDETAILS_OS STREQUAL "unix")) + + if (TARGETDETAILS_ARCH STREQUAL "x86") + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_X86) + elseif(TARGETDETAILS_ARCH STREQUAL "x64") + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_64BIT) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_AMD64) + elseif(TARGETDETAILS_ARCH STREQUAL "arm64") + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_64BIT) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_ARM64) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_MULTIREG_RETURN) + elseif(TARGETDETAILS_ARCH STREQUAL "arm") + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_ARM) + endif() + + if (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS STREQUAL "unix")) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_EH_FUNCLETS) + endif (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS STREQUAL "unix")) +endfunction() diff --git a/src/coreclr/crosscomponents.cmake b/src/coreclr/crosscomponents.cmake index 5bb0b5bef5c73..b2b010fdd6659 100644 --- a/src/coreclr/crosscomponents.cmake +++ b/src/coreclr/crosscomponents.cmake @@ -1,15 +1,26 @@ add_definitions(-DCROSS_COMPILE) -if(CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM) +if(CLR_CMAKE_HOST_ARCH_AMD64 AND (CLR_CMAKE_TARGET_ARCH_ARM OR CLR_CMAKE_TARGET_ARCH_I386)) set(FEATURE_CROSSBITNESS 1) -endif(CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM) +endif(CLR_CMAKE_HOST_ARCH_AMD64 AND (CLR_CMAKE_TARGET_ARCH_ARM OR CLR_CMAKE_TARGET_ARCH_I386)) if (CLR_CMAKE_HOST_OS STREQUAL CLR_CMAKE_TARGET_OS) set (CLR_CROSS_COMPONENTS_LIST - crossgen clrjit - jitinterface + jitinterface_${ARCH_HOST_NAME} ) + + if(CLR_CMAKE_HOST_LINUX OR NOT FEATURE_CROSSBITNESS) + list (APPEND CLR_CROSS_COMPONENTS_LIST + crossgen + ) + endif() + + if (CLR_CMAKE_TARGET_UNIX) + list (APPEND CLR_CROSS_COMPONENTS_LIST + clrjit_unix_${ARCH_TARGET_NAME}_${ARCH_HOST_NAME} + ) + endif(CLR_CMAKE_TARGET_UNIX) endif() if(NOT CLR_CMAKE_HOST_LINUX AND NOT FEATURE_CROSSBITNESS) diff --git a/src/coreclr/runtime.proj b/src/coreclr/runtime.proj index f0da8c09cd0d6..7ea711cf15bdc 100644 --- a/src/coreclr/runtime.proj +++ b/src/coreclr/runtime.proj @@ -21,6 +21,10 @@ <_CoreClrBuildArg Condition="$([MSBuild]::IsOsPlatform(Windows)) and '$(CrossDac)' != ''" Include="-$(CrossDac)dac" /> <_CoreClrBuildArg Condition="'$(OfficialBuildId)' != ''" Include="/p:OfficialBuildId=$(OfficialBuildId)" /> <_CoreClrBuildArg Condition="'$(NoPgoOptimize)' == 'true'" Include="-nopgooptimize" /> + <_CoreClrBuildArg Condition="'$(ClrRuntimeSubset)' != 'true'" Include="-skipruntime" /> + <_CoreClrBuildArg Condition="'$(ClrJitSubset)' != 'true'" Include="-skipjit" /> + <_CoreClrBuildArg Condition="'$(ClrAllJitsSubset)' != 'true'" Include="-skipalljits" /> + <_CoreClrBuildArg Condition="'$(NoPgoOptimize)' == 'true'" Include="-nopgooptimize" /> diff --git a/src/coreclr/src/CMakeLists.txt b/src/coreclr/src/CMakeLists.txt index e269657e5addf..0866be360fd03 100644 --- a/src/coreclr/src/CMakeLists.txt +++ b/src/coreclr/src/CMakeLists.txt @@ -61,22 +61,28 @@ endif(CLR_CMAKE_HOST_UNIX) add_subdirectory(utilcode) add_subdirectory(gcinfo) add_subdirectory(jit) -add_subdirectory(vm) -add_subdirectory(md) -add_subdirectory(debug) add_subdirectory(inc) -add_subdirectory(binder) -add_subdirectory(classlibnative) -add_subdirectory(dlls) -add_subdirectory(ToolBox) -add_subdirectory(tools) -add_subdirectory(unwinder) -add_subdirectory(ildasm) -add_subdirectory(ilasm) -add_subdirectory(interop) if(CLR_CMAKE_HOST_UNIX) add_subdirectory(palrt) -elseif(CLR_CMAKE_HOST_WIN32) - add_subdirectory(hosts) endif(CLR_CMAKE_HOST_UNIX) + +add_subdirectory(vm) +if (CLR_CMAKE_BUILD_SUBSET_RUNTIME) + add_subdirectory(md) + add_subdirectory(debug) + add_subdirectory(binder) + add_subdirectory(classlibnative) + add_subdirectory(dlls) + add_subdirectory(ToolBox) + add_subdirectory(tools) + add_subdirectory(unwinder) + add_subdirectory(ildasm) + add_subdirectory(ilasm) + add_subdirectory(interop) + + if(CLR_CMAKE_HOST_WIN32) + add_subdirectory(hosts) + endif(CLR_CMAKE_HOST_WIN32) +endif(CLR_CMAKE_BUILD_SUBSET_RUNTIME) + diff --git a/src/coreclr/src/debug/runtimeinfo/CMakeLists.txt b/src/coreclr/src/debug/runtimeinfo/CMakeLists.txt index 99b8f5edd0845..5f5778d1899ed 100644 --- a/src/coreclr/src/debug/runtimeinfo/CMakeLists.txt +++ b/src/coreclr/src/debug/runtimeinfo/CMakeLists.txt @@ -7,5 +7,8 @@ set(RUNTIMEINFO_SOURCES add_library_clr(runtimeinfo STATIC ${RUNTIMEINFO_SOURCES}) add_dependencies(runtimeinfo coreclr_module_index_header) -add_dependencies(runtimeinfo mscordaccore_module_index_header) -add_dependencies(runtimeinfo mscordbi_module_index_header) + +if (NOT (CLR_CMAKE_TARGET_WIN32 AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_ARM) AND CLR_CMAKE_HOST_ARCH_AMD64)) + add_dependencies(runtimeinfo mscordaccore_module_index_header) + add_dependencies(runtimeinfo mscordbi_module_index_header) +endif() \ No newline at end of file diff --git a/src/coreclr/src/dlls/CMakeLists.txt b/src/coreclr/src/dlls/CMakeLists.txt index 6df11d24cd4ef..6ef420d165f1a 100644 --- a/src/coreclr/src/dlls/CMakeLists.txt +++ b/src/coreclr/src/dlls/CMakeLists.txt @@ -2,8 +2,10 @@ if(CLR_CMAKE_TARGET_WIN32) add_subdirectory(clretwrc) endif(CLR_CMAKE_TARGET_WIN32) add_subdirectory(dbgshim) -add_subdirectory(mscordbi) -add_subdirectory(mscordac) +if (NOT (CLR_CMAKE_TARGET_WIN32 AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_ARM) AND CLR_CMAKE_HOST_ARCH_AMD64)) + add_subdirectory(mscordbi) + add_subdirectory(mscordac) +endif() add_subdirectory(mscoree) add_subdirectory(mscorpe) add_subdirectory(mscorrc) diff --git a/src/coreclr/src/gcdump/gcdump.cpp b/src/coreclr/src/gcdump/gcdump.cpp index 04faf7819daf6..84cb0beed9cca 100644 --- a/src/coreclr/src/gcdump/gcdump.cpp +++ b/src/coreclr/src/gcdump/gcdump.cpp @@ -34,7 +34,7 @@ GCDump::GCDump(UINT32 gcInfoVer, bool encBytes, unsigned maxEncBytes, bool dumpC * Display the byte encodings for the given range of the GC tables. */ -PTR_CBYTE GCDump::DumpEncoding(PTR_CBYTE gcInfoBlock, int cDumpBytes) +PTR_CBYTE GCDump::DumpEncoding(PTR_CBYTE gcInfoBlock, size_t cDumpBytes) { _ASSERTE((cDumpBytes >= 0) && (cMaxEncBytes < 256)); @@ -42,7 +42,7 @@ PTR_CBYTE GCDump::DumpEncoding(PTR_CBYTE gcInfoBlock, int cDumpBytes) { PTR_CBYTE pCurPos; unsigned count; - int cBytesLeft; + size_t cBytesLeft; for (count = cMaxEncBytes, cBytesLeft = cDumpBytes, pCurPos = gcInfoBlock; count > 0; diff --git a/src/coreclr/src/gcdump/i386/gcdumpx86.cpp b/src/coreclr/src/gcdump/i386/gcdumpx86.cpp index 0d221e1918db4..92b64430aece9 100644 --- a/src/coreclr/src/gcdump/i386/gcdumpx86.cpp +++ b/src/coreclr/src/gcdump/i386/gcdumpx86.cpp @@ -61,10 +61,10 @@ const char * CalleeSavedRegName(unsigned reg) /*****************************************************************************/ -unsigned GCDump::DumpInfoHdr (PTR_CBYTE gcInfoBlock, - InfoHdr* header, - unsigned * methodSize, - bool verifyGCTables) +size_t GCDump::DumpInfoHdr (PTR_CBYTE gcInfoBlock, + InfoHdr* header, + unsigned * methodSize, + bool verifyGCTables) { unsigned count; PTR_CBYTE table = gcInfoBlock; @@ -185,11 +185,11 @@ unsigned GCDump::DumpInfoHdr (PTR_CBYTE gcInfoBlock, } { - unsigned cur = 0; - unsigned last = table-bp; + size_t cur = 0; + size_t last = table-bp; while (cur < last) { - unsigned amount = last - cur; + size_t amount = last - cur; if (amount>5) amount = 5; diff --git a/src/coreclr/src/gcinfo/CMakeLists.txt b/src/coreclr/src/gcinfo/CMakeLists.txt index f40ff3deb83a0..895ad0c0c98ee 100644 --- a/src/coreclr/src/gcinfo/CMakeLists.txt +++ b/src/coreclr/src/gcinfo/CMakeLists.txt @@ -1,22 +1,29 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) -set( GCINFO_SOURCES +set( GCINFO_ALLARCH_SOURCES arraylist.cpp gcinfoencoder.cpp simplerhash.cpp ) +set( GCINFO_I386_SOURCES + ../gcdump/gcdump.cpp + ../gcdump/i386/gcdumpx86.cpp +) + +convert_to_absolute_path(GCINFO_ALLARCH_SOURCES ${GCINFO_ALLARCH_SOURCES}) +convert_to_absolute_path(GCINFO_I386_SOURCES ${GCINFO_I386_SOURCES}) +set( GCINFO_SOURCES + ${GCINFO_ALLARCH_SOURCES} + ) if(CLR_CMAKE_TARGET_ARCH_I386) list(APPEND GCINFO_SOURCES - ../gcdump/gcdump.cpp - ../gcdump/${ARCH_SOURCES_DIR}/gcdumpx86.cpp + ${GCINFO_I386_SOURCES} ) endif(CLR_CMAKE_TARGET_ARCH_I386) -convert_to_absolute_path(GCINFO_SOURCES ${GCINFO_SOURCES}) - add_library_clr(gcinfo_obj OBJECT ${GCINFO_SOURCES} @@ -32,21 +39,54 @@ add_library_clr(gcinfo_crossgen set_target_properties(gcinfo_crossgen PROPERTIES CROSSGEN_COMPONENT TRUE) +_install (FILES gcinfoencoder.cpp + DESTINATION gcinfo) -if (CLR_CMAKE_HOST_ARCH_I386) - # On x86, build RyuJIT/ARM32 cross-compiling altjit. - add_subdirectory(gcinfo_arm) -endif () +function(create_gcinfo_lib) -if (CLR_CMAKE_HOST_ARCH_I386 AND CLR_CMAKE_TARGET_WIN32) - # On x86, build Linux x86 cross-compiling altjit. - add_subdirectory(gcinfo_linuxx86) -endif () + set(oneValueArgs TARGET OS ARCH) + cmake_parse_arguments(TARGETDETAILS "${options}" "${oneValueArgs}" "" ${ARGN}) -if (CLR_CMAKE_HOST_ARCH_AMD64) - # On amd64, build RyuJIT/ARM64 cross-compiling altjit. - add_subdirectory(gcinfo_arm64) -endif () + set( GCINFO_SOURCES + ${GCINFO_ALLARCH_SOURCES} + ) -_install (FILES gcinfoencoder.cpp - DESTINATION gcinfo) + if(TARGETDETAILS_ARCH STREQUAL "x86") + list(APPEND GCINFO_SOURCES + ${GCINFO_I386_SOURCES} + ) + endif(TARGETDETAILS_ARCH STREQUAL "x86") + + add_library_clr("${TARGETDETAILS_TARGET}" + STATIC + ${GCINFO_SOURCES} + ) + + set_target_definitions_to_custom_os_and_arch(${ARGN}) +endfunction() + +if (CLR_CMAKE_TARGET_UNIX) +set(TARGET_OS_NAME unix) +else() +set(TARGET_OS_NAME win) +endif() + +if (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD) + if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) + create_gcinfo_lib(TARGET gcinfo_unix_arm64 OS unix ARCH arm64) + create_gcinfo_lib(TARGET gcinfo_unix_x64 OS unix ARCH x64) + create_gcinfo_lib(TARGET gcinfo_win_arm64 OS win ARCH arm64) + create_gcinfo_lib(TARGET gcinfo_win_x64 OS win ARCH x64) + endif (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) + + create_gcinfo_lib(TARGET gcinfo_unix_arm OS unix ARCH arm) + create_gcinfo_lib(TARGET gcinfo_win_arm OS win ARCH arm) + create_gcinfo_lib(TARGET gcinfo_win_x86 OS win ARCH x86) +else() + create_gcinfo_lib(TARGET gcinfo_${TARGET_OS_NAME}_${ARCH_TARGET_NAME} OS ${TARGET_OS_NAME} ARCH ${ARCH_TARGET_NAME}) + + if (CLR_CMAKE_HOST_ARCH_I386 AND NOT ((TARGET_OS_NAME STREQUAL unix) AND (ARCH_TARGET_NAME STREQUAL "arm"))) + # On x86, build gcinfo for RyuJIT/ARM32 cross-compiling altjit for ARM_SOFTFP (armel). + create_gcinfo_lib(TARGET gcinfo_unix_arm OS unix ARCH arm) + endif() +endif (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD) diff --git a/src/coreclr/src/gcinfo/gcinfo_arm/CMakeLists.txt b/src/coreclr/src/gcinfo/gcinfo_arm/CMakeLists.txt deleted file mode 100644 index 3dd25ee3057c4..0000000000000 --- a/src/coreclr/src/gcinfo/gcinfo_arm/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -remove_definitions(-DTARGET_X86) -add_definitions(-DTARGET_ARM) - -add_library_clr(gcinfo_arm - STATIC - ${GCINFO_SOURCES} -) diff --git a/src/coreclr/src/gcinfo/gcinfo_arm64/CMakeLists.txt b/src/coreclr/src/gcinfo/gcinfo_arm64/CMakeLists.txt deleted file mode 100644 index 11069b52f2f22..0000000000000 --- a/src/coreclr/src/gcinfo/gcinfo_arm64/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -remove_definitions(-DTARGET_AMD64) -add_definitions(-DTARGET_ARM64) - -add_library_clr(gcinfo_arm64 - STATIC - ${GCINFO_SOURCES} -) diff --git a/src/coreclr/src/gcinfo/gcinfo_linuxx86/CMakeLists.txt b/src/coreclr/src/gcinfo/gcinfo_linuxx86/CMakeLists.txt deleted file mode 100644 index 149f493e22f6f..0000000000000 --- a/src/coreclr/src/gcinfo/gcinfo_linuxx86/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -add_definitions(-DUNIX_X86_ABI) - -add_library_clr(gcinfo_linuxx86 - STATIC - ${GCINFO_SOURCES} -) diff --git a/src/coreclr/src/inc/clr_std/type_traits b/src/coreclr/src/inc/clr_std/type_traits index 47d4f241639c7..1650b2bc7cbb9 100644 --- a/src/coreclr/src/inc/clr_std/type_traits +++ b/src/coreclr/src/inc/clr_std/type_traits @@ -198,7 +198,7 @@ namespace std typedef unsigned int type; }; -#ifndef TARGET_UNIX +#ifndef HOST_UNIX template<> struct make_unsigned @@ -206,7 +206,7 @@ namespace std typedef unsigned long type; }; -#endif // !TARGET_UNIX +#endif // !HOST_UNIX template<> struct make_unsigned<__int64> @@ -233,7 +233,7 @@ namespace std typedef signed int type; }; -#ifndef TARGET_UNIX +#ifndef HOST_UNIX template<> struct make_signed @@ -241,7 +241,7 @@ namespace std typedef signed long type; }; -#endif // !TARGET_UNIX +#endif // !HOST_UNIX template<> struct make_signed @@ -358,7 +358,7 @@ namespace std // On Unix 'long' is a 64-bit type (same as __int64) and the following two definitions // conflict with _Is_integral and _Is_integral. -#ifndef TARGET_UNIX +#ifndef HOST_UNIX template<> struct _Is_integral : true_type @@ -370,7 +370,7 @@ namespace std : true_type { // determine whether _Ty is integral }; -#endif /* TARGET_UNIX */ +#endif /* HOST_UNIX */ #if _HAS_CHAR16_T_LANGUAGE_SUPPORT template<> @@ -426,7 +426,7 @@ namespace std // In PAL, we define long as int and so this becomes int double, // which is a nonsense -#ifndef TARGET_UNIX +#ifndef HOST_UNIX template<> struct _Is_floating_point : true_type diff --git a/src/coreclr/src/inc/clrnt.h b/src/coreclr/src/inc/clrnt.h index 1a1999938ead5..a833da67bcc9b 100644 --- a/src/coreclr/src/inc/clrnt.h +++ b/src/coreclr/src/inc/clrnt.h @@ -837,6 +837,7 @@ RtlVirtualUnwind_Unsafe( // // x86 ABI does not define RUNTIME_FUNCTION. Define our own to allow unification between x86 and other platforms. // +#ifdef HOST_X86 typedef struct _RUNTIME_FUNCTION { DWORD BeginAddress; DWORD UnwindData; @@ -845,7 +846,7 @@ typedef struct _RUNTIME_FUNCTION { typedef struct _DISPATCHER_CONTEXT { _EXCEPTION_REGISTRATION_RECORD* RegistrationPointer; } DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT; - +#endif // HOST_X86 #endif // !TARGET_UNIX #define RUNTIME_FUNCTION__BeginAddress(prf) (prf)->BeginAddress @@ -872,6 +873,7 @@ RtlpGetFunctionEndAddress ( #define RUNTIME_FUNCTION__GetUnwindInfoAddress(prf) (prf)->UnwindData #define RUNTIME_FUNCTION__SetUnwindInfoAddress(prf, addr) do { (prf)->UnwindData = (addr); } while(0) +#ifdef HOST_X86 EXTERN_C NTSYSAPI PEXCEPTION_ROUTINE @@ -886,6 +888,7 @@ RtlVirtualUnwind ( __out PDWORD EstablisherFrame, __inout_opt PT_KNONVOLATILE_CONTEXT_POINTERS ContextPointers ); +#endif // HOST_X86 #endif // FEATURE_EH_FUNCLETS #endif // TARGET_X86 @@ -933,7 +936,7 @@ typedef struct _UNWIND_INFO { // dummy } UNWIND_INFO, *PUNWIND_INFO; -#if defined(TARGET_UNIX) || defined(HOST_X86) +#if defined(HOST_UNIX) || defined(HOST_X86) EXTERN_C NTSYSAPI @@ -949,7 +952,7 @@ RtlVirtualUnwind ( __out PDWORD EstablisherFrame, __inout_opt PT_KNONVOLATILE_CONTEXT_POINTERS ContextPointers ); -#endif // TARGET_UNIX || HOST_X86 +#endif // HOST_UNIX || HOST_X86 #define UNW_FLAG_NHANDLER 0x0 diff --git a/src/coreclr/src/inc/corcompile.h b/src/coreclr/src/inc/corcompile.h index 82308d7b899ac..38e837a4ad532 100644 --- a/src/coreclr/src/inc/corcompile.h +++ b/src/coreclr/src/inc/corcompile.h @@ -59,7 +59,14 @@ typedef DPTR(RUNTIME_FUNCTION) PTR_RUNTIME_FUNCTION; // Chained unwind info. Used for cold methods. +#ifdef HOST_X86 #define RUNTIME_FUNCTION_INDIRECT 0x80000000 +#else +// If not hosted on X86, undefine RUNTIME_FUNCTION_INDIRECT as it likely isn't correct +#ifdef RUNTIME_FUNCTION_INDIRECT +#undef RUNTIME_FUNCTION_INDIRECT +#endif // RUNTIME_FUNCTION_INDIRECT +#endif // HOST_X86 #endif // TARGET_X86 diff --git a/src/coreclr/src/inc/corhlprpriv.h b/src/coreclr/src/inc/corhlprpriv.h index 056bca27f4429..03ded5be28762 100644 --- a/src/coreclr/src/inc/corhlprpriv.h +++ b/src/coreclr/src/inc/corhlprpriv.h @@ -13,7 +13,7 @@ #include "corhlpr.h" #include "fstring.h" -#if defined(_MSC_VER) && defined(TARGET_X86) +#if defined(_MSC_VER) && defined(HOST_X86) #pragma optimize("y", on) // If routines don't get inlined, don't pay the EBP frame penalty #endif diff --git a/src/coreclr/src/inc/crosscomp.h b/src/coreclr/src/inc/crosscomp.h index 5b6e932fd24f6..ce494af3700d1 100644 --- a/src/coreclr/src/inc/crosscomp.h +++ b/src/coreclr/src/inc/crosscomp.h @@ -43,10 +43,12 @@ #define CONTEXT_UNWOUND_TO_CALL 0x20000000 +#if !defined(HOST_ARM64) typedef struct _NEON128 { ULONGLONG Low; LONGLONG High; } NEON128, *PNEON128; +#endif // !defined(HOST_ARM64) typedef struct DECLSPEC_ALIGN(8) _T_CONTEXT { // @@ -152,13 +154,14 @@ typedef struct _T_KNONVOLATILE_CONTEXT_POINTERS { // // Define dynamic function table entry. // - +#if defined(HOST_X86) typedef PT_RUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK) ( IN DWORD64 ControlPc, IN PVOID Context ); +#endif // defined(HOST_X86) typedef struct _T_DISPATCHER_CONTEXT { ULONG ControlPc; diff --git a/src/coreclr/src/inc/gcdecoder.cpp b/src/coreclr/src/inc/gcdecoder.cpp index 765cd098aedf3..8b3d9cabc2825 100644 --- a/src/coreclr/src/inc/gcdecoder.cpp +++ b/src/coreclr/src/inc/gcdecoder.cpp @@ -87,8 +87,10 @@ size_t FASTCALL decodeSigned(PTR_CBYTE src, int* val) /*****************************************************************************/ #if defined(_MSC_VER) +#ifdef HOST_X86 #pragma optimize("tgy", on) #endif +#endif PTR_CBYTE FASTCALL decodeHeader(PTR_CBYTE table, UINT32 version, InfoHdr* header) { diff --git a/src/coreclr/src/inc/gcdump.h b/src/coreclr/src/inc/gcdump.h index 49bc61e5bff2f..7c7f559a5ac96 100644 --- a/src/coreclr/src/inc/gcdump.h +++ b/src/coreclr/src/inc/gcdump.h @@ -44,10 +44,10 @@ class GCDump * Return value : Size in bytes of the header encoding */ - unsigned FASTCALL DumpInfoHdr (PTR_CBYTE gcInfoBlock, - InfoHdr * header, /* OUT */ - unsigned * methodSize, /* OUT */ - bool verifyGCTables = false); + size_t FASTCALL DumpInfoHdr (PTR_CBYTE gcInfoBlock, + InfoHdr * header, /* OUT */ + unsigned * methodSize, /* OUT */ + bool verifyGCTables = false); #endif /*------------------------------------------------------------------------- @@ -90,7 +90,7 @@ class GCDump /* Helper methods */ PTR_CBYTE DumpEncoding(PTR_CBYTE gcInfoBlock, - int cDumpBytes); + size_t cDumpBytes); void DumpOffset (unsigned o); void DumpOffsetEx(unsigned o); diff --git a/src/coreclr/src/inc/longfilepathwrappers.h b/src/coreclr/src/inc/longfilepathwrappers.h index c4c7700d704b3..76aec1a86594a 100644 --- a/src/coreclr/src/inc/longfilepathwrappers.h +++ b/src/coreclr/src/inc/longfilepathwrappers.h @@ -49,7 +49,7 @@ FindFirstFileExWrapper( _In_ DWORD dwAdditionalFlags ); -#ifndef TARGET_UNIX +#ifndef HOST_UNIX BOOL CopyFileExWrapper( _In_ LPCWSTR lpExistingFileName, @@ -60,7 +60,7 @@ CopyFileExWrapper( _Inout_opt_ LPBOOL pbCancel, _In_ DWORD dwCopyFlags ); -#endif //TARGET_UNIX +#endif //HOST_UNIX BOOL MoveFileExWrapper( diff --git a/src/coreclr/src/inc/stacktrace.h b/src/coreclr/src/inc/stacktrace.h index 65f4d4cc481f1..445937308e19a 100644 --- a/src/coreclr/src/inc/stacktrace.h +++ b/src/coreclr/src/inc/stacktrace.h @@ -73,7 +73,7 @@ void GetStringFromStackLevels(UINT ifrStart, UINT cfrTotal, __out_ecount(cchMaxA ******************************************************************** robch */ void GetStringFromAddr(DWORD_PTR dwAddr, __out_ecount(cchMaxAssertStackLevelStringLen) LPSTR szString); -#if defined(TARGET_X86) && !defined(TARGET_UNIX) +#if defined(HOST_X86) && !defined(TARGET_UNIX) /**************************************************************************** * ClrCaptureContext * *-------------------* @@ -82,9 +82,9 @@ void GetStringFromAddr(DWORD_PTR dwAddr, __out_ecount(cchMaxAssertStackLevelStri * support this, so we need it for CoreCLR 4, if we require Win2K support ****************************************************************************/ extern "C" void __stdcall ClrCaptureContext(__out PCONTEXT ctx); -#else // TARGET_X86 && !TARGET_UNIX +#else // HOST_X86 && !TARGET_UNIX #define ClrCaptureContext RtlCaptureContext -#endif // TARGET_X86 && !TARGET_UNIX +#endif // HOST_X86 && !TARGET_UNIX #endif diff --git a/src/coreclr/src/jit/CMakeLists.txt b/src/coreclr/src/jit/CMakeLists.txt index 3f695823be4f6..d26d81c420547 100644 --- a/src/coreclr/src/jit/CMakeLists.txt +++ b/src/coreclr/src/jit/CMakeLists.txt @@ -10,9 +10,54 @@ endif() add_compile_options($<$:-W4>) +function(create_standalone_jit) + + set(oneValueArgs TARGET OS ARCH ADDITIONAL_DESTINATION) + set(options NOALTJIT) + cmake_parse_arguments(TARGETDETAILS "${options}" "${oneValueArgs}" "" ${ARGN}) + + set(JIT_ARCH_LINK_LIBRARIES gcinfo_${TARGETDETAILS_OS}_${TARGETDETAILS_ARCH}) + + if(TARGETDETAILS_ARCH STREQUAL "x64") + set(JIT_ARCH_SOURCES ${JIT_AMD64_SOURCES}) + elseif(TARGETDETAILS_ARCH STREQUAL "arm") + set(JIT_ARCH_SOURCES ${JIT_ARM_SOURCES}) + elseif(TARGETDETAILS_ARCH STREQUAL "x86") + set(JIT_ARCH_SOURCES ${JIT_I386_SOURCES}) + elseif(TARGETDETAILS_ARCH STREQUAL "arm64") + set(JIT_ARCH_SOURCES ${JIT_ARM64_SOURCES}) + else() + clr_unknown_arch() + endif() + + if (TARGETDETAILS_ADDITIONAL_DESTINATION STREQUAL "") + add_jit(${TARGETDETAILS_TARGET}) + else() + add_jit(${TARGETDETAILS_TARGET} ADDITIONAL_DESTINATION "${TARGETDETAILS_ADDITIONAL_DESTINATION}") + endif() + + set_target_definitions_to_custom_os_and_arch(${ARGN}) + set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_FEATURE_MERGE_JIT_AND_ENGINE TRUE) + + if (NOT TARGETDETAILS_NOALTJIT) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE ALT_JIT) + endif (NOT TARGETDETAILS_NOALTJIT) + + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_NO_HOST) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE SELF_NO_HOST) + if(FEATURE_READYTORUN) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_READYTORUN_COMPILER) + endif(FEATURE_READYTORUN) + + if ((TARGETDETAILS_ARCH STREQUAL "x64") OR (TARGETDETAILS_ARCH STREQUAL "arm64") OR ((TARGETDETAILS_ARCH STREQUAL "x86") AND NOT (TARGETDETAILS_OS STREQUAL "unix"))) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_SIMD) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_HW_INTRINSICS) + endif () +endfunction() + if (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR (CLR_CMAKE_TARGET_ARCH_I386 AND NOT CLR_CMAKE_HOST_UNIX)) - add_definitions(-DFEATURE_SIMD) - add_definitions(-DFEATURE_HW_INTRINSICS) + add_compile_definitions($<$>>:FEATURE_SIMD>) + add_compile_definitions($<$>>:FEATURE_HW_INTRINSICS>) endif () # JIT_BUILD disables certain PAL_TRY debugging features @@ -368,9 +413,6 @@ endif(CLR_CMAKE_HOST_UNIX) # Shared function for generating JIT # optional arguments: ADDITIONAL_DESTINATION path function(add_jit jitName) - if(CLR_CMAKE_TARGET_WIN32) - add_definitions(-DFX_VER_INTERNALNAME_STR=${jitName}.dll) - endif(CLR_CMAKE_TARGET_WIN32) set_source_files_properties(${JIT_EXPORTS_FILE} PROPERTIES GENERATED TRUE) @@ -382,6 +424,10 @@ function(add_jit jitName) ${JIT_DLL_MAIN_FILE} ) + if(CLR_CMAKE_TARGET_WIN32) + target_compile_definitions(${jitName} PRIVATE FX_VER_INTERNALNAME_STR=${jitName}.dll) + endif(CLR_CMAKE_TARGET_WIN32) + target_precompile_header(TARGET ${jitName} HEADER jitpch.h ADDITIONAL_INCLUDE_DIRECTORIES ${JIT_SOURCE_DIR}) add_dependencies(${jitName} jit_exports) @@ -407,22 +453,37 @@ endif (FEATURE_MERGE_JIT_AND_ENGINE) # Creates a static library "clrjit_static" to link into the VM. add_subdirectory(static) -add_subdirectory(standalone) +if (CLR_CMAKE_TARGET_UNIX) +set(TARGET_OS_NAME unix) +else() +set(TARGET_OS_NAME win) +endif() + +create_standalone_jit(TARGET clrjit OS ${TARGET_OS_NAME} ARCH ${ARCH_TARGET_NAME} NOALTJIT ADDITIONAL_DESTINATION sharedFramework) + +# Enable profile guided optimization +add_pgo(clrjit) -if (CLR_CMAKE_HOST_ARCH_I386 OR CLR_CMAKE_HOST_ARCH_AMD64) - # On x86, build RyuJIT/ARM32 cross-compiling altjit. - # On amd64, build RyuJIT/ARM64 cross-compiling altjit. - add_subdirectory(protononjit) -endif () if (CLR_CMAKE_HOST_ARCH_I386) # On x86, build RyuJIT/ARM32 cross-compiling altjit for ARM_SOFTFP (armel). - add_subdirectory(armelnonjit) + create_standalone_jit(TARGET clrjit_unix_armel_${ARCH_HOST_NAME} OS unix ARCH arm) + target_compile_definitions(clrjit_unix_armel_${ARCH_HOST_NAME} PRIVATE ARM_SOFTFP) endif () -if ((CLR_CMAKE_HOST_ARCH_I386 OR CLR_CMAKE_HOST_ARCH_AMD64) AND CLR_CMAKE_TARGET_WIN32) - # On Windows, build altjit that targets the Linux ABI: - # On x86, build Linux/x86 altjit. This enables UNIX_X86_ABI. - # On amd64, build Linux/AMD64 altjit. This enables UNIX_AMD64_ABI. - add_subdirectory(linuxnonjit) -endif () +if (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD) + if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) + create_standalone_jit(TARGET clrjit_unix_arm64_${ARCH_HOST_NAME} OS unix ARCH arm64) + create_standalone_jit(TARGET clrjit_unix_x64_${ARCH_HOST_NAME} OS unix ARCH x64) + create_standalone_jit(TARGET clrjit_win_arm64_${ARCH_HOST_NAME} OS win ARCH arm64) + create_standalone_jit(TARGET clrjit_win_x64_${ARCH_HOST_NAME} OS win ARCH x64) + endif (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) + + create_standalone_jit(TARGET clrjit_unix_arm_${ARCH_HOST_NAME} OS unix ARCH arm) + create_standalone_jit(TARGET clrjit_win_arm_${ARCH_HOST_NAME} OS win ARCH arm) + create_standalone_jit(TARGET clrjit_win_x86_${ARCH_HOST_NAME} OS win ARCH x86) +else() + if (CLR_CMAKE_TARGET_UNIX) + create_standalone_jit(TARGET clrjit_unix_${ARCH_TARGET_NAME}_${ARCH_HOST_NAME} OS unix ARCH ${ARCH_TARGET_NAME}) + endif(CLR_CMAKE_TARGET_UNIX) +endif (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD) \ No newline at end of file diff --git a/src/coreclr/src/jit/armelnonjit/CMakeLists.txt b/src/coreclr/src/jit/armelnonjit/CMakeLists.txt deleted file mode 100644 index 9a9995a7af724..0000000000000 --- a/src/coreclr/src/jit/armelnonjit/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -project(armelnonjit) - -add_definitions(-DALT_JIT) -add_definitions(-DFEATURE_NO_HOST) -add_definitions(-DSELF_NO_HOST) -remove_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE) - -remove_definitions(-DFEATURE_SIMD) -remove_definitions(-DFEATURE_HW_INTRINSICS) - -if(FEATURE_READYTORUN) - add_definitions(-DFEATURE_READYTORUN_COMPILER) -endif(FEATURE_READYTORUN) - -if (CLR_CMAKE_HOST_ARCH_I386) - remove_definitions(-DTARGET_X86) - add_definitions(-DTARGET_ARM) - add_definitions(-DARM_SOFTFP) - add_definitions(-DFEATURE_EH_FUNCLETS) - set(JIT_ARCH_SOURCES ${JIT_ARM_SOURCES}) - set(JIT_ARCH_LINK_LIBRARIES gcinfo_arm) -elseif(CLR_CMAKE_HOST_ARCH_AMD64) - remove_definitions(-DTARGET_AMD64) - add_definitions(-DTARGET_ARM64) - set(JIT_ARCH_SOURCES ${JIT_ARM64_SOURCES}) - set(JIT_ARCH_LINK_LIBRARIES gcinfo_arm64) -else() - clr_unknown_arch() -endif() - -if (NOT CLR_CMAKE_HOST_WIN32) - if (CLR_CMAKE_HOST_ARCH_I386) - remove_definitions(-DUNIX_X86_ABI) - elseif(CLR_CMAKE_HOST_ARCH_AMD64) - remove_definitions(-DUNIX_AMD64_ABI) - else() - clr_unknown_arch() - endif() -endif(NOT CLR_CMAKE_HOST_WIN32) - -add_jit(armelnonjit) diff --git a/src/coreclr/src/jit/armelnonjit/SOURCES b/src/coreclr/src/jit/armelnonjit/SOURCES deleted file mode 100644 index 0949770918033..0000000000000 --- a/src/coreclr/src/jit/armelnonjit/SOURCES +++ /dev/null @@ -1,9 +0,0 @@ - -# -# DO NOT EDIT THIS FILE!!! Modify the project file in this directory -# This file merely allows the MSBuild project file in this directory to be integrated with Build.Exe -# -TARGETTYPE=NOTARGET -CLR_TARGETTYPE=DLL -MSBuildProjectFile=armelnonjit.nativeproj -SOURCES= diff --git a/src/coreclr/src/jit/armelnonjit/armelnonjit.def b/src/coreclr/src/jit/armelnonjit/armelnonjit.def deleted file mode 100644 index 0afb54dca77de..0000000000000 --- a/src/coreclr/src/jit/armelnonjit/armelnonjit.def +++ /dev/null @@ -1,5 +0,0 @@ -; Licensed to the .NET Foundation under one or more agreements. -; The .NET Foundation licenses this file to you under the MIT license. -EXPORTS - getJit - jitStartup diff --git a/src/coreclr/src/jit/armelnonjit/makefile b/src/coreclr/src/jit/armelnonjit/makefile deleted file mode 100644 index bf27e8c84b052..0000000000000 --- a/src/coreclr/src/jit/armelnonjit/makefile +++ /dev/null @@ -1,7 +0,0 @@ - -# -# DO NOT EDIT THIS FILE!!! Modify the project file in this directory -# This file merely allows the MSBuild project file in this directory to be integrated with Build.Exe -# - -!INCLUDE $(NTMAKEENV)\devdiv.def diff --git a/src/coreclr/src/jit/codegen.h b/src/coreclr/src/jit/codegen.h index e876b155ce354..6c244284aadf7 100644 --- a/src/coreclr/src/jit/codegen.h +++ b/src/coreclr/src/jit/codegen.h @@ -1393,8 +1393,8 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX emitAttr size, insFlags flags = INS_FLAGS_DONT_CARE); - void inst_IV(instruction ins, int val); - void inst_IV_handle(instruction ins, int val); + void inst_IV(instruction ins, cnsval_ssize_t val); + void inst_IV_handle(instruction ins, cnsval_ssize_t val); void inst_RV_IV( instruction ins, regNumber reg, target_ssize_t val, emitAttr size, insFlags flags = INS_FLAGS_DONT_CARE); diff --git a/src/coreclr/src/jit/codegenarm.cpp b/src/coreclr/src/jit/codegenarm.cpp index 2eaa80862396d..ccfda4a5c29af 100644 --- a/src/coreclr/src/jit/codegenarm.cpp +++ b/src/coreclr/src/jit/codegenarm.cpp @@ -61,7 +61,7 @@ bool CodeGen::genInstrWithConstant( { case INS_add: case INS_sub: - immFitsInIns = validImmForInstr(ins, imm, flags); + immFitsInIns = validImmForInstr(ins, (target_ssize_t)imm, flags); break; default: @@ -72,7 +72,7 @@ bool CodeGen::genInstrWithConstant( if (immFitsInIns) { // generate a single instruction that encodes the immediate directly - GetEmitter()->emitIns_R_R_I(ins, attr, reg1, reg2, imm); + GetEmitter()->emitIns_R_R_I(ins, attr, reg1, reg2, (target_ssize_t)imm); } else { diff --git a/src/coreclr/src/jit/codegenarmarch.cpp b/src/coreclr/src/jit/codegenarmarch.cpp index c1dcc7319afca..ef884c5e930f4 100644 --- a/src/coreclr/src/jit/codegenarmarch.cpp +++ b/src/coreclr/src/jit/codegenarmarch.cpp @@ -39,7 +39,7 @@ void CodeGen::genStackPointerConstantAdjustment(ssize_t spDelta) // function that does a probe, which will in turn call this function. assert((target_size_t)(-spDelta) <= compiler->eeGetPageSize()); - inst_RV_IV(INS_sub, REG_SPBASE, -spDelta, EA_PTRSIZE); + inst_RV_IV(INS_sub, REG_SPBASE, (target_ssize_t)-spDelta, EA_PTRSIZE); } //------------------------------------------------------------------------ diff --git a/src/coreclr/src/jit/codegenxarch.cpp b/src/coreclr/src/jit/codegenxarch.cpp index 88c021ac73d01..a46802d0537e7 100644 --- a/src/coreclr/src/jit/codegenxarch.cpp +++ b/src/coreclr/src/jit/codegenxarch.cpp @@ -1769,7 +1769,7 @@ void CodeGen::genCodeForTreeNode(GenTree* treeNode) // Have to clear the ShadowSP of the nesting level which encloses the finally. Generates: // mov dword ptr [ebp-0xC], 0 // for some slot of the ShadowSP local var - unsigned finallyNesting; + size_t finallyNesting; finallyNesting = treeNode->AsVal()->gtVal1; noway_assert(treeNode->AsVal()->gtVal1 < compiler->compHndBBtabCount); noway_assert(finallyNesting < compiler->compHndBBtabCount); @@ -1781,9 +1781,10 @@ void CodeGen::genCodeForTreeNode(GenTree* treeNode) filterEndOffsetSlotOffs = (unsigned)(compiler->lvaLclSize(compiler->lvaShadowSPslotsVar) - TARGET_POINTER_SIZE); - unsigned curNestingSlotOffs; + size_t curNestingSlotOffs; curNestingSlotOffs = filterEndOffsetSlotOffs - ((finallyNesting + 1) * TARGET_POINTER_SIZE); - GetEmitter()->emitIns_S_I(INS_mov, EA_PTRSIZE, compiler->lvaShadowSPslotsVar, curNestingSlotOffs, 0); + GetEmitter()->emitIns_S_I(INS_mov, EA_PTRSIZE, compiler->lvaShadowSPslotsVar, (unsigned)curNestingSlotOffs, + 0); break; #endif // !FEATURE_EH_FUNCLETS @@ -2106,13 +2107,13 @@ void CodeGen::genStackPointerConstantAdjustment(ssize_t spDelta, regNumber regTm // creating a way to temporarily turn off the emitter's tracking of ESP, maybe marking instrDescs as "don't // track". inst_RV_RV(INS_mov, regTmp, REG_SPBASE, TYP_I_IMPL); - inst_RV_IV(INS_sub, regTmp, -spDelta, EA_PTRSIZE); + inst_RV_IV(INS_sub, regTmp, (target_ssize_t)-spDelta, EA_PTRSIZE); inst_RV_RV(INS_mov, REG_SPBASE, regTmp, TYP_I_IMPL); } else #endif // TARGET_X86 { - inst_RV_IV(INS_sub, REG_SPBASE, -spDelta, EA_PTRSIZE); + inst_RV_IV(INS_sub, REG_SPBASE, (target_ssize_t)-spDelta, EA_PTRSIZE); } } @@ -4156,7 +4157,7 @@ void CodeGen::genCodeForShiftLong(GenTree* tree) assert(shiftBy->isContainedIntOrIImmed()); - unsigned int count = shiftBy->AsIntConCommon()->IconValue(); + unsigned int count = (unsigned int)shiftBy->AsIntConCommon()->IconValue(); regNumber regResult = (oper == GT_LSH_HI) ? regHi : regLo; @@ -5014,7 +5015,7 @@ void CodeGen::genCallInstruction(GenTreeCall* call) #if defined(TARGET_X86) || defined(UNIX_AMD64_ABI) // The call will pop its arguments. // for each putarg_stk: - ssize_t stackArgBytes = 0; + target_ssize_t stackArgBytes = 0; for (GenTreeCall::Use& use : call->Args()) { GenTree* arg = use.GetNode(); @@ -5160,7 +5161,7 @@ void CodeGen::genCallInstruction(GenTreeCall* call) // adjust its stack level accordingly. // If the caller needs to explicitly pop its arguments, we must pass a negative value, and then do the // pop when we're done. - ssize_t argSizeForEmitter = stackArgBytes; + target_ssize_t argSizeForEmitter = stackArgBytes; if (fCallerPop) { argSizeForEmitter = -stackArgBytes; @@ -8120,13 +8121,13 @@ void* CodeGen::genCreateAndStoreGCInfoJIT32(unsigned codeSize, if (0) { - BYTE* temp = (BYTE*)infoPtr; - unsigned size = compiler->compInfoBlkAddr - temp; - BYTE* ptab = temp + headerSize; + BYTE* temp = (BYTE*)infoPtr; + size_t size = compiler->compInfoBlkAddr - temp; + BYTE* ptab = temp + headerSize; noway_assert(size == headerSize + ptrMapSize); - printf("Method info block - header [%u bytes]:", headerSize); + printf("Method info block - header [%zu bytes]:", headerSize); for (unsigned i = 0; i < size; i++) { @@ -8154,7 +8155,7 @@ void* CodeGen::genCreateAndStoreGCInfoJIT32(unsigned codeSize, if (compiler->opts.dspGCtbls) { const BYTE* base = (BYTE*)infoPtr; - unsigned size; + size_t size; unsigned methodSize; InfoHdr dumpHeader; diff --git a/src/coreclr/src/jit/compiler.cpp b/src/coreclr/src/jit/compiler.cpp index 214fc3a9d5f20..4211aace8c727 100644 --- a/src/coreclr/src/jit/compiler.cpp +++ b/src/coreclr/src/jit/compiler.cpp @@ -5304,9 +5304,9 @@ int Compiler::compCompile(CORINFO_MODULE_HANDLE classPtr, compJitFuncInfoFile = _wfopen(compJitFuncInfoFilename, W("a")); if (compJitFuncInfoFile == nullptr) { -#if defined(DEBUG) && !defined(TARGET_UNIX) // no 'perror' in the PAL +#if defined(DEBUG) && !defined(HOST_UNIX) // no 'perror' in the PAL perror("Failed to open JitFuncInfoLogFile"); -#endif // defined(DEBUG) && !defined(TARGET_UNIX) +#endif // defined(DEBUG) && !defined(HOST_UNIX) } } } diff --git a/src/coreclr/src/jit/ee_il_dll.cpp b/src/coreclr/src/jit/ee_il_dll.cpp index bfd80ffb12000..9926c99881713 100644 --- a/src/coreclr/src/jit/ee_il_dll.cpp +++ b/src/coreclr/src/jit/ee_il_dll.cpp @@ -1317,7 +1317,7 @@ const char* Compiler::eeGetClassName(CORINFO_CLASS_HANDLE clsHnd) const WCHAR* Compiler::eeGetCPString(size_t strHandle) { -#ifdef TARGET_UNIX +#ifdef HOST_UNIX return nullptr; #else char buff[512 + sizeof(CORINFO_String)]; @@ -1341,7 +1341,7 @@ const WCHAR* Compiler::eeGetCPString(size_t strHandle) } return (asString->chars); -#endif // TARGET_UNIX +#endif // HOST_UNIX } #endif // DEBUG diff --git a/src/coreclr/src/jit/emit.cpp b/src/coreclr/src/jit/emit.cpp index 7a957b17f91ed..cfde2d0ca9614 100644 --- a/src/coreclr/src/jit/emit.cpp +++ b/src/coreclr/src/jit/emit.cpp @@ -5648,7 +5648,7 @@ void emitter::emitOutputDataSec(dataSecDsc* sec, BYTE* dst) #ifdef TARGET_ARM target = (BYTE*)((size_t)target | 1); // Or in thumb bit #endif - bDst[i] = (target_size_t)target; + bDst[i] = (target_size_t)(size_t)target; if (emitComp->opts.compReloc) { emitRecordRelocation(&(bDst[i]), target, IMAGE_REL_BASED_HIGHLOW); @@ -5779,7 +5779,7 @@ void emitter::emitDispDataSec(dataSecDsc* section) } else { - printf("dd\t%08Xh", reinterpret_cast(emitOffsetToPtr(ig->igOffs))); + printf("dd\t%08Xh", (uint32_t)(size_t)emitOffsetToPtr(ig->igOffs)); } #else // TARGET_64BIT // We have a 64-BIT target @@ -6422,7 +6422,11 @@ unsigned char emitter::emitOutputLong(BYTE* dst, ssize_t val) unsigned char emitter::emitOutputSizeT(BYTE* dst, ssize_t val) { +#if !defined(TARGET_64BIT) + MISALIGNED_WR_I4(dst, (int)val); +#else MISALIGNED_WR_ST(dst, val); +#endif #ifdef DEBUG if (emitComp->opts.dspEmit) @@ -6450,6 +6454,7 @@ unsigned char emitter::emitOutputSizeT(BYTE* dst, ssize_t val) // Same as wrapped function. // +#if !defined(HOST_64BIT) #if defined(TARGET_X86) unsigned char emitter::emitOutputByte(BYTE* dst, size_t val) { @@ -6491,6 +6496,7 @@ unsigned char emitter::emitOutputSizeT(BYTE* dst, unsigned __int64 val) return emitOutputSizeT(dst, (ssize_t)val); } #endif // defined(TARGET_X86) +#endif // !defined(HOST_64BIT) /***************************************************************************** * @@ -7022,7 +7028,7 @@ void emitter::emitNxtIG(bool extend) * emitGetInsSC: Get the instruction's constant value. */ -target_ssize_t emitter::emitGetInsSC(instrDesc* id) +cnsval_ssize_t emitter::emitGetInsSC(instrDesc* id) { #ifdef TARGET_ARM // should it be TARGET_ARMARCH? Why do we need this? Note that on ARM64 we store scaled immediates // for some formats diff --git a/src/coreclr/src/jit/emit.h b/src/coreclr/src/jit/emit.h index e9b428928299a..20398d5d68ccb 100644 --- a/src/coreclr/src/jit/emit.h +++ b/src/coreclr/src/jit/emit.h @@ -1370,7 +1370,7 @@ class emitter struct instrDescCns : instrDesc // large const { - target_ssize_t idcCnsVal; + cnsval_ssize_t idcCnsVal; }; struct instrDescDsp : instrDesc // large displacement @@ -1466,7 +1466,7 @@ class emitter #endif // TARGET_XARCH - target_ssize_t emitGetInsSC(instrDesc* id); + cnsval_ssize_t emitGetInsSC(instrDesc* id); unsigned emitInsCount; /************************************************************************/ @@ -1645,6 +1645,7 @@ class emitter unsigned char emitOutputLong(BYTE* dst, ssize_t val); unsigned char emitOutputSizeT(BYTE* dst, ssize_t val); +#if !defined(HOST_64BIT) #if defined(TARGET_X86) unsigned char emitOutputByte(BYTE* dst, size_t val); unsigned char emitOutputWord(BYTE* dst, size_t val); @@ -1656,6 +1657,7 @@ class emitter unsigned char emitOutputLong(BYTE* dst, unsigned __int64 val); unsigned char emitOutputSizeT(BYTE* dst, unsigned __int64 val); #endif // defined(TARGET_X86) +#endif // !defined(HOST_64BIT) size_t emitIssue1Instr(insGroup* ig, instrDesc* id, BYTE** dp); size_t emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp); @@ -1909,7 +1911,7 @@ class emitter return (instrDescCns*)emitAllocAnyInstr(sizeof(instrDescCns), attr); } - instrDescCns* emitAllocInstrCns(emitAttr attr, target_size_t cns) + instrDescCns* emitAllocInstrCns(emitAttr attr, cnsval_size_t cns) { instrDescCns* result = emitAllocInstrCns(attr); result->idSetIsLargeCns(); @@ -1963,8 +1965,8 @@ class emitter instrDesc* emitNewInstrSmall(emitAttr attr); instrDesc* emitNewInstr(emitAttr attr = EA_4BYTE); - instrDesc* emitNewInstrSC(emitAttr attr, target_ssize_t cns); - instrDesc* emitNewInstrCns(emitAttr attr, target_ssize_t cns); + instrDesc* emitNewInstrSC(emitAttr attr, cnsval_ssize_t cns); + instrDesc* emitNewInstrCns(emitAttr attr, cnsval_ssize_t cns); instrDesc* emitNewInstrDsp(emitAttr attr, target_ssize_t dsp); instrDesc* emitNewInstrCnsDsp(emitAttr attr, target_ssize_t cns, int dsp); #ifdef TARGET_ARM @@ -2511,7 +2513,7 @@ inline emitter::instrDesc* emitter::emitNewInstrDsp(emitAttr attr, target_ssize_ * Note that this very similar to emitter::emitNewInstrSC(), except it never * allocates a small descriptor. */ -inline emitter::instrDesc* emitter::emitNewInstrCns(emitAttr attr, target_ssize_t cns) +inline emitter::instrDesc* emitter::emitNewInstrCns(emitAttr attr, cnsval_ssize_t cns) { if (instrDesc::fitsInSmallCns(cns)) { @@ -2570,7 +2572,7 @@ inline size_t emitter::emitGetInstrDescSize(const instrDesc* id) * emitNewInstrCns() always allocates at least sizeof(instrDesc)). */ -inline emitter::instrDesc* emitter::emitNewInstrSC(emitAttr attr, target_ssize_t cns) +inline emitter::instrDesc* emitter::emitNewInstrSC(emitAttr attr, cnsval_ssize_t cns) { if (instrDesc::fitsInSmallCns(cns)) { diff --git a/src/coreclr/src/jit/emitarm.cpp b/src/coreclr/src/jit/emitarm.cpp index cee6fde072939..3d3168b0c51f2 100644 --- a/src/coreclr/src/jit/emitarm.cpp +++ b/src/coreclr/src/jit/emitarm.cpp @@ -6111,7 +6111,7 @@ size_t emitter::emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp) if (!id->idIsReloc()) { assert(sizeof(size_t) == sizeof(target_size_t)); - imm = (target_size_t)addr; + imm = (target_size_t)(size_t)addr; if (ins == INS_movw) { imm &= 0xffff; diff --git a/src/coreclr/src/jit/emitxarch.cpp b/src/coreclr/src/jit/emitxarch.cpp index f21b1170eb83c..58477f527c110 100644 --- a/src/coreclr/src/jit/emitxarch.cpp +++ b/src/coreclr/src/jit/emitxarch.cpp @@ -3945,7 +3945,7 @@ void emitter::emitIns_R_I(instruction ins, emitAttr attr, regNumber reg, ssize_t * Add an instruction referencing an integer constant. */ -void emitter::emitIns_I(instruction ins, emitAttr attr, int val) +void emitter::emitIns_I(instruction ins, emitAttr attr, cnsval_ssize_t val) { UNATIVE_OFFSET sz; instrDesc* id; @@ -5349,7 +5349,7 @@ void emitter::emitIns_R_AI(instruction ins, emitAttr attr, regNumber ireg, ssize emitCurIGsize += sz; } -void emitter::emitIns_AR_R(instruction ins, emitAttr attr, regNumber reg, regNumber base, int disp) +void emitter::emitIns_AR_R(instruction ins, emitAttr attr, regNumber reg, regNumber base, cnsval_ssize_t disp) { emitIns_ARX_R(ins, attr, reg, base, REG_NA, 1, disp); } @@ -5587,7 +5587,7 @@ void emitter::emitIns_R_ARX( } void emitter::emitIns_ARX_R( - instruction ins, emitAttr attr, regNumber reg, regNumber base, regNumber index, unsigned scale, int disp) + instruction ins, emitAttr attr, regNumber reg, regNumber base, regNumber index, unsigned scale, cnsval_ssize_t disp) { UNATIVE_OFFSET sz; instrDesc* id = emitNewInstrAmd(attr, disp); @@ -8263,11 +8263,11 @@ void emitter::emitDispIns( { printf(" %-9s", sstr); } -#ifndef TARGET_UNIX +#ifndef HOST_UNIX if (strnlen_s(sstr, 10) >= 8) -#else // TARGET_UNIX +#else // HOST_UNIX if (strnlen(sstr, 10) >= 8) -#endif // TARGET_UNIX +#endif // HOST_UNIX { printf(" "); } @@ -10928,7 +10928,7 @@ BYTE* emitter::emitOutputCV(BYTE* dst, instrDesc* id, code_t code, CnsVal* addc) noway_assert(id->idIsDspReloc()); dst += emitOutputLong(dst, 0); #else // TARGET_X86 - dst += emitOutputLong(dst, (int)target); + dst += emitOutputLong(dst, (int)(ssize_t)target); #endif // TARGET_X86 if (id->idIsDspReloc()) @@ -12720,7 +12720,7 @@ size_t emitter::emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp) #ifdef TARGET_AMD64 dst += emitOutputLong(dst, 0); #else - dst += emitOutputLong(dst, (int)addr); + dst += emitOutputLong(dst, (int)(ssize_t)addr); #endif emitRecordRelocation((void*)(dst - sizeof(int)), addr, IMAGE_REL_BASED_DISP32); } diff --git a/src/coreclr/src/jit/emitxarch.h b/src/coreclr/src/jit/emitxarch.h index f7c0f5c65af4b..fb2aac2d30f0d 100644 --- a/src/coreclr/src/jit/emitxarch.h +++ b/src/coreclr/src/jit/emitxarch.h @@ -299,7 +299,7 @@ void emitInsRMW(instruction inst, emitAttr attr, GenTreeStoreInd* storeInd); void emitIns_Nop(unsigned size); -void emitIns_I(instruction ins, emitAttr attr, int val); +void emitIns_I(instruction ins, emitAttr attr, cnsval_ssize_t val); void emitIns_R(instruction ins, emitAttr attr, regNumber reg); @@ -409,7 +409,7 @@ void emitIns_R_AR(instruction ins, emitAttr attr, regNumber reg, regNumber base, void emitIns_R_AI(instruction ins, emitAttr attr, regNumber ireg, ssize_t disp); -void emitIns_AR_R(instruction ins, emitAttr attr, regNumber reg, regNumber base, int disp); +void emitIns_AR_R(instruction ins, emitAttr attr, regNumber reg, regNumber base, cnsval_ssize_t disp); void emitIns_AI_R(instruction ins, emitAttr attr, regNumber ireg, ssize_t disp); @@ -424,8 +424,13 @@ void emitIns_I_ARX(instruction ins, emitAttr attr, int val, regNumber reg, regNu void emitIns_R_ARX( instruction ins, emitAttr attr, regNumber reg, regNumber base, regNumber index, unsigned scale, int disp); -void emitIns_ARX_R( - instruction ins, emitAttr attr, regNumber reg, regNumber base, regNumber index, unsigned scale, int disp); +void emitIns_ARX_R(instruction ins, + emitAttr attr, + regNumber reg, + regNumber base, + regNumber index, + unsigned scale, + cnsval_ssize_t disp); void emitIns_I_AX(instruction ins, emitAttr attr, int val, regNumber reg, unsigned mul, int disp); diff --git a/src/coreclr/src/jit/flowgraph.cpp b/src/coreclr/src/jit/flowgraph.cpp index 48f3273e38eaa..c1b6f84c32cb1 100644 --- a/src/coreclr/src/jit/flowgraph.cpp +++ b/src/coreclr/src/jit/flowgraph.cpp @@ -24881,7 +24881,7 @@ PhaseStatus Compiler::fgRemoveEmptyTry() GenTree* expr = stmt->GetRootNode(); if (expr->gtOper == GT_END_LFIN) { - const unsigned nestLevel = expr->AsVal()->gtVal1; + const size_t nestLevel = expr->AsVal()->gtVal1; assert(nestLevel > 0); expr->AsVal()->gtVal1 = nestLevel - 1; } diff --git a/src/coreclr/src/jit/gcencode.cpp b/src/coreclr/src/jit/gcencode.cpp index 81edb0b0d29e1..6cbe702524282 100644 --- a/src/coreclr/src/jit/gcencode.cpp +++ b/src/coreclr/src/jit/gcencode.cpp @@ -3588,7 +3588,7 @@ const bool verifyGCTables = false; * Dump the info block header. */ -unsigned GCInfo::gcInfoBlockHdrDump(const BYTE* table, InfoHdr* header, unsigned* methodSize) +size_t GCInfo::gcInfoBlockHdrDump(const BYTE* table, InfoHdr* header, unsigned* methodSize) { GCDump gcDump(GCINFO_VERSION); @@ -3600,7 +3600,7 @@ unsigned GCInfo::gcInfoBlockHdrDump(const BYTE* table, InfoHdr* header, unsigned /*****************************************************************************/ -unsigned GCInfo::gcDumpPtrTable(const BYTE* table, const InfoHdr& header, unsigned methodSize) +size_t GCInfo::gcDumpPtrTable(const BYTE* table, const InfoHdr& header, unsigned methodSize) { printf("Pointer table:\n"); diff --git a/src/coreclr/src/jit/gentree.cpp b/src/coreclr/src/jit/gentree.cpp index 3c1c1446e9280..85f2960958f9d 100644 --- a/src/coreclr/src/jit/gentree.cpp +++ b/src/coreclr/src/jit/gentree.cpp @@ -3302,7 +3302,7 @@ unsigned Compiler::gtSetEvalOrder(GenTree* tree) // Any constant that requires a reloc must use the movw/movt sequence // GenTreeIntConCommon* con = tree->AsIntConCommon(); - INT32 conVal = con->IconValue(); + target_ssize_t conVal = (target_ssize_t)con->IconValue(); if (con->ImmedValNeedsReloc(this)) { @@ -3310,14 +3310,13 @@ unsigned Compiler::gtSetEvalOrder(GenTree* tree) costSz = 8; costEx = 2; } - else if (codeGen->validImmForInstr(INS_add, (target_ssize_t)conVal)) + else if (codeGen->validImmForInstr(INS_add, conVal)) { // Typically included with parent oper costSz = 2; costEx = 1; } - else if (codeGen->validImmForInstr(INS_mov, (target_ssize_t)conVal) && - codeGen->validImmForInstr(INS_mvn, (target_ssize_t)conVal)) + else if (codeGen->validImmForInstr(INS_mov, conVal) && codeGen->validImmForInstr(INS_mvn, conVal)) { // Uses mov or mvn costSz = 4; @@ -18464,7 +18463,7 @@ void GenTree::ParseArrayAddressWork(Compiler* comp, assert(!AsOp()->gtOp2->AsIntCon()->ImmedValNeedsReloc(comp)); // TODO-CrossBitness: we wouldn't need the cast below if GenTreeIntCon::gtIconVal had target_ssize_t // type. - target_ssize_t shiftVal = AsOp()->gtOp2->AsIntConCommon()->IconValue(); + target_ssize_t shiftVal = (target_ssize_t)AsOp()->gtOp2->AsIntConCommon()->IconValue(); target_ssize_t subMul = target_ssize_t{1} << shiftVal; AsOp()->gtOp1->ParseArrayAddressWork(comp, inputMul * subMul, pArr, pInxVN, pOffset, pFldSeq); return; diff --git a/src/coreclr/src/jit/instr.cpp b/src/coreclr/src/jit/instr.cpp index d6f4c98f6b947..11e3b788ffdd4 100644 --- a/src/coreclr/src/jit/instr.cpp +++ b/src/coreclr/src/jit/instr.cpp @@ -454,7 +454,7 @@ void CodeGen::inst_RV_RV_RV(instruction ins, * Generate a "op icon" instruction. */ -void CodeGen::inst_IV(instruction ins, int val) +void CodeGen::inst_IV(instruction ins, cnsval_ssize_t val) { GetEmitter()->emitIns_I(ins, EA_PTRSIZE, val); } @@ -465,7 +465,7 @@ void CodeGen::inst_IV(instruction ins, int val) * by 'flags' */ -void CodeGen::inst_IV_handle(instruction ins, int val) +void CodeGen::inst_IV_handle(instruction ins, cnsval_ssize_t val) { GetEmitter()->emitIns_I(ins, EA_HANDLE_CNS_RELOC, val); } diff --git a/src/coreclr/src/jit/jitgcinfo.h b/src/coreclr/src/jit/jitgcinfo.h index e9ef97c2a17ed..83393bda9bbeb 100644 --- a/src/coreclr/src/jit/jitgcinfo.h +++ b/src/coreclr/src/jit/jitgcinfo.h @@ -377,11 +377,11 @@ class GCInfo void gcFindPtrsInFrame(const void* infoBlock, const void* codeBlock, unsigned offs); #ifdef JIT32_GCENCODER - unsigned gcInfoBlockHdrDump(const BYTE* table, - InfoHdr* header, /* OUT */ - unsigned* methodSize); /* OUT */ + size_t gcInfoBlockHdrDump(const BYTE* table, + InfoHdr* header, /* OUT */ + unsigned* methodSize); /* OUT */ - unsigned gcDumpPtrTable(const BYTE* table, const InfoHdr& header, unsigned methodSize); + size_t gcDumpPtrTable(const BYTE* table, const InfoHdr& header, unsigned methodSize); #endif // JIT32_GCENCODER #endif // DUMP_GC_TABLES diff --git a/src/coreclr/src/jit/linuxnonjit/CMakeLists.txt b/src/coreclr/src/jit/linuxnonjit/CMakeLists.txt deleted file mode 100644 index 951b757a6a707..0000000000000 --- a/src/coreclr/src/jit/linuxnonjit/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -project(linuxnonjit) - -add_definitions(-DALT_JIT) -add_definitions(-DFEATURE_NO_HOST) -add_definitions(-DSELF_NO_HOST) -remove_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE) - -if(FEATURE_READYTORUN) - add_definitions(-DFEATURE_READYTORUN_COMPILER) -endif(FEATURE_READYTORUN) - -if (CLR_CMAKE_HOST_ARCH_I386) - remove_definitions(-DFEATURE_SIMD) - remove_definitions(-DFEATURE_HW_INTRINSICS) - add_definitions(-DUNIX_X86_ABI) - set(JIT_ARCH_SOURCES ${JIT_I386_SOURCES}) - set(JIT_ARCH_LINK_LIBRARIES gcinfo_linuxx86) -elseif(CLR_CMAKE_HOST_ARCH_AMD64) - add_definitions(-DUNIX_AMD64_ABI) - set(JIT_ARCH_SOURCES ${JIT_AMD64_SOURCES}) - set(JIT_ARCH_LINK_LIBRARIES gcinfo) -else() - clr_unknown_arch() -endif() - -add_jit(linuxnonjit) diff --git a/src/coreclr/src/jit/protojit/CMakeLists.txt b/src/coreclr/src/jit/protojit/CMakeLists.txt deleted file mode 100644 index 981583be888a9..0000000000000 --- a/src/coreclr/src/jit/protojit/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -project(protojit) - -add_definitions(-DALT_JIT) -add_definitions(-DFEATURE_NO_HOST) -add_definitions(-DSELF_NO_HOST) -remove_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE) - -if(FEATURE_READYTORUN) - add_definitions(-DFEATURE_READYTORUN_COMPILER) -endif(FEATURE_READYTORUN) - -add_jit(protojit) diff --git a/src/coreclr/src/jit/protojit/SOURCES b/src/coreclr/src/jit/protojit/SOURCES deleted file mode 100644 index 42c58f760f0f5..0000000000000 --- a/src/coreclr/src/jit/protojit/SOURCES +++ /dev/null @@ -1,10 +0,0 @@ - -# -# DO NOT EDIT THIS FILE!!! Modify the project file in this directory -# This file merely allows the MSBuild project file in this directory to be integrated with Build.Exe -# -TARGETTYPE=NOTARGET -CLR_TARGETTYPE=DLL -MSBuildProjectFile=protojit.nativeproj -SOURCES= - diff --git a/src/coreclr/src/jit/protojit/makefile b/src/coreclr/src/jit/protojit/makefile deleted file mode 100644 index 04c839a2a6684..0000000000000 --- a/src/coreclr/src/jit/protojit/makefile +++ /dev/null @@ -1,6 +0,0 @@ - -# -# DO NOT EDIT THIS FILE!!! Modify the project file in this directory -# This file merely allows the MSBuild project file in this directory to be integrated with Build.Exe -# -!INCLUDE $(NTMAKEENV)\msbuild.def diff --git a/src/coreclr/src/jit/protojit/protojit.def b/src/coreclr/src/jit/protojit/protojit.def deleted file mode 100644 index 0afb54dca77de..0000000000000 --- a/src/coreclr/src/jit/protojit/protojit.def +++ /dev/null @@ -1,5 +0,0 @@ -; Licensed to the .NET Foundation under one or more agreements. -; The .NET Foundation licenses this file to you under the MIT license. -EXPORTS - getJit - jitStartup diff --git a/src/coreclr/src/jit/protononjit/CMakeLists.txt b/src/coreclr/src/jit/protononjit/CMakeLists.txt deleted file mode 100644 index 45c9a5999b70a..0000000000000 --- a/src/coreclr/src/jit/protononjit/CMakeLists.txt +++ /dev/null @@ -1,39 +0,0 @@ -project(protononjit) - -add_definitions(-DALT_JIT) -add_definitions(-DFEATURE_NO_HOST) -add_definitions(-DSELF_NO_HOST) -remove_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE) - -if(FEATURE_READYTORUN) - add_definitions(-DFEATURE_READYTORUN_COMPILER) -endif(FEATURE_READYTORUN) - -if (CLR_CMAKE_HOST_ARCH_I386) - remove_definitions(-DTARGET_X86) - remove_definitions(-DFEATURE_SIMD) - remove_definitions(-DFEATURE_HW_INTRINSICS) - add_definitions(-DTARGET_ARM) - add_definitions(-DFEATURE_EH_FUNCLETS) - set(JIT_ARCH_SOURCES ${JIT_ARM_SOURCES}) - set(JIT_ARCH_LINK_LIBRARIES gcinfo_arm) -elseif(CLR_CMAKE_HOST_ARCH_AMD64) - remove_definitions(-DTARGET_AMD64) - add_definitions(-DTARGET_ARM64) - set(JIT_ARCH_SOURCES ${JIT_ARM64_SOURCES}) - set(JIT_ARCH_LINK_LIBRARIES gcinfo_arm64) -else() - clr_unknown_arch() -endif() - -if (NOT CLR_CMAKE_HOST_WIN32) - if (CLR_CMAKE_HOST_ARCH_I386) - remove_definitions(-DUNIX_X86_ABI) - elseif(CLR_CMAKE_HOST_ARCH_AMD64) - remove_definitions(-DUNIX_AMD64_ABI) - else() - clr_unknown_arch() - endif() -endif(NOT CLR_CMAKE_HOST_WIN32) - -add_jit(protononjit) diff --git a/src/coreclr/src/jit/protononjit/SOURCES b/src/coreclr/src/jit/protononjit/SOURCES deleted file mode 100644 index 79189a609762b..0000000000000 --- a/src/coreclr/src/jit/protononjit/SOURCES +++ /dev/null @@ -1,9 +0,0 @@ - -# -# DO NOT EDIT THIS FILE!!! Modify the project file in this directory -# This file merely allows the MSBuild project file in this directory to be integrated with Build.Exe -# -TARGETTYPE=NOTARGET -CLR_TARGETTYPE=DLL -MSBuildProjectFile=protononjit.nativeproj -SOURCES= diff --git a/src/coreclr/src/jit/protononjit/makefile b/src/coreclr/src/jit/protononjit/makefile deleted file mode 100644 index bf27e8c84b052..0000000000000 --- a/src/coreclr/src/jit/protononjit/makefile +++ /dev/null @@ -1,7 +0,0 @@ - -# -# DO NOT EDIT THIS FILE!!! Modify the project file in this directory -# This file merely allows the MSBuild project file in this directory to be integrated with Build.Exe -# - -!INCLUDE $(NTMAKEENV)\devdiv.def diff --git a/src/coreclr/src/jit/protononjit/protononjit.def b/src/coreclr/src/jit/protononjit/protononjit.def deleted file mode 100644 index 0afb54dca77de..0000000000000 --- a/src/coreclr/src/jit/protononjit/protononjit.def +++ /dev/null @@ -1,5 +0,0 @@ -; Licensed to the .NET Foundation under one or more agreements. -; The .NET Foundation licenses this file to you under the MIT license. -EXPORTS - getJit - jitStartup diff --git a/src/coreclr/src/jit/standalone/CMakeLists.txt b/src/coreclr/src/jit/standalone/CMakeLists.txt deleted file mode 100644 index c37ed9c31b551..0000000000000 --- a/src/coreclr/src/jit/standalone/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -project(ryujit) - -add_definitions(-DFEATURE_NO_HOST) -add_definitions(-DSELF_NO_HOST) -remove_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE) - -if(FEATURE_READYTORUN) - add_definitions(-DFEATURE_READYTORUN_COMPILER) -endif(FEATURE_READYTORUN) - -add_jit(clrjit ADDITIONAL_DESTINATION sharedFramework) - -# Enable profile guided optimization -add_pgo(clrjit) diff --git a/src/coreclr/src/jit/target.h b/src/coreclr/src/jit/target.h index 5b1f6cff48bca..5591de5082b2c 100644 --- a/src/coreclr/src/jit/target.h +++ b/src/coreclr/src/jit/target.h @@ -2004,8 +2004,8 @@ typedef __int64 target_ssize_t; #define TARGET_SIGN_BIT (1ULL << 63) #else // !TARGET_64BIT -typedef unsigned int target_size_t; -typedef int target_ssize_t; +typedef unsigned int target_size_t; +typedef int target_ssize_t; #define TARGET_SIGN_BIT (1ULL << 31) #endif // !TARGET_64BIT @@ -2013,6 +2013,18 @@ typedef int target_ssize_t; C_ASSERT(sizeof(target_size_t) == TARGET_POINTER_SIZE); C_ASSERT(sizeof(target_ssize_t) == TARGET_POINTER_SIZE); +#if defined(TARGET_X86) +// instrDescCns holds constant values for the emitter. The X86 compiler is unique in that it +// may represent relocated pointer values with these constants. On the 64bit to 32 bit +// cross-targetting jit, the the constant value must be represented as a 64bit value in order +// to represent these pointers. +typedef ssize_t cnsval_ssize_t; +typedef size_t cnsval_size_t; +#else +typedef target_ssize_t cnsval_ssize_t; +typedef target_size_t cnsval_size_t; +#endif + /*****************************************************************************/ #endif // TARGET_H_ /*****************************************************************************/ diff --git a/src/coreclr/src/jit/valuenum.cpp b/src/coreclr/src/jit/valuenum.cpp index 51e23701a77df..3586fa7d8aa61 100644 --- a/src/coreclr/src/jit/valuenum.cpp +++ b/src/coreclr/src/jit/valuenum.cpp @@ -6435,7 +6435,7 @@ void Compiler::fgValueNumberTreeConst(GenTree* tree) tree->gtVNPair.SetBoth(vnStore->VNForLongCon(tree->AsIntConCommon()->LngValue())); #else // 32BIT assert(tree->AsIntConCommon()->IconValue() == 0); - tree->gtVNPair.SetBoth(vnStore->VNForIntCon(tree->AsIntConCommon()->IconValue())); + tree->gtVNPair.SetBoth(vnStore->VNForIntCon(int(tree->AsIntConCommon()->IconValue()))); #endif break; #endif // FEATURE_SIMD diff --git a/src/coreclr/src/tools/Common/JitInterface/CorInfoImpl.cs b/src/coreclr/src/tools/Common/JitInterface/CorInfoImpl.cs index 3d7dd28329b9b..e0889b26a06f6 100644 --- a/src/coreclr/src/tools/Common/JitInterface/CorInfoImpl.cs +++ b/src/coreclr/src/tools/Common/JitInterface/CorInfoImpl.cs @@ -49,7 +49,7 @@ private enum ImageFileMachine #if SUPPORT_JIT private const string JitSupportLibrary = "*"; #else - private const string JitSupportLibrary = "jitinterface"; + internal const string JitSupportLibrary = "jitinterface"; #endif private IntPtr _jit; @@ -397,12 +397,19 @@ private void CompileMethodCleanup() private const int handleMultipler = 8; private const int handleBase = 0x420000; +#if DEBUG + private static readonly IntPtr s_handleHighBitSet = (sizeof(IntPtr) == 4) ? new IntPtr(0x40000000) : new IntPtr(0x4000000000000000); +#endif + private IntPtr ObjectToHandle(Object obj) { IntPtr handle; if (!_objectToHandle.TryGetValue(obj, out handle)) { handle = (IntPtr)(handleMultipler * _handleToObject.Count + handleBase); +#if DEBUG + handle = new IntPtr((long)s_handleHighBitSet | (long)handle); +#endif _handleToObject.Add(obj); _objectToHandle.Add(obj, handle); } @@ -411,6 +418,9 @@ private IntPtr ObjectToHandle(Object obj) private Object HandleToObject(IntPtr handle) { +#if DEBUG + handle = new IntPtr(~(long)s_handleHighBitSet & (long) handle); +#endif int index = ((int)handle - handleBase) / handleMultipler; return _handleToObject[index]; } diff --git a/src/coreclr/src/tools/Common/JitInterface/JitConfigProvider.cs b/src/coreclr/src/tools/Common/JitInterface/JitConfigProvider.cs index 1635c5ab3fd1b..f8012d09570b8 100644 --- a/src/coreclr/src/tools/Common/JitInterface/JitConfigProvider.cs +++ b/src/coreclr/src/tools/Common/JitInterface/JitConfigProvider.cs @@ -54,9 +54,13 @@ public static void Initialize( } else { - libHandle = NativeLibrary.Load("clrjit-" + GetTargetSpec(target), assembly, searchPath); + libHandle = NativeLibrary.Load("clrjit_" + GetTargetSpec(target), assembly, searchPath); } } + if (libName == CorInfoImpl.JitSupportLibrary) + { + libHandle = NativeLibrary.Load("jitinterface_" + RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant(), assembly, searchPath); + } return libHandle; }); #else @@ -141,7 +145,8 @@ private static string GetTargetSpec(TargetDetails target) TargetArchitecture.ARM64 => "arm64", _ => throw new NotImplementedException(target.Architecture.ToString()) }; - return targetOSComponent + '-' + targetArchComponent; + + return targetOSComponent + '_' + targetArchComponent + "_" + RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant(); } #region Unmanaged instance diff --git a/src/coreclr/src/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/TransitionBlock.cs b/src/coreclr/src/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/TransitionBlock.cs index e698e54ad58f7..05babd11e129e 100644 --- a/src/coreclr/src/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/TransitionBlock.cs +++ b/src/coreclr/src/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/TransitionBlock.cs @@ -366,6 +366,8 @@ public override int OffsetFromGCRefMapPos(int pos) } } + public override bool IsArgPassedByRef(TypeHandle th) => false; + /// /// x86 is special as always /// DESKTOP BEHAVIOR ret += this.HasThis() ? ArgumentRegisters.GetOffsetOfEdx() : ArgumentRegisters.GetOffsetOfEcx(); diff --git a/src/coreclr/src/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunCodegenCompilationBuilder.cs b/src/coreclr/src/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunCodegenCompilationBuilder.cs index 61b92c8b8b9e2..bf7f96dcf2c0f 100644 --- a/src/coreclr/src/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunCodegenCompilationBuilder.cs +++ b/src/coreclr/src/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunCodegenCompilationBuilder.cs @@ -73,6 +73,9 @@ public override CompilationBuilder UseBackendOptions(IEnumerable options builder.Add(new KeyValuePair(name, value)); } + // As we always use an AltJit to compile, tell the jit to always generate code + builder.Add(new KeyValuePair("AltJitNgen", "*")); + _ryujitOptions = builder.ToArray(); return this; diff --git a/src/coreclr/src/tools/aot/ILCompiler.Reflection.ReadyToRun/EHInfo.cs b/src/coreclr/src/tools/aot/ILCompiler.Reflection.ReadyToRun/EHInfo.cs index 32e4eab6d609b..adb6758ce64c2 100644 --- a/src/coreclr/src/tools/aot/ILCompiler.Reflection.ReadyToRun/EHInfo.cs +++ b/src/coreclr/src/tools/aot/ILCompiler.Reflection.ReadyToRun/EHInfo.cs @@ -111,13 +111,21 @@ public EHClause(ReadyToRunReader reader, int offset) /// /// Output writer for the textual representation /// Starting RVA of the runtime function is used to display the try / handler info as RVA intervals - public void WriteTo(TextWriter writer, int methodRva) + public void WriteTo(TextWriter writer, int methodRva, bool dumpRva) { writer.Write($@"Flags {(uint)Flags:X2} "); - writer.Write($@"TryOff {TryOffset:X4} (RVA {(TryOffset + methodRva):X4}) "); - writer.Write($@"TryEnd {TryEnd:X4} (RVA {(TryEnd + methodRva):X4}) "); - writer.Write($@"HndOff {HandlerOffset:X4} (RVA {(HandlerOffset + methodRva):X4}) "); - writer.Write($@"HndEnd {HandlerEnd:X4} (RVA {(HandlerEnd + methodRva):X4}) "); + writer.Write($@"TryOff {TryOffset:X4} "); + if (dumpRva) + writer.Write(@"(RVA {(TryOffset + methodRva):X4}) "); + writer.Write($@"TryEnd {TryEnd:X4} "); + if (dumpRva) + writer.Write(@"(RVA {(TryEnd + methodRva):X4}) "); + writer.Write($@"HndOff {HandlerOffset:X4} "); + if (dumpRva) + writer.Write(@"(RVA {(HandlerOffset + methodRva):X4}) "); + writer.Write($@"HndEnd {HandlerEnd:X4} "); + if (dumpRva) + writer.Write(@"(RVA {(HandlerEnd + methodRva):X4}) "); writer.Write($@"ClsFlt {ClassTokenOrFilterOffset:X4}"); switch (Flags & CorExceptionFlag.COR_ILEXCEPTION_CLAUSE_KIND_MASK) @@ -220,11 +228,11 @@ private void EnsureClauses() /// /// Emit the textual representation of the EH info into a given writer. /// - public void WriteTo(TextWriter writer) + public void WriteTo(TextWriter writer, bool dumpRva) { foreach (EHClause ehClause in EHClauses) { - ehClause.WriteTo(writer, MethodRelativeVirtualAddress); + ehClause.WriteTo(writer, MethodRelativeVirtualAddress, dumpRva: dumpRva); writer.WriteLine(); } } diff --git a/src/coreclr/src/tools/aot/crossgen2/crossgen2.csproj b/src/coreclr/src/tools/aot/crossgen2/crossgen2.csproj index 2de5f56821453..3bf24f563b14e 100644 --- a/src/coreclr/src/tools/aot/crossgen2/crossgen2.csproj +++ b/src/coreclr/src/tools/aot/crossgen2/crossgen2.csproj @@ -5,7 +5,7 @@ Exe $(NetCoreAppCurrent) 8002,NU1701 - x64;x86 + x64;x86;arm64;arm AnyCPU false true @@ -43,10 +43,13 @@ x64 + x64 + x64 unix win - $(TargetOSComponent)-$(TargetArchitecture) + $(TargetOSComponent)_$(TargetArchitecture)_$(TargetArchitecture) + $(TargetOSComponent)_$(TargetArchitecture)_$(CrossHostArch) lib @@ -54,7 +57,7 @@ .so .dylib - $(LibraryNamePrefix)jitinterface$(LibraryNameExtension) + $(LibraryNamePrefix)jitinterface_$(TargetArchitecture)$(LibraryNameExtension) @@ -64,10 +67,20 @@ Link="%(FileName)%(Extension)" /> + + + + + @@ -79,8 +92,8 @@ - + Exclude="$(BinDir)\crossgen2\$(JitInterfaceLibraryName);$(BinDir)\crossgen2\$(LibraryNamePrefix)clrjit_*$(LibraryNameExtension)" /> + @@ -91,8 +104,15 @@ /> + diff --git a/src/coreclr/src/tools/aot/jitinterface/CMakeLists.txt b/src/coreclr/src/tools/aot/jitinterface/CMakeLists.txt index db31bdaa3e82b..faba8d685c9e8 100644 --- a/src/coreclr/src/tools/aot/jitinterface/CMakeLists.txt +++ b/src/coreclr/src/tools/aot/jitinterface/CMakeLists.txt @@ -7,9 +7,9 @@ set(NATIVE_SOURCES corinfoexception.cpp ) -add_library_clr(jitinterface +add_library_clr(jitinterface_${ARCH_HOST_NAME} SHARED ${NATIVE_SOURCES} ) -install_clr(TARGETS jitinterface) +install_clr(TARGETS jitinterface_${ARCH_HOST_NAME}) diff --git a/src/coreclr/src/tools/r2rdump/CoreDisTools.cs b/src/coreclr/src/tools/r2rdump/CoreDisTools.cs index e21e87c4282f4..183a413dec271 100644 --- a/src/coreclr/src/tools/r2rdump/CoreDisTools.cs +++ b/src/coreclr/src/tools/r2rdump/CoreDisTools.cs @@ -424,7 +424,8 @@ private void ProbeX86Quirks(RuntimeFunction rtf, int imageOffset, int rtfOffset, int leftBracket; int rightBracketPlusOne; int absoluteAddress; - if (TryParseRipRelative(instruction, out leftBracket, out rightBracketPlusOne, out absoluteAddress)) + if (TryParseRipRelative(instruction, out leftBracket, out rightBracketPlusOne, out absoluteAddress) || + TryParseAbsoluteAddress(instruction, out leftBracket, out rightBracketPlusOne, out absoluteAddress)) { int target = absoluteAddress - (int)_reader.ImageBase; @@ -455,7 +456,6 @@ private void ProbeX86Quirks(RuntimeFunction rtf, int imageOffset, int rtfOffset, } } - translated.Append(instruction, rightBracketPlusOne, instruction.Length - rightBracketPlusOne); instruction = translated.ToString(); } else @@ -540,6 +540,38 @@ private void ProbeCommonIntelQuirks(RuntimeFunction rtf, int imageOffset, int rt } } + /// + /// Try to parse the [absoluteAddress] section in a disassembled instruction string. + /// + /// Disassembled instruction string + /// Index of the left bracket in the instruction + /// Index of the right bracket in the instruction plus one + /// Value of the absolute address + /// + private bool TryParseAbsoluteAddress(string instruction, out int leftBracket, out int rightBracketPlusOne, out int absoluteAddress) + { + int start = instruction.IndexOf('[', StringComparison.Ordinal); + int current = start + 1; + absoluteAddress = 0; + while (current < instruction.Length && IsDigit(instruction[current])) + { + absoluteAddress = 10 * absoluteAddress + (int)(instruction[current] - '0'); + current++; + } + + if (current < instruction.Length && instruction[current] == ']') + { + leftBracket = start; + rightBracketPlusOne = current + 1; + return true; + } + + leftBracket = 0; + rightBracketPlusOne = 0; + absoluteAddress = 0; + return false; + } + /// /// Try to parse the [rip +- displacement] section in a disassembled instruction string. /// @@ -687,6 +719,19 @@ private bool IsIntel2ByteJumpInstructionWithIntOffset(int imageOffset) (opCode2 >= 0x80 && opCode2 <= 0x8F); // near conditional jumps } + /// + /// Returns true when this is one of the x86 / amd64 conditional near jump + /// opcodes with signed 4-byte offset. + /// + /// Offset within the PE image byte array + private bool IsIntelCallAbsoluteAddress(int imageOffset) + { + byte opCode1 = _reader.Image[imageOffset]; + byte opCode2 = _reader.Image[imageOffset + 1]; + + return opCode1 == 0xFF && opCode2 == 0x15; + } + /// /// Returns true when this is the 2-byte instruction for indirect jump /// with RIP-relative offset. diff --git a/src/coreclr/src/tools/r2rdump/Extensions.cs b/src/coreclr/src/tools/r2rdump/Extensions.cs index f8ca578f33256..7f2d64fcc5337 100644 --- a/src/coreclr/src/tools/r2rdump/Extensions.cs +++ b/src/coreclr/src/tools/r2rdump/Extensions.cs @@ -230,8 +230,11 @@ public static void WriteTo(this RuntimeFunction theThis, TextWriter writer, Dump if (theThis.EHInfo != null) { - writer.WriteLine($@"EH info @ {theThis.EHInfo.RelativeVirtualAddress:X4}, #clauses = {theThis.EHInfo.EHClauses.Count}"); - theThis.EHInfo.WriteTo(writer); + if (options.Naked) + writer.WriteLine($@"EH info, #clauses = {theThis.EHInfo.EHClauses.Count}"); + else + writer.WriteLine($@"EH info @ {theThis.EHInfo.RelativeVirtualAddress:X4}, #clauses = {theThis.EHInfo.EHClauses.Count}"); + theThis.EHInfo.WriteTo(writer, !options.Naked); writer.WriteLine(); } diff --git a/src/coreclr/src/utilcode/stacktrace.cpp b/src/coreclr/src/utilcode/stacktrace.cpp index 57b4ee5f28283..9cab6ee2d1f08 100644 --- a/src/coreclr/src/utilcode/stacktrace.cpp +++ b/src/coreclr/src/utilcode/stacktrace.cpp @@ -740,7 +740,7 @@ CONTEXT * pContext // Context to use (or NULL to use current) stkfrm.AddrFrame.Offset = context.Ebp; // Frame Pointer #endif -#ifndef TARGET_X86 +#ifndef HOST_X86 // If we don't have a user-supplied context, then don't skip any frames. // So ignore this function (GetStackBackTrace) // ClrCaptureContext on x86 gives us the ESP/EBP/EIP of its caller's caller @@ -749,7 +749,7 @@ CONTEXT * pContext // Context to use (or NULL to use current) { ifrStart += 1; } -#endif // !TARGET_X86 +#endif // !HOST_X86 for (UINT i = 0; i < ifrStart + cfrTotal; i++) { @@ -948,7 +948,7 @@ void MagicDeinit(void) } } -#if defined(TARGET_X86) +#if defined(HOST_X86) /**************************************************************************** * ClrCaptureContext * *-------------------* @@ -988,4 +988,4 @@ ClrCaptureContext(__out PCONTEXT ctx) ret 4 } } -#endif // _TARGET_X86 +#endif // HOST_X86 diff --git a/src/coreclr/src/utilcode/stresslog.cpp b/src/coreclr/src/utilcode/stresslog.cpp index 27906b5e9bccd..7d5562bef51f8 100644 --- a/src/coreclr/src/utilcode/stresslog.cpp +++ b/src/coreclr/src/utilcode/stresslog.cpp @@ -24,7 +24,7 @@ thread_local ThreadStressLog* StressLog::t_pCurrentThreadLog; #endif // !STRESS_LOG_READONLY /*********************************************************************************/ -#if defined(TARGET_X86) +#if defined(HOST_X86) /* This is like QueryPerformanceCounter but a lot faster. On machines with variable-speed CPUs (for power management), this is not accurate, but may @@ -39,7 +39,7 @@ __forceinline __declspec(naked) unsigned __int64 getTimeStamp() { }; } -#else // TARGET_X86 +#else // HOST_X86 unsigned __int64 getTimeStamp() { STATIC_CONTRACT_LEAF; @@ -51,9 +51,9 @@ unsigned __int64 getTimeStamp() { return ret.QuadPart; } -#endif // TARGET_X86 +#endif // HOST_X86 -#if defined(TARGET_X86) && !defined(HOST_UNIX) +#if defined(HOST_X86) && !defined(HOST_UNIX) /*********************************************************************************/ /* Get the the frequency cooresponding to 'getTimeStamp'. For x86, this is the @@ -100,7 +100,7 @@ unsigned __int64 getTickFrequency() return hz; } -#else // TARGET_X86 +#else // HOST_X86 /*********************************************************************************/ @@ -115,7 +115,7 @@ unsigned __int64 getTickFrequency() return ret.QuadPart; } -#endif // TARGET_X86 +#endif // HOST_X86 #ifdef STRESS_LOG diff --git a/src/coreclr/src/vm/CMakeLists.txt b/src/coreclr/src/vm/CMakeLists.txt index 6c97ca4ee013f..8e907978b2ac2 100644 --- a/src/coreclr/src/vm/CMakeLists.txt +++ b/src/coreclr/src/vm/CMakeLists.txt @@ -939,12 +939,14 @@ convert_to_absolute_path(VM_SOURCES_WKS_ARCH_ASM ${VM_SOURCES_WKS_ARCH_ASM}) convert_to_absolute_path(VM_SOURCES_DAC ${VM_SOURCES_DAC}) convert_to_absolute_path(VM_SOURCES_WKS_SPECIAL ${VM_SOURCES_WKS_SPECIAL}) -add_library_clr(cee_dac ${VM_SOURCES_DAC}) -add_dependencies(cee_dac eventing_headers) -set_target_properties(cee_dac PROPERTIES DAC_COMPONENT TRUE) -target_precompile_header(TARGET cee_dac HEADER common.h) - -add_subdirectory(wks) +if (CLR_CMAKE_BUILD_SUBSET_RUNTIME) + add_library_clr(cee_dac ${VM_SOURCES_DAC}) + add_dependencies(cee_dac eventing_headers) + set_target_properties(cee_dac PROPERTIES DAC_COMPONENT TRUE) + target_precompile_header(TARGET cee_dac HEADER common.h) + + add_subdirectory(wks) +endif(CLR_CMAKE_BUILD_SUBSET_RUNTIME) if(FEATURE_PERFTRACING) add_subdirectory(eventing) diff --git a/src/coreclr/src/vm/codeman.cpp b/src/coreclr/src/vm/codeman.cpp index 3f48cb00db59b..dcbb4bdc6e67f 100644 --- a/src/coreclr/src/vm/codeman.cpp +++ b/src/coreclr/src/vm/codeman.cpp @@ -1529,7 +1529,7 @@ enum JIT_LOAD_JIT_ID { JIT_LOAD_MAIN = 500, // The "main" JIT. Normally, this is named "clrjit.dll". Start at a number that is somewhat uncommon (i.e., not zero or 1) to help distinguish from garbage, in process dumps. // 501 is JIT_LOAD_LEGACY on some platforms; please do not reuse this value. - JIT_LOAD_ALTJIT = 502 // An "altjit". By default, named "protojit.dll". Used both internally, as well as externally for JIT CTP builds. + JIT_LOAD_ALTJIT = 502 // An "altjit". By default, named something like "clrjit___.dll". Used both internally, as well as externally for JIT CTP builds. }; enum JIT_LOAD_STATUS @@ -1767,7 +1767,27 @@ BOOL EEJitManager::LoadJIT() if (altJitName == NULL) { - altJitName = MAKEDLLNAME_W(W("protojit")); +#ifdef TARGET_WINDOWS +#ifdef TARGET_X86 + altJitName = MAKEDLLNAME_W(W("clrjit_win_x86_x86")); +#elif defined(TARGET_AMD64) + altJitName = MAKEDLLNAME_W(W("clrjit_win_x64_x64")); +#elif defined(TARGET_ARM) + altJitName = MAKEDLLNAME_W(W("clrjit_win_arm_arm")); +#elif defined(TARGET_ARM64) + altJitName = MAKEDLLNAME_W(W("clrjit_win_arm64_arm64")); +#endif +#else // TARGET_WINDOWS +#ifdef TARGET_X86 + altJitName = MAKEDLLNAME_W(W("clrjit_unix_x86_x86")); +#elif defined(TARGET_AMD64) + altJitName = MAKEDLLNAME_W(W("clrjit_unix_x64_x64")); +#elif defined(TARGET_ARM) + altJitName = MAKEDLLNAME_W(W("clrjit_unix_arm_arm")); +#elif defined(TARGET_ARM64) + altJitName = MAKEDLLNAME_W(W("clrjit_unix_arm64_arm64")); +#endif +#endif // TARGET_WINDOWS } g_JitLoadData.jld_id = JIT_LOAD_ALTJIT; diff --git a/src/installer/pkg/projects/netcoreapp/pkg/Microsoft.NETCore.App.Crossgen2.pkgproj b/src/installer/pkg/projects/netcoreapp/pkg/Microsoft.NETCore.App.Crossgen2.pkgproj index d652108a18115..8374b8879bb13 100644 --- a/src/installer/pkg/projects/netcoreapp/pkg/Microsoft.NETCore.App.Crossgen2.pkgproj +++ b/src/installer/pkg/projects/netcoreapp/pkg/Microsoft.NETCore.App.Crossgen2.pkgproj @@ -45,7 +45,6 @@ unix win - $(TargetOSComponent)-$(TargetArchitecture) @@ -54,8 +53,14 @@ - - + + + + + + + +