Skip to content

Commit fd71f3e

Browse files
committed
Fix R2R files doublemap on UNIX
1 parent 478cfe2 commit fd71f3e

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

src/coreclr/vm/peimage.cpp

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -705,8 +705,18 @@ PTR_PEImageLayout PEImage::GetOrCreateLayoutInternal(DWORD imageLayoutMask)
705705
{
706706
bIsLoadedLayoutPreferred = TRUE;
707707
}
708-
#endif // !TARGET_UNIX
708+
#elif defined (TARGET_UNIX)
709+
// Check for R2R image, prefer LoadedLayout for R2R
710+
if (bIsLoadedLayoutSuitable && bIsFlatLayoutSuitable)
711+
{
712+
pRetVal = PEImage::CreateFlatLayout(bIsLoadedLayoutSuitable);
709713

714+
if (pRetVal == NULL)
715+
{
716+
bIsLoadedLayoutPreferred = TRUE;
717+
}
718+
}
719+
#endif // TARGET_UNIX
710720
_ASSERTE(bIsLoadedLayoutSuitable || bIsFlatLayoutSuitable);
711721

712722
if (bIsLoadedLayoutPreferred)
@@ -718,7 +728,7 @@ PTR_PEImageLayout PEImage::GetOrCreateLayoutInternal(DWORD imageLayoutMask)
718728
if (pRetVal == NULL)
719729
{
720730
_ASSERTE(bIsFlatLayoutSuitable);
721-
pRetVal = PEImage::CreateFlatLayout();
731+
pRetVal = PEImage::CreateFlatLayout(false);
722732
_ASSERTE(pRetVal != NULL);
723733
}
724734
}
@@ -764,7 +774,7 @@ PTR_PEImageLayout PEImage::CreateLoadedLayout(bool throwOnFailure)
764774
return pLoadLayout;
765775
}
766776

767-
PTR_PEImageLayout PEImage::CreateFlatLayout()
777+
PTR_PEImageLayout PEImage::CreateFlatLayout(BOOL bCheckReadyToRunHeader)
768778
{
769779
CONTRACTL
770780
{
@@ -775,8 +785,19 @@ PTR_PEImageLayout PEImage::CreateFlatLayout()
775785
CONTRACTL_END;
776786

777787
PTR_PEImageLayout pFlatLayout = PEImageLayout::LoadFlat(this);
778-
SetLayout(IMAGE_FLAT, pFlatLayout);
779-
return pFlatLayout;
788+
789+
if (bCheckReadyToRunHeader && pFlatLayout->HasReadyToRunHeader())
790+
{
791+
pFlatLayout->Release();
792+
793+
return NULL;
794+
}
795+
else
796+
{
797+
SetLayout(IMAGE_FLAT, pFlatLayout);
798+
799+
return pFlatLayout;
800+
}
780801
}
781802

782803
/* static */

src/coreclr/vm/peimage.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ class PEImage final
195195
PTR_PEImageLayout CreateLoadedLayout(bool throwOnFailure);
196196

197197
// Create the flat layout
198-
PTR_PEImageLayout CreateFlatLayout();
198+
PTR_PEImageLayout CreateFlatLayout(BOOL bIsLoadedLayoutSuitable);
199199

200200
void SetLayout(DWORD dwLayout, PTR_PEImageLayout pLayout);
201201
#endif

0 commit comments

Comments
 (0)