[Local GC] Remove a number of inclusions of handle table private headers from the...
authorSean Gillespie <segilles@microsoft.com>
Fri, 23 Jun 2017 21:48:41 +0000 (14:48 -0700)
committerGitHub <noreply@github.com>
Fri, 23 Jun 2017 21:48:41 +0000 (14:48 -0700)
* Remove inclusions of private handle table headers from the VM

* Add TraceRefCountedHandles to the GC handle table interface

* Fix the Unix build

* Move ValidatePinnedObject to marshalnative.h

34 files changed:
src/debug/daccess/dacimpl.h
src/debug/ee/dactable.cpp
src/gc/gchandletable.cpp
src/gc/gchandletableimpl.h
src/gc/gcinterface.h
src/gc/gcsvr.cpp
src/gc/gcwks.cpp
src/gc/handletable.h
src/gc/objecthandle.cpp
src/gc/objecthandle.h
src/strongname/api/common.h
src/vm/ceemain.cpp
src/vm/class.h
src/vm/classcompat.h
src/vm/clrex.h
src/vm/comcallablewrapper.cpp
src/vm/comcallablewrapper.h
src/vm/common.h
src/vm/dispatchinfo.cpp
src/vm/eventtrace.cpp
src/vm/field.h
src/vm/frames.cpp
src/vm/frames.h
src/vm/handletable.h [deleted file]
src/vm/handletable.inl [deleted file]
src/vm/marshalnative.cpp
src/vm/marshalnative.h
src/vm/methodtable.h
src/vm/nativeoverlapped.cpp
src/vm/objecthandle.h [deleted file]
src/vm/rcwrefcache.cpp
src/vm/runtimecallablewrapper.h
src/vm/runtimehandles.cpp
src/vm/syncblk.h

index cd133eb..c3a1c46 100644 (file)
 #ifndef __DACIMPL_H__
 #define __DACIMPL_H__
 
+// This header include will need to be removed as part of GitHub#12170.
+// The only reason it's here now is that this header references the GC-private
+// structure "HandleTableMap".
+#include "../../gc/objecthandle.h"
+
 #if defined(_TARGET_ARM_) || defined(FEATURE_CORESYSTEM) // @ARMTODO: STL breaks the build with current VC headers
 //---------------------------------------------------------------------------------------
 // Setting DAC_HASHTABLE tells the DAC to use the hand rolled hashtable for
index 1fede32..dbe6482 100644 (file)
 
 #include "stdafx.h"
 #include <daccess.h>
+
+// This header include will need to be rmeoved as part of GitHub#12170.
+// The only reason it's here now is that this file references the GC-private
+// variable g_HandleTableMap.
+#include "../../gc/objecthandle.h"
 #include "../../vm/virtualcallstub.h"
 #include "../../vm/win32threadpool.h"
 #include "../../vm/hillclimbing.h"
index 38ca0cd..03464b2 100644 (file)
@@ -187,3 +187,8 @@ HandleType GCHandleManager::HandleFetchType(OBJECTHANDLE handle)
     return static_cast<HandleType>(type);
 }
 
+void GCHandleManager::TraceRefCountedHandles(HANDLESCANPROC callback, uintptr_t param1, uintptr_t param2)
+{
+    ::Ref_TraceRefCountHandles(callback, param1, param2);
+}
+
index 288927c..f336a3b 100644 (file)
@@ -72,6 +72,8 @@ public:
     virtual Object* InterlockedCompareExchangeObjectInHandle(OBJECTHANDLE handle, Object* object, Object* comparandObject);
 
     virtual HandleType HandleFetchType(OBJECTHANDLE handle);
+
+    virtual void TraceRefCountedHandles(HANDLESCANPROC callback, uintptr_t param1, uintptr_t param2);
 };
 
 #endif  // GCHANDLETABLE_H_
index e474ee2..ec7c457 100644 (file)
@@ -466,6 +466,8 @@ public:
     virtual Object* InterlockedCompareExchangeObjectInHandle(OBJECTHANDLE handle, Object* object, Object* comparandObject) = 0;
 
     virtual HandleType HandleFetchType(OBJECTHANDLE handle) = 0;
