Skip to content

Commit

Permalink
[release/6.0] Fix ReadyToRun loading on Apple Silicon (#64104)
Browse files Browse the repository at this point in the history
* Fix Compiler::impImportNewObjArray on osx-arm64

* Fix broken ReadyToRun loading on Apple Silicon

* Reject R2R images containing calls to CORINFO_HELP_NEW_MDARR
  • Loading branch information
jgiannuzzi authored Feb 7, 2022
1 parent c849005 commit 8f7dff3
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 4 deletions.
4 changes: 4 additions & 0 deletions src/coreclr/jit/importer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6960,7 +6960,9 @@ void Compiler::impImportNewObjArray(CORINFO_RESOLVED_TOKEN* pResolvedToken, CORI
//
CLANG_FORMAT_COMMENT_ANCHOR;

#ifndef OSX_ARM64_ABI
if (!opts.IsReadyToRun() || IsTargetAbi(CORINFO_CORERT_ABI))
#endif // !OSX_ARM64_ABI
{

// Reuse the temp used to pass the array dimensions to avoid bloating
Expand Down Expand Up @@ -7017,6 +7019,7 @@ void Compiler::impImportNewObjArray(CORINFO_RESOLVED_TOKEN* pResolvedToken, CORI

node = gtNewHelperCallNode(CORINFO_HELP_NEW_MDARR_NONVARARG, TYP_REF, args);
}
#ifndef OSX_ARM64_ABI
else
{
//
Expand Down Expand Up @@ -7046,6 +7049,7 @@ void Compiler::impImportNewObjArray(CORINFO_RESOLVED_TOKEN* pResolvedToken, CORI
}
#endif
}
#endif // !OSX_ARM64_ABI

for (GenTreeCall::Use& use : node->AsCall()->Args())
{
Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/pal/src/map/map.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2047,9 +2047,9 @@ MAPmmapAndRecord(

// Set the requested mapping with forced PROT_WRITE to ensure data from the file can be read there,
// read the data in and finally remove the forced PROT_WRITE
if ((mprotect(pvBaseAddress, len + adjust, prot | PROT_WRITE) == -1) ||
if ((mprotect(pvBaseAddress, len + adjust, PROT_WRITE) == -1) ||
(pread(fd, pvBaseAddress, len + adjust, offset - adjust) == -1) ||
(((prot & PROT_WRITE) == 0) && mprotect(pvBaseAddress, len + adjust, prot) == -1))
(mprotect(pvBaseAddress, len + adjust, prot) == -1))
{
palError = FILEGetLastErrorFromErrno();
}
Expand Down
7 changes: 7 additions & 0 deletions src/coreclr/vm/jitinterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14200,6 +14200,13 @@ BOOL LoadDynamicInfoEntry(Module *currentModule,
CorInfoHelpFunc corInfoHelpFunc = MapReadyToRunHelper((ReadyToRunHelper)helperNum);
if (corInfoHelpFunc != CORINFO_HELP_UNDEF)
{
#ifdef OSX_ARM64_ABI
if (corInfoHelpFunc == CORINFO_HELP_NEW_MDARR)
{
STRESS_LOG(LF_ZAP, LL_WARNING, "CORINFO_HELP_NEW_MDARR is not supported on osx-arm64\n");
return FALSE;
}
#endif // OSX_ARM64_ABI
result = (size_t)CEEJitInfo::getHelperFtnStatic(corInfoHelpFunc);
}
else
Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/vm/peimagelayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -235,14 +235,14 @@ void PEImageLayout::ApplyBaseRelocations()
if (((pSection->Characteristics & VAL32(IMAGE_SCN_MEM_WRITE)) == 0))
{
DWORD dwNewProtection = PAGE_READWRITE;
#if defined(TARGET_UNIX) && !defined(CROSSGEN_COMPILE)
#if defined(TARGET_UNIX) && !defined(CROSSGEN_COMPILE) && !defined(__APPLE__)
if (((pSection->Characteristics & VAL32(IMAGE_SCN_MEM_EXECUTE)) != 0))
{
// On SELinux, we cannot change protection that doesn't have execute access rights
// to one that has it, so we need to set the protection to RWX instead of RW
dwNewProtection = PAGE_EXECUTE_READWRITE;
}
#endif // TARGET_UNIX && !CROSSGEN_COMPILE
#endif // TARGET_UNIX && !CROSSGEN_COMPILE && !__APPLE__
if (!ClrVirtualProtect(pWriteableRegion, cbWriteableRegion,
dwNewProtection, &dwOldProtection))
ThrowLastError();
Expand Down

0 comments on commit 8f7dff3

Please sign in to comment.