@@ -705,8 +705,18 @@ PTR_PEImageLayout PEImage::GetOrCreateLayoutInternal(DWORD imageLayoutMask)
705
705
{
706
706
bIsLoadedLayoutPreferred = TRUE ;
707
707
}
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);
709
713
714
+ if (pRetVal == NULL )
715
+ {
716
+ bIsLoadedLayoutPreferred = TRUE ;
717
+ }
718
+ }
719
+ #endif // TARGET_UNIX
710
720
_ASSERTE (bIsLoadedLayoutSuitable || bIsFlatLayoutSuitable);
711
721
712
722
if (bIsLoadedLayoutPreferred)
@@ -718,7 +728,7 @@ PTR_PEImageLayout PEImage::GetOrCreateLayoutInternal(DWORD imageLayoutMask)
718
728
if (pRetVal == NULL )
719
729
{
720
730
_ASSERTE (bIsFlatLayoutSuitable);
721
- pRetVal = PEImage::CreateFlatLayout ();
731
+ pRetVal = PEImage::CreateFlatLayout (false );
722
732
_ASSERTE (pRetVal != NULL );
723
733
}
724
734
}
@@ -764,7 +774,7 @@ PTR_PEImageLayout PEImage::CreateLoadedLayout(bool throwOnFailure)
764
774
return pLoadLayout;
765
775
}
766
776
767
- PTR_PEImageLayout PEImage::CreateFlatLayout ()
777
+ PTR_PEImageLayout PEImage::CreateFlatLayout (BOOL bCheckReadyToRunHeader )
768
778
{
769
779
CONTRACTL
770
780
{
@@ -775,8 +785,19 @@ PTR_PEImageLayout PEImage::CreateFlatLayout()
775
785
CONTRACTL_END;
776
786
777
787
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
+ }
780
801
}
781
802
782
803
/* static */
0 commit comments