+
+    virtual void TraceRefCountedHandles(HANDLESCANPROC callback, uintptr_t param1, uintptr_t param2) = 0;
 };
 
 // IGCHeap is the interface that the VM will use when interacting with the GC.
@@ -820,6 +822,14 @@ void updateGCShadow(Object** ptr, Object* val);
 #define GC_ALLOC_ALIGN8_BIAS 0x4
 #define GC_ALLOC_ALIGN8 0x8
 
+#if defined(USE_CHECKED_OBJECTREFS) && !defined(_NOVM)
+#define OBJECTREF_TO_UNCHECKED_OBJECTREF(objref)    (*((_UNCHECKED_OBJECTREF*)&(objref)))
+#define UNCHECKED_OBJECTREF_TO_OBJECTREF(obj)       (OBJECTREF(obj))
+#else
+#define OBJECTREF_TO_UNCHECKED_OBJECTREF(objref)    (objref)
+#define UNCHECKED_OBJECTREF_TO_OBJECTREF(obj)       (obj)
+#endif
+
 struct ScanContext
 {
     Thread* thread_under_crawl;
index 70801dd..6f89cab 100644 (file)
@@ -14,6 +14,8 @@
 #include "gcscan.h"
 #include "gcdesc.h"
 #include "softwarewritewatch.h"
+#include "handletable.h"
+#include "handletable.inl"
 
 #define SERVER_GC 1
 
index 5c489df..07a4e20 100644 (file)
@@ -12,6 +12,8 @@
 #include "gcscan.h"
 #include "gcdesc.h"
 #include "softwarewritewatch.h"
+#include "handletable.h"
+#include "handletable.inl"
 
 #ifdef SERVER_GC
 #undef SERVER_GC
index aff9f16..a952ad7 100644 (file)
@@ -138,14 +138,6 @@ uint32_t        HndCountAllHandles(BOOL fUseLocks);
 /*--------------------------------------------------------------------------*/
 
 
-#if defined(USE_CHECKED_OBJECTREFS) && !defined(_NOVM)
-#define OBJECTREF_TO_UNCHECKED_OBJECTREF(objref)    (*((_UNCHECKED_OBJECTREF*)&(objref)))
-#define UNCHECKED_OBJECTREF_TO_OBJECTREF(obj)       (OBJECTREF(obj))
-#else
-#define OBJECTREF_TO_UNCHECKED_OBJECTREF(objref)    (objref)
-#define UNCHECKED_OBJECTREF_TO_OBJECTREF(obj)       (obj)
-#endif
-
 #ifdef _DEBUG_IMPL
 void ValidateAssignObjrefForHandle(OBJECTREF, ADIndex appDomainIndex);
 void ValidateFetchObjrefForHandle(OBJECTREF, ADIndex appDomainIndex);
index e69e210..d7c5d39 100644 (file)
@@ -1162,10 +1162,10 @@ void Ref_TraceNormalRoots(uint32_t condemned, uint32_t maxgen, ScanContext* sc,
 #endif // FEATURE_COMINTEROP || FEATURE_REDHAWK
 }
 
-#ifdef FEATURE_COMINTEROP
 
 void Ref_TraceRefCountHandles(HANDLESCANPROC callback, uintptr_t lParam1, uintptr_t lParam2)
 {
+#ifdef FEATURE_COMINTEROP
     int max_slots = getNumberOfSlots();
     uint32_t handleType = HNDTYPE_REFCOUNTED;
 
@@ -1186,9 +1186,13 @@ void Ref_TraceRefCountHandles(HANDLESCANPROC callback, uintptr_t lParam1, uintpt
         }
         walk = walk->pNext;
     }
+#else
+    UNREFERENCED_PARAMETER(callback);
+    UNREFERENCED_PARAMETER(lParam1);
+    UNREFERENCED_PARAMETER(lParam2);
+#endif // FEATURE_COMINTEROP
 }
 
