In OpenMethodProfileDataLogFile, we try to set the directory and path for the .ibc files using windows slashes (\). This causes this code to fail on Linux, which uses forward slashes. This is particularly a problem when setting COMPlus_ZapBBInstrDir, which takes that environment variable and attempts to find the name of the file using wcsrchr(assemblyPath, '\'). This causes a crash on linux when collecting IBC counts. The fix is to ifdef it for linux to use the correct path separator.
This change also includes a fix to change the code for checking if IbcTuning is set to use == instead of -eq which was causing a failure in the build that was ignored.
Commit migrated from https://github.com/dotnet/coreclr/commit/
d81a3685df482e8962bf696e44b9071f19bfac2f
# Invoke MSBuild
__ExtraBuildArgs=""
- if [[ "$__IbcTuning" -eq "" ]]; then
+ if [[ "$__IbcTuning" == "" ]]; then
__ExtraBuildArgs="$__ExtraBuildArgs -OptimizationDataDir=\"$__PackagesDir/optimization.$__BuildOS-$__BuildArch.IBC.CoreCLR/$__IbcOptDataVersion/data/\""
__ExtraBuildArgs="$__ExtraBuildArgs -EnableProfileGuidedOptimization=true"
fi
path.Set(assemblyPath); // no, then put it beside the IL dll
}
else {
- LPCWSTR assemblyFileName = wcsrchr(assemblyPath, '\\');
+ LPCWSTR assemblyFileName = wcsrchr(assemblyPath, DIRECTORY_SEPARATOR_CHAR_W);
if (assemblyFileName)
assemblyFileName++; // skip past the \ char
else
assemblyFileName = assemblyPath;
path.Set(ibcDir); // yes, put it in the directory, named with the assembly name.
- path.Append('\\');
+ path.Append(DIRECTORY_SEPARATOR_CHAR_W);
path.Append(assemblyFileName);
}