LoaderHeap: remove LHF_ZEROINIT option.
authorKonstantin Baladurin <k.baladurin@partner.samsung.com>
Fri, 12 Jan 2018 16:11:05 +0000 (19:11 +0300)
committerJan Kotas <jkotas@microsoft.com>
Fri, 12 Jan 2018 20:40:37 +0000 (12:40 -0800)
This option was used for UMEntryThunkCode::Poison. Now we use own free list
to store freed thunks and don't return allocated memory to the LoaderHeap.
So reused thunks are always uninitialized.

Commit migrated from https://github.com/dotnet/coreclr/commit/02f172c7f0476df791ebc364344b73464b83a73c

src/coreclr/src/inc/loaderheap.h
src/coreclr/src/utilcode/loaderheap.cpp
src/coreclr/src/vm/dllimportcallback.cpp
src/coreclr/src/vm/loaderallocator.cpp

index 86a0e90..a2dec9c 100644 (file)
@@ -288,8 +288,7 @@ protected:
                        SIZE_T dwReservedRegionSize,
                        size_t *pPrivatePerfCounter_LoaderBytes = NULL,
                        RangeList *pRangeList = NULL,
-                       BOOL fMakeExecutable = FALSE,
-                       BOOL fZeroInit = TRUE);
+                       BOOL fMakeExecutable = FALSE);
 
     ~UnlockedLoaderHeap();
 #endif
@@ -400,8 +399,6 @@ public:
     }
 
     BOOL IsExecutable();
-    BOOL IsZeroInit();
-
 
 public:
 #ifdef _DEBUG
@@ -446,16 +443,14 @@ public:
                DWORD dwCommitBlockSize,
                size_t *pPrivatePerfCounter_LoaderBytes = NULL,
                RangeList *pRangeList = NULL,