-#endif
 
 
 
index 6ae75b4..6b8bcb7 100644 (file)
@@ -72,8 +72,6 @@ uint32_t     GetVariableHandleType(OBJECTHANDLE handle);
 void         UpdateVariableHandleType(OBJECTHANDLE handle, uint32_t type);
 uint32_t     CompareExchangeVariableHandleType(OBJECTHANDLE handle, uint32_t oldType, uint32_t newType);
 
-void GCHandleValidatePinnedObject(OBJECTREF obj);
-
 /*
  * Convenience prototypes for using the global handles
  */
index c6b9b4d..92fb5b4 100644 (file)
@@ -304,7 +304,6 @@ namespace Loader
 #include "eeconfig.h"
 
 #include "spinlock.h"
-#include "objecthandle.h"
 #include "cgensys.h"
 #include "declsec.h"
 
@@ -319,7 +318,6 @@ namespace Loader
 
 #include "eehash.h"
 
-#include "handletable.h"
 #include "vars.hpp"
 #include "eventstore.hpp"
 
@@ -392,7 +390,6 @@ extern DummyGlobalContract ___contract;
 #include "ceeload.inl"
 #include "clsload.inl"
 #include "domainfile.inl"
-#include "handletable.inl"
 #include "clsload.inl"
 #include "method.inl"
 #include "stackprobe.inl"
index a1c6e7e..f28785b 100644 (file)
 #include "syncblk.h"
 #include "eeconfig.h"
 #include "stublink.h"
-#include "handletable.h"
 #include "method.hpp"
 #include "codeman.h"
 #include "frames.h"
index cb47508..d1f10d4 100644 (file)
@@ -43,7 +43,6 @@
 #include "clrex.h"
 #include "hash.h"
 #include "crst.h"
-#include "objecthandle.h"
 #include "cgensys.h"
 #include "declsec.h"
 #ifdef FEATURE_COMINTEROP
index 678cb79..9b3c8fd 100644 (file)
@@ -19,7 +19,6 @@
 #include "clrex.h"
 #include "hash.h"
 #include "crst.h"
-#include "objecthandle.h"
 #include "cgensys.h"
 #include "declsec.h"
 #include "stdinterfaces.h"
index 15d1071..ce55ebc 100644 (file)
@@ -14,7 +14,6 @@
 
 #include <ex.h>
 
-#include "objecthandle.h"
 #include "runtimeexceptionkind.h"
 #include "interoputil.h"
 
index af8b7b4..fdb0e54 100644 (file)
@@ -31,7 +31,6 @@
 #include "cgensys.h"
 #include "comtoclrcall.h"
 #include "clrtocomcall.h"
-#include "objecthandle.h"
 #include "comutilnative.h"
 #include "eeconfig.h"
 #include "interoputil.h"
index dc0cf4f..8564727 100644 (file)
@@ -17,7 +17,6 @@
 #include "vars.hpp"
 #include "stdinterfaces.h"
 #include "threads.h"
-#include "objecthandle.h"
 #include "comutilnative.h"
 #include "spinlock.h"
 #include "comtoclrcall.h"
index 15b97f1..a52566d 100644 (file)
@@ -320,7 +320,6 @@ namespace Loader
 #include "eeconfig.h"
 
 #include "spinlock.h"
-#include "objecthandle.h"
 #include "declsec.h"
 
 #ifdef FEATURE_COMINTEROP 
@@ -334,7 +333,6 @@ namespace Loader
 
 #include "eehash.h"
 
-#include "handletable.h"
 #include "vars.hpp"
 #include "eventstore.hpp"
 
@@ -472,7 +470,6 @@ extern DummyGlobalContract ___contract;
 #include "object.inl"
 #include "clsload.inl"
 #include "domainfile.inl"
-#include "handletable.inl"
 #include "method.inl"
 #include "stackprobe.inl"
 #include "syncblk.inl"
