From 087a2eeb4c1384113fe68da1257b98fa99bd0484 Mon Sep 17 00:00:00 2001 From: Steve MacLean Date: Thu, 23 Mar 2017 13:38:50 -0400 Subject: [PATCH] [Unix] runtest.sh crossgen should exit on failure (#9907) * Fix crossgen segfault * Check crossgen in runtests.sh * Do not use test -v CI showed bash 4.2 feature test -v is not present on OSX CI systems. Fall back to more standard bash test --- src/utilcode/pedecoder.cpp | 4 ++-- tests/runtest.sh | 29 ++++++++++++++++++++++------- tests/skipCrossGenFiles.arm.txt | 2 ++ tests/skipCrossGenFiles.arm64.txt | 5 +++++ tests/skipCrossGenFiles.x64.txt | 2 ++ tests/skipCrossGenFiles.x86.txt | 2 ++ 6 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 tests/skipCrossGenFiles.arm.txt create mode 100644 tests/skipCrossGenFiles.arm64.txt create mode 100644 tests/skipCrossGenFiles.x64.txt create mode 100644 tests/skipCrossGenFiles.x86.txt diff --git a/src/utilcode/pedecoder.cpp b/src/utilcode/pedecoder.cpp index 9b7a058..79fe244 100644 --- a/src/utilcode/pedecoder.cpp +++ b/src/utilcode/pedecoder.cpp @@ -1828,8 +1828,8 @@ BOOL PEDecoder::HasNativeHeader() const CONTRACT_END; #ifdef FEATURE_PREJIT - // Pretend that ready-to-run images do not have a native header - RETURN (((GetCorHeader()->Flags & VAL32(COMIMAGE_FLAGS_IL_LIBRARY)) != 0) && !HasReadyToRunHeader()); + // Pretend that ready-to-run images do not have native header + RETURN (GetCorHeader() && ((GetCorHeader()->Flags & VAL32(COMIMAGE_FLAGS_IL_LIBRARY)) != 0) && !HasReadyToRunHeader()); #else RETURN FALSE; #endif diff --git a/tests/runtest.sh b/tests/runtest.sh index 649e236..dd5bf51 100755 --- a/tests/runtest.sh +++ b/tests/runtest.sh @@ -43,6 +43,7 @@ function print_usage { echo ' -h|--help : Show usage information.' echo ' --useServerGC : Enable server GC for this test run' echo ' --test-env : Script to set environment variables for tests' + echo ' --crossgen : Precompiles the framework managed assemblies' echo ' --runcrossgentests : Runs the ready to run tests' echo ' --jitstress= : Runs the tests with COMPlus_JitStress=n' echo ' --jitstressregs= : Runs the tests with COMPlus_JitStressRegs=n' @@ -370,11 +371,17 @@ function create_core_overlay { } function precompile_overlay_assemblies { + declare -A skipCrossGenFiles + + while read line + do + skipCrossGenFiles[$line]=1 + done < "$(dirname "$0")/skipCrossGenFiles.$ARCH.txt" if [ $doCrossgen == 1 ]; then local overlayDir=$CORE_ROOT - filesToPrecompile=$(ls -trh $overlayDir/*.dll) + filesToPrecompile=$(find -L $overlayDir -iname \*.dll -not -iname \*.ni.dll -not -iname \*-ms-win-\* -type f ) for fileToPrecompile in ${filesToPrecompile} do local filename=${fileToPrecompile} @@ -385,15 +392,23 @@ function precompile_overlay_assemblies { echo Unable to generate dasm for $filename fi else + if [[ ${skipCrossGenFiles[$(basename $filename)]:-0} == 0 ]]; then + continue + fi echo Precompiling $filename - $overlayDir/crossgen /Platform_Assemblies_Paths $overlayDir $filename 2>/dev/null + $overlayDir/crossgen /Platform_Assemblies_Paths $overlayDir $filename 1> $filename.stdout 2>$filename.stderr local exitCode=$? - if [ $exitCode == -2146230517 ]; then - echo $filename is not a managed assembly. - elif [ $exitCode != 0 ]; then - echo Unable to precompile $filename. + if [[ $exitCode != 0 ]]; then + if grep -q -e '(COR_E_ASSEMBLYEXPECTED)' $filename.stderr; then + printf "\n\t$filename is not a managed assembly.\n\n" + else + echo Unable to precompile $filename. + cat $filename.stdout + cat $filename.stderr + exit $exitCode + fi else - echo Successfully precompiled $filename + rm $filename.{stdout,stderr} fi fi done diff --git a/tests/skipCrossGenFiles.arm.txt b/tests/skipCrossGenFiles.arm.txt new file mode 100644 index 0000000..df66983 --- /dev/null +++ b/tests/skipCrossGenFiles.arm.txt @@ -0,0 +1,2 @@ +mscorlib.dll +System.Runtime.WindowsRuntime.UI.Xaml.dll diff --git a/tests/skipCrossGenFiles.arm64.txt b/tests/skipCrossGenFiles.arm64.txt new file mode 100644 index 0000000..53eec85 --- /dev/null +++ b/tests/skipCrossGenFiles.arm64.txt @@ -0,0 +1,5 @@ +System.Runtime.WindowsRuntime.UI.Xaml.dll +Microsoft.CodeAnalysis.VisualBasic.dll +System.Net.NameResolution.dll +System.Net.Sockets.dll +System.Net.Primitives.dll diff --git a/tests/skipCrossGenFiles.x64.txt b/tests/skipCrossGenFiles.x64.txt new file mode 100644 index 0000000..df66983 --- /dev/null +++ b/tests/skipCrossGenFiles.x64.txt @@ -0,0 +1,2 @@ +mscorlib.dll +System.Runtime.WindowsRuntime.UI.Xaml.dll diff --git a/tests/skipCrossGenFiles.x86.txt b/tests/skipCrossGenFiles.x86.txt new file mode 100644 index 0000000..df66983 --- /dev/null +++ b/tests/skipCrossGenFiles.x86.txt @@ -0,0 +1,2 @@ +mscorlib.dll +System.Runtime.WindowsRuntime.UI.Xaml.dll -- 2.7.4