-               BOOL fMakeExecutable = FALSE,
-               BOOL fZeroInit = TRUE
+               BOOL fMakeExecutable = FALSE
                )
       : UnlockedLoaderHeap(dwReserveBlockSize,
                            dwCommitBlockSize,
                            NULL, 0,
                            pPrivatePerfCounter_LoaderBytes,
                            pRangeList,
-                           fMakeExecutable,
-                           fZeroInit)
+                           fMakeExecutable)
     {
         WRAPPER_NO_CONTRACT;
         m_CriticalSection = NULL;
@@ -470,8 +465,7 @@ public:
                SIZE_T dwReservedRegionSize,
                size_t *pPrivatePerfCounter_LoaderBytes = NULL,
                RangeList *pRangeList = NULL,
-               BOOL fMakeExecutable = FALSE,
-               BOOL fZeroInit = TRUE
+               BOOL fMakeExecutable = FALSE
                )
       : UnlockedLoaderHeap(dwReserveBlockSize,
                            dwCommitBlockSize,
@@ -479,8 +473,7 @@ public:
                            dwReservedRegionSize,
                            pPrivatePerfCounter_LoaderBytes,
                            pRangeList,
-                           fMakeExecutable,
-                           fZeroInit)
+                           fMakeExecutable)
     {
         WRAPPER_NO_CONTRACT;
         m_CriticalSection = NULL;
index 90b23c3..49f8a04 100644 (file)
@@ -11,7 +11,6 @@
 #include "eventtracebase.h"
 
 #define LHF_EXECUTABLE  0x1
-#define LHF_ZEROINIT    0x2
 
 #ifndef DACCESS_COMPILE
 
@@ -906,8 +905,7 @@ UnlockedLoaderHeap::UnlockedLoaderHeap(DWORD dwReserveBlockSize,
                                        SIZE_T dwReservedRegionSize, 
                                        size_t *pPrivatePerfCounter_LoaderBytes,
                                        RangeList *pRangeList,
-                                       BOOL fMakeExecutable,
-                                       BOOL fZeroInit)
+                                       BOOL fMakeExecutable)
 {
     CONTRACTL
     {
@@ -950,9 +948,6 @@ UnlockedLoaderHeap::UnlockedLoaderHeap(DWORD dwReserveBlockSize,
         m_Options                |= LHF_EXECUTABLE;
 #endif // CROSSGEN_COMPILE
 
-    if (fZeroInit)
-        m_Options                |= LHF_ZEROINIT;
-
     m_pFirstFreeBlock            = NULL;
 
     if (dwReservedRegionAddress != NULL && dwReservedRegionSize > 0)
@@ -1360,7 +1355,7 @@ again:
             // Don't fill the memory we allocated - it is assumed to be zeroed - fill the memory after it
             memset(pAllocatedBytes + dwRequestedSize, 0xEE, LOADER_HEAP_DEBUG_BOUNDARY);
 #endif
-            if ((dwRequestedSize > 0) && (m_Options & LHF_ZEROINIT))
+            if (dwRequestedSize > 0)
             {
                 _ASSERTE_MSG(pAllocatedBytes[0] == 0 && memcmp(pAllocatedBytes, pAllocatedBytes + 1, dwRequestedSize - 1) == 0,
                     "LoaderHeap must return zero-initialized memory");
@@ -1538,8 +1533,7 @@ void UnlockedLoaderHeap::UnlockedBackoutMem(void *pMem,
     {
         // Cool. This was the last block allocated. We can just undo the allocation instead
         // of going to the freelist.
-        if (m_Options & LHF_ZEROINIT)
-            memset(pMem, 0x00, dwSize); // Fill freed region with 0
+        memset(pMem, 0x00, dwSize); // Fill freed region with 0
         m_pAllocPtr = (BYTE*)pMem;
     }
     else
@@ -1657,7 +1651,7 @@ void *UnlockedLoaderHeap::UnlockedAllocAlignedMem_NoThrow(size_t  dwRequestedSiz
     memset(pAllocatedBytes + dwRequestedSize, 0xee, LOADER_HEAP_DEBUG_BOUNDARY);
 #endif
 
-    if ((dwRequestedSize != 0) && (m_Options & LHF_ZEROINIT))
+    if (dwRequestedSize != 0)
     {
         _ASSERTE_MSG(pAllocatedBytes[0] == 0 && memcmp(pAllocatedBytes, pAllocatedBytes + 1, dwRequestedSize - 1) == 0,
             "LoaderHeap must return zero-initialized memory");
@@ -1782,11 +1776,6 @@ BOOL UnlockedLoaderHeap::IsExecutable()
     return (m_Options & LHF_EXECUTABLE);
 }
 
-BOOL UnlockedLoaderHeap::IsZeroInit()
-{
-    return (m_Options & LHF_ZEROINIT);
-}
-
 #ifdef DACCESS_COMPILE
 
 void UnlockedLoaderHeap::EnumMemoryRegions(CLRDataEnumMemoryFlags flags)
index 8623d46..2becba5 100644 (file)
@@ -1153,7 +1153,6 @@ void UMEntryThunk::Terminate()
     }
     CONTRACTL_END;
 
-    _ASSERTE(!SystemDomain::GetGlobalLoaderAllocator()->GetExecutableHeap()->IsZeroInit());
     m_code.Poison();
 
     s_thunkFreeList.AddToList(this);
index ff54277..a27de7e 100644 (file)
@@ -1005,8 +1005,7 @@ void LoaderAllocator::Init(BaseDomain *pDomain, BYTE *pExecutableHeapMemory)
                                                                       dwExecutableHeapReserveSize,
                                                                       LOADERHEAP_PROFILE_COUNTER,
                                                                       NULL,
-                                                                      TRUE /* Make heap executable */,
-                                                                      FALSE /* Disable zero-initialization (needed by UMEntryThunkCode::Poison) */
+                                                                      TRUE /* Make heap executable */
                                                                       );
         initReservedMem += dwExecutableHeapReserveSize;
     }