index 0881b29..ee29506 100644 (file)
@@ -22,7 +22,6 @@
 #include "comcallablewrapper.h"
 #include "threads.h"
 #include "excep.h"
-#include "objecthandle.h"
 #include "comutilnative.h"
 #include "eeconfig.h"
 #include "interoputil.h"
index ebe2f11..16f729d 100644 (file)
@@ -1343,7 +1343,7 @@ void BulkComLogger::LogAllComObjects()
     // We need to do work in HandleWalkCallback which may trigger a GC.  We cannot do this while
     // enumerating the handle table.  Instead, we will build a list of RefCount handles we found
     // during the handle table enumeration first (m_enumResult) during this enumeration:
-    Ref_TraceRefCountHandles(BulkComLogger::HandleWalkCallback, uintptr_t(this), 0);
+    GCHandleUtilities::GetGCHandleManager()->TraceRefCountedHandles(BulkComLogger::HandleWalkCallback, uintptr_t(this), 0);
 
     // Now that we have all of the object handles, we will walk all of the handles and write the
     // etw events.
index 8f6668b..52b9d68 100644 (file)
@@ -10,7 +10,6 @@
 #ifndef _FIELD_H_
 #define _FIELD_H_
 
-#include "objecthandle.h"
 #include "excep.h"
 
 // Temporary values stored in FieldDesc m_dwOffset during loading
index 6598357..86bb97b 100644 (file)
@@ -16,7 +16,6 @@
 #include "security.h"
 #include "stublink.h"
 #include "fieldmarshaler.h"
-#include "objecthandle.h"
 #include "siginfo.hpp"
 #include "gcheaputilities.h"
 #include "dllimportcallback.h"
index 108f9f7..2ee197d 100644 (file)
@@ -276,7 +276,6 @@ FRAME_TYPE_NAME(AssumeByrefFromJITStack)
 #include "vars.hpp"
 #include "regdisp.h"
 #include "object.h"
-#include "objecthandle.h"
 #include <stddef.h>
 #include "siginfo.hpp"
 // context headers
diff --git a/src/vm/handletable.h b/src/vm/handletable.h
deleted file mode 100644 (file)
index ca1d78e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "../gc/handletable.h"
diff --git a/src/vm/handletable.inl b/src/vm/handletable.inl
deleted file mode 100644 (file)
index 86c93b8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "../gc/handletable.inl"
index 8aebd9a..34d7a86 100644 (file)
@@ -30,7 +30,6 @@
 #include "gcheaputilities.h"
 #include "security.h"
 #include "dbginterface.h"
-#include "objecthandle.h"
 #include "marshalnative.h"
 #include "fcall.h"
 #include "dllimportcallback.h"
@@ -592,7 +591,7 @@ FCIMPLEND
 
  // Check that the supplied object is valid to put in a pinned handle.
 // Throw an exception if not.
-void GCHandleValidatePinnedObject(OBJECTREF obj)
+void ValidatePinnedObject(OBJECTREF obj)
 {
     CONTRACTL
     {
@@ -642,7 +641,7 @@ FCIMPL2(LPVOID, MarshalNative::GCHandleInternalAlloc, Object *obj, int type)
 
     // If it is a pinned handle, check the object type.
     if (type == HNDTYPE_PINNED)
-        GCHandleValidatePinnedObject(objRef);
+        ValidatePinnedObject(objRef);
 
     assert(type >= HNDTYPE_WEAK_SHORT && type <= HNDTYPE_WEAK_WINRT);
     // Create the handle.
@@ -701,7 +700,7 @@ FCIMPL3(VOID, MarshalNative::GCHandleInternalSet, OBJECTHANDLE handle, Object *o
     //<TODO>@todo: If the handle is pinned check the object type.</TODO>
     if (isPinned)
     {
-        GCHandleValidatePinnedObject(objRef);
+        ValidatePinnedObject(objRef);
     }
 
     // Update the stored object reference.
@@ -722,7 +721,7 @@ FCIMPL4(Object*, MarshalNative::GCHandleInternalCompareExchange, OBJECTHANDLE ha
 
     //<TODO>@todo: If the handle is pinned check the object type.</TODO>
     if (isPinned)
-        GCHandleValidatePinnedObject(newObjref);
+        ValidatePinnedObject(newObjref);
 
     // Update the stored object reference.
     ret = InterlockedCompareExchangeObjectInHandle(handle, newObjref, oldObjref);
@@ -785,7 +784,7 @@ FCIMPL1(INT32, MarshalNative::CalculateCount, ArrayWithOffsetData* pArrayWithOff
         if (arrayObj->GetMethodTable()->IsMultiDimArray())
             COMPlusThrow(kArgumentException, IDS_EE_NOTISOMORPHIC);
 
-        GCHandleValidatePinnedObject(arrayObj);
+        ValidatePinnedObject(arrayObj);
     }
 
     if (arrayObj == NULL)
index 872f784..f5d4d04 100644 (file)
@@ -239,4 +239,8 @@ private:
 #endif // FEATURE_COMINTEROP
 };
 
+// Check that the supplied object is valid to put in a pinned handle,
+// throwing an exception if not.
+void ValidatePinnedObject(OBJECTREF obj);
+
 #endif
index d8e7528..d3eb0ce 100644 (file)
@@ -21,7 +21,6 @@
 #include "cor.h"
 #include "hash.h"
 #include "crst.h"
-#include "objecthandle.h"
 #include "cgensys.h"
 #include "declsec.h"
 #ifdef FEATURE_COMINTEROP
index 027af31..bcbef77 100644 (file)
@@ -20,6 +20,7 @@
 #include "mdaassistants.h"
 #include "comsynchronizable.h"
 #include "comthreadpool.h"
+#include "marshalnative.h"
 
 LONG OverlappedDataObject::s_CleanupRequestCount = 0;
 BOOL OverlappedDataObject::s_CleanupInProgress = FALSE;
@@ -137,7 +138,7 @@ FCIMPL1(void*, AllocateNativeOverlapped, OverlappedDataObject* overlappedUNSAFE)
             SIZE_T i;
             for (i = 0; i < num; i ++)
             {
-                GCHandleValidatePinnedObject(pObj[i]);
+                ValidatePinnedObject(pObj[i]);
             }
             for (i = 0; i < num; i ++)
             {
@@ -147,7 +148,7 @@ FCIMPL1(void*, AllocateNativeOverlapped, OverlappedDataObject* overlappedUNSAFE)
         }
         else
         {
-            GCHandleValidatePinnedObject(userObject);
+            ValidatePinnedObject(userObject);
             AddMTForPinHandle(userObject);
         }
         
diff --git a/src/vm/objecthandle.h b/src/vm/objecthandle.h
deleted file mode 100644 (file)
index 0944648..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "../gc/objecthandle.h"
index acb174d..a4cdf80 100644 (file)
@@ -17,7 +17,6 @@
 
 #include "common.h"
 
-#include "objecthandle.h"
 #include "rcwrefcache.h"
 #include "comcallablewrapper.h"
 #include "runtimecallablewrapper.h"
index 90fb6b6..c88230d 100644 (file)
@@ -61,7 +61,6 @@
 
 #include "utilcode.h"
 #include "vars.hpp"
-#include "objecthandle.h"
 #include "spinlock.h"
 #include "interoputil.h"
 #include "mngstdinterfaces.h"
index da47cc9..d3dad5a 100644 (file)
@@ -22,7 +22,6 @@
 #include "stackprobe.h"
 #include "eeconfig.h"
 #include "eehash.h"
-#include "objecthandle.h"
 #include "interoputil.h"
 #include "typedesc.h"
 #include "virtualcallstub.h"
index 6d32e3e..c6c63ae 100644 (file)
@@ -16,7 +16,6 @@
 #include "util.hpp"
 #include "slist.h"
 #include "crst.h"
-#include "handletable.h"
 #include "vars.hpp"
 
 // #SyncBlockOverview