Replace more of JitHelpers with S.R.CS.Unsafe (#21598)
authorJan Kotas <jkotas@microsoft.com>
Thu, 20 Dec 2018 15:10:07 +0000 (07:10 -0800)
committerGitHub <noreply@github.com>
Thu, 20 Dec 2018 15:10:07 +0000 (07:10 -0800)
- Replace JitHelpers.UnsafeCastToStackPtr with Unsafe.AsPointer
- Delete PinningHelper that was duplicate of RawData helper class

12 files changed:
src/System.Private.CoreLib/src/System/Diagnostics/Eventing/FrameworkEventSource.cs
src/System.Private.CoreLib/src/System/Runtime/CompilerServices/jithelpers.cs
src/System.Private.CoreLib/src/System/Runtime/InteropServices/WindowsRuntime/CLRIPropertyValueImpl.cs
src/System.Private.CoreLib/src/System/Threading/Tasks/TPLETWProvider.cs
src/vm/array.cpp
src/vm/ecalllist.h
src/vm/ilmarshalers.cpp
src/vm/jitinterface.cpp
src/vm/mscorlib.h
src/vm/prestub.cpp
src/vm/reflectioninvocation.cpp
src/vm/reflectioninvocation.h

index dda0a02..323cae2 100644 (file)
@@ -15,6 +15,7 @@ using System.Globalization;
 using System.Reflection;
 using System.Text;
 using System.Runtime.CompilerServices;
+using Internal.Runtime.CompilerServices;
 
 namespace System.Diagnostics.Tracing
 {
@@ -572,7 +573,7 @@ namespace System.Diagnostics.Tracing
         public unsafe void ThreadPoolEnqueueWorkObject(object workID)
         {
             // convert the Object Id to a long
-            ThreadPoolEnqueueWork((long)*((void**)JitHelpers.UnsafeCastToStackPointer(ref workID)));
+            ThreadPoolEnqueueWork((long)*((void**)Unsafe.AsPointer(ref workID)));
         }
 
         [Event(31, Level = EventLevel.Verbose, Keywords = Keywords.ThreadPool | Keywords.ThreadTransfer)]
@@ -588,7 +589,7 @@ namespace System.Diagnostics.Tracing
         public unsafe void ThreadPoolDequeueWorkObject(object workID)
         {
             // convert the Object Id to a long
-            ThreadPoolDequeueWork((long)*((void**)JitHelpers.UnsafeCastToStackPointer(ref workID)));
+            ThreadPoolDequeueWork((long)*((void**)Unsafe.AsPointer(ref workID)));
         }
 
         // In the desktop runtime they don't use Tasks for the point at which the response happens, which means that the
@@ -686,7 +687,7 @@ namespace System.Diagnostics.Tracing
 #endif // !CORECLR
         public unsafe void ThreadTransferSendObj(object id, int kind, string info, bool multiDequeues, int intInfo1, int intInfo2)
         {
-            ThreadTransferSend((long)*((void**)JitHelpers.UnsafeCastToStackPointer(ref id)), kind, info, multiDequeues, intInfo1, intInfo2);
+            ThreadTransferSend((long)*((void**)Unsafe.AsPointer(ref id)), kind, info, multiDequeues, intInfo1, intInfo2);
         }
 
         // id -   represents a correlation ID that allows correlation of two activities, one stamped by 
@@ -711,7 +712,7 @@ namespace System.Diagnostics.Tracing
 #endif // !CORECLR
         public unsafe void ThreadTransferReceiveObj(object id, int kind, string info)
         {
-            ThreadTransferReceive((long)*((void**)JitHelpers.UnsafeCastToStackPointer(ref id)), kind, info);
+            ThreadTransferReceive((long)*((void**)Unsafe.AsPointer(ref id)), kind, info);
         }
 
         // id -   represents a correlation ID that allows correlation of two activities, one stamped by 
@@ -736,7 +737,7 @@ namespace System.Diagnostics.Tracing
 #endif // !CORECLR
         public unsafe void ThreadTransferReceiveHandledObj(object id, int kind, string info)
         {
-            ThreadTransferReceive((long)*((void**)JitHelpers.UnsafeCastToStackPointer(ref id)), kind, info);
+            ThreadTransferReceive((long)*((void**)Unsafe.AsPointer(ref id)), kind, info);
         }
 
         // return a stable ID for a an object.  We use the hash code which is not truely unique but is 
index 1c00970..f765e18 100644 (file)
@@ -48,18 +48,18 @@ namespace System.Runtime.CompilerServices
 
     // Helper class to assist with unsafe pinning of arbitrary objects.
     // It's used by VM code.
-    internal class PinningHelper
+    internal class RawData
     {
-        public byte m_data;
+        public byte Data;
     }
 
-    internal class ArrayPinningHelper
+    internal class RawSzArrayData
     {
-        public IntPtr m_lengthAndPadding;
-        public byte m_arrayData;
+        public IntPtr Count; // Array._numComponents padded to IntPtr
+        public byte Data;
     }
 
-    internal static class JitHelpers
+    internal static unsafe class JitHelpers
     {
         // The special dll name to be used for DllImport of QCalls
         internal const string QCall = "QCall";
@@ -68,21 +68,21 @@ namespace System.Runtime.CompilerServices
         // s has to be a local variable on the stack.
         internal static StringHandleOnStack GetStringHandleOnStack(ref string s)
         {
-            return new StringHandleOnStack(UnsafeCastToStackPointer(ref s));
+            return new StringHandleOnStack((IntPtr)Unsafe.AsPointer(ref s));
         }
 
         // Wraps object variable into a handle. Used to pass managed object references in and out of QCalls.
         // o has to be a local variable on the stack.
         internal static ObjectHandleOnStack GetObjectHandleOnStack<T>(ref T o) where T : class
         {
-            return new ObjectHandleOnStack(UnsafeCastToStackPointer(ref o));
+            return new ObjectHandleOnStack((IntPtr)Unsafe.AsPointer(ref o));
         }
 
         // Wraps StackCrawlMark into a handle. Used to pass StackCrawlMark to QCalls.
         // stackMark has to be a local variable on the stack.
         internal static StackCrawlMarkHandle GetStackCrawlMarkHandle(ref StackCrawlMark stackMark)
         {
-            return new StackCrawlMarkHandle(UnsafeCastToStackPointer(ref stackMark));
+            return new StackCrawlMarkHandle((IntPtr)Unsafe.AsPointer(ref stackMark));
         }
 
 #if DEBUG
@@ -121,22 +121,6 @@ namespace System.Runtime.CompilerServices
             // See getILIntrinsicImplementation for how this happens.  
             throw new InvalidOperationException();
         }
-
-        // Internal method for getting a raw pointer for handles in JitHelpers.
-        // The reference has to point into a local stack variable in order so it can not be moved by the GC.
-        internal static IntPtr UnsafeCastToStackPointer<T>(ref T val)
-        {
-            IntPtr p = UnsafeCastToStackPointerInternal<T>(ref val);
-            Debug.Assert(IsAddressInStack(p), "Pointer not in the stack!");
-            return p;
-        }
-
-        private static IntPtr UnsafeCastToStackPointerInternal<T>(ref T val)
-        {
-            // The body of this function will be replaced by the EE with unsafe code that just returns val!!!
-            // See getILIntrinsicImplementation for how this happens.  
-            throw new InvalidOperationException();
-        }
 #else // DEBUG
 
         internal static int UnsafeEnumCast<T>(T val) where T : struct          // Actually T must be 4 byte (or less) enum
@@ -152,13 +136,6 @@ namespace System.Runtime.CompilerServices
             // See getILIntrinsicImplementation for how this happens.  
             throw new InvalidOperationException();
         }
-
-        internal static IntPtr UnsafeCastToStackPointer<T>(ref T val)
-        {
-            // The body of this function will be replaced by the EE with unsafe code that just returns o!!!
-            // See getILIntrinsicImplementation for how this happens.  
-            throw new InvalidOperationException();
-        }
 #endif // DEBUG
 
         // Set the given element in the array without any type or range checks
@@ -168,22 +145,7 @@ namespace System.Runtime.CompilerServices
         internal static ref byte GetRawData(this object obj) =>
             ref Unsafe.As<RawData>(obj).Data;
 
-        private sealed class RawData
-        {
-            public byte Data;
-        }
-
-#if DEBUG
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        private static extern bool IsAddressInStack(IntPtr ptr);
-#endif
-
-        internal static ref byte GetRawSzArrayData(this Array array)
-        {
-            // The body of this function will be replaced by the EE with unsafe code!!!
-            // See getILIntrinsicImplementation for how this happens.
-            typeof(ArrayPinningHelper).ToString(); // Type used by the actual method body
-            throw new InvalidOperationException();
-        }
+        internal static ref byte GetRawSzArrayData(this Array array) =>
+            ref Unsafe.As<RawSzArrayData>(array).Data;
     }
 }
index 57de152..972b289 100644 (file)
@@ -9,6 +9,8 @@ using System.Diagnostics;
 using System.Runtime.CompilerServices;
 using System.Security;
 
+using Internal.Runtime.CompilerServices;
+
 namespace System.Runtime.InteropServices.WindowsRuntime
 {
     internal class CLRIPropertyValueImpl : IPropertyValue
@@ -492,7 +494,7 @@ namespace System.Runtime.InteropServices.WindowsRuntime
 
             fixed (byte* pData = &_data.GetRawData())
             {
-                byte* pUnboxed = (byte*)JitHelpers.UnsafeCastToStackPointer(ref unboxed);
+                byte* pUnboxed = (byte*)Unsafe.AsPointer(ref unboxed);
                 Buffer.Memcpy(pUnboxed, pData, Marshal.SizeOf(unboxed));
             }
 
index 93931f5..401ae40 100644 (file)
@@ -15,9 +15,10 @@ using System.Collections.Generic;
 using System.Text;
 using System.Security;
 using System.Runtime.CompilerServices;
-
 using System.Diagnostics.Tracing;
 
+using Internal.Runtime.CompilerServices;
+
 namespace System.Threading.Tasks
 {
     /// <summary>Provides an event source for tracing TPL information.</summary>
@@ -514,7 +515,7 @@ namespace System.Threading.Tasks
         }
 
         [NonEvent]
-        public unsafe void RunningContinuation(int TaskID, object Object) { RunningContinuation(TaskID, (long)*((void**)JitHelpers.UnsafeCastToStackPointer(ref Object))); }
+        public unsafe void RunningContinuation(int TaskID, object Object) { RunningContinuation(TaskID, (long)*((void**)Unsafe.AsPointer(ref Object))); }
         [Event(20, Keywords = Keywords.Debug)]
         private void RunningContinuation(int TaskID, long Object)
         {
@@ -523,7 +524,7 @@ namespace System.Threading.Tasks
         }
 
         [NonEvent]
-        public unsafe void RunningContinuationList(int TaskID, int Index, object Object) { RunningContinuationList(TaskID, Index, (long)*((void**)JitHelpers.UnsafeCastToStackPointer(ref Object))); }
+        public unsafe void RunningContinuationList(int TaskID, int Index, object Object) { RunningContinuationList(TaskID, Index, (long)*((void**)Unsafe.AsPointer(ref Object))); }
 
         [Event(21, Keywords = Keywords.Debug)]
         public void RunningContinuationList(int TaskID, int Index, long Object)
index 1a4a940..cde360c 100644 (file)
@@ -781,7 +781,7 @@ public:
         DWORD dwFactorLocalNum = NewLocal(ELEMENT_TYPE_I4);
         DWORD dwLengthLocalNum = NewLocal(ELEMENT_TYPE_I4);
 
-        mdToken tokPinningHelper = GetToken(MscorlibBinder::GetField(FIELD__PINNING_HELPER__M_DATA));
+        mdToken tokRawData = GetToken(MscorlibBinder::GetField(FIELD__RAW_DATA__DATA));
 
         ILCodeLabel * pRangeExceptionLabel = NewCodeLabel();
         ILCodeLabel * pRangeExceptionLabel1 = NewCodeLabel();
@@ -817,13 +817,13 @@ public:
                 m_pCode->EmitBRFALSE(pTypeCheckOK); //Storing NULL is OK
                 
                 m_pCode->EmitLDARG(rank); // return param
-                m_pCode->EmitLDFLDA(tokPinningHelper);
+                m_pCode->EmitLDFLDA(tokRawData);
                 m_pCode->EmitLDC(Object::GetOffsetOfFirstField());
                 m_pCode->EmitSUB();
                 m_pCode->EmitLDIND_I(); // TypeHandle
 
                 m_pCode->EmitLoadThis();
-                m_pCode->EmitLDFLDA(tokPinningHelper);
+                m_pCode->EmitLDFLDA(tokRawData);
                 m_pCode->EmitLDC(Object::GetOffsetOfFirstField());
                 m_pCode->EmitSUB();
                 m_pCode->EmitLDIND_I(); // Array MT
@@ -851,13 +851,13 @@ public:
                 m_pCode->EmitLDARG(hiddenArgIdx); // hidden param
                 m_pCode->EmitBRFALSE(pTypeCheckPassed);
                 m_pCode->EmitLDARG(hiddenArgIdx);
-                m_pCode->EmitLDFLDA(tokPinningHelper);          
+                m_pCode->EmitLDFLDA(tokRawData);          
                 m_pCode->EmitLDC(offsetof(ParamTypeDesc, m_Arg) - (Object::GetOffsetOfFirstField()+2));
                 m_pCode->EmitADD();
                 m_pCode->EmitLDIND_I();
                 
                 m_pCode->EmitLoadThis();
-                m_pCode->EmitLDFLDA(tokPinningHelper);
+                m_pCode->EmitLDFLDA(tokRawData);
                 m_pCode->EmitLDC(Object::GetOffsetOfFirstField());
                 m_pCode->EmitSUB();
                 m_pCode->EmitLDIND_I(); // Array MT
@@ -875,7 +875,7 @@ public:
         {
             // check if the array is SZArray.
             m_pCode->EmitLoadThis();
-            m_pCode->EmitLDFLDA(tokPinningHelper);
+            m_pCode->EmitLDFLDA(tokRawData);
             m_pCode->EmitLDC(Object::GetOffsetOfFirstField());
             m_pCode->EmitSUB();
             m_pCode->EmitLDIND_I();
@@ -889,7 +889,7 @@ public:
             // it is SZArray
             // bounds check
             m_pCode->EmitLoadThis();
-            m_pCode->EmitLDFLDA(tokPinningHelper);
+            m_pCode->EmitLDFLDA(tokRawData);
             m_pCode->EmitLDC(ArrayBase::GetOffsetOfNumComponents() - Object::GetOffsetOfFirstField());
             m_pCode->EmitADD();
             m_pCode->EmitLDIND_I4();
@@ -897,7 +897,7 @@ public:
             m_pCode->EmitBLE_UN(pRangeExceptionLabel);
 
             m_pCode->EmitLoadThis();
-            m_pCode->EmitLDFLDA(tokPinningHelper);
+            m_pCode->EmitLDFLDA(tokRawData);
             m_pCode->EmitLDC(ArrayBase::GetBoundsOffset(pMT) - Object::GetOffsetOfFirstField());
             m_pCode->EmitADD();
             m_pCode->EmitLDARG(firstIdx);          
@@ -909,7 +909,7 @@ public:
         {
             // Cache length
             m_pCode->EmitLoadThis();
-            m_pCode->EmitLDFLDA(tokPinningHelper);
+            m_pCode->EmitLDFLDA(tokRawData);
             m_pCode->EmitLDC((ArrayBase::GetBoundsOffset(pMT) - Object::GetOffsetOfFirstField()) + (idx-firstIdx)*sizeof(DWORD));
             m_pCode->EmitADD();
             m_pCode->EmitLDIND_I4();
@@ -922,7 +922,7 @@ public:
             {
                 // Load lower bound
                 m_pCode->EmitLoadThis();
-                m_pCode->EmitLDFLDA(tokPinningHelper);
+                m_pCode->EmitLDFLDA(tokRawData);
                 m_pCode->EmitLDC((ArrayBase::GetLowerBoundsOffset(pMT) - Object::GetOffsetOfFirstField()) + (idx-firstIdx)*sizeof(DWORD));
                 m_pCode->EmitADD();
                 m_pCode->EmitLDIND_I4();
@@ -961,7 +961,7 @@ public:
 
         // Compute element address
         m_pCode->EmitLoadThis();
-        m_pCode->EmitLDFLDA(tokPinningHelper);
+        m_pCode->EmitLDFLDA(tokRawData);
         m_pCode->EmitLDC(ArrayBase::GetDataPtrOffset(pMT) - Object::GetOffsetOfFirstField());
         m_pCode->EmitADD();
         m_pCode->EmitLDLOC(dwTotalLocalNum);
index 492bd95..c8244a6 100644 (file)
@@ -222,9 +222,6 @@ FCFuncEnd()
 
 FCFuncStart(gJitHelpers)
     FCFuncElement("UnsafeSetArrayElement", JitHelpers::UnsafeSetArrayElement)
-#ifdef _DEBUG
-    FCFuncElement("IsAddressInStack", ReflectionInvocation::IsAddressInStack)
-#endif
 FCFuncEnd()
 
 FCFuncStart(gCOMTypeHandleFuncs)
index 58319d8..71fd1e7 100644 (file)
@@ -2448,7 +2448,7 @@ void ILBlittablePtrMarshaler::EmitConvertContentsCLRToNative(ILCodeStream* pslIL
 
     ILCodeLabel* pNullRefLabel = pslILEmit->NewCodeLabel();
     UINT uNativeSize = m_pargs->m_pMT->GetNativeSize();
-    int fieldDef = pslILEmit->GetToken(MscorlibBinder::GetField(FIELD__PINNING_HELPER__M_DATA));
+    int fieldDef = pslILEmit->GetToken(MscorlibBinder::GetField(FIELD__RAW_DATA__DATA));
 
     EmitLoadNativeValue(pslILEmit);
     pslILEmit->EmitBRFALSE(pNullRefLabel);
@@ -2470,7 +2470,7 @@ void ILBlittablePtrMarshaler::EmitConvertContentsNativeToCLR(ILCodeStream* pslIL
     
     ILCodeLabel* pNullRefLabel = pslILEmit->NewCodeLabel();
     UINT uNativeSize = m_pargs->m_pMT->GetNativeSize();
-    int fieldDef = pslILEmit->GetToken(MscorlibBinder::GetField(FIELD__PINNING_HELPER__M_DATA));
+    int fieldDef = pslILEmit->GetToken(MscorlibBinder::GetField(FIELD__RAW_DATA__DATA));
     
     EmitLoadManagedValue(pslILEmit);
     pslILEmit->EmitBRFALSE(pNullRefLabel);
index 7fcdd62..2d87c27 100644 (file)
@@ -6973,18 +6973,7 @@ bool getILIntrinsicImplementation(MethodDesc * ftn,
     // Compare tokens to cover all generic instantiations
     // The body of the first method is simply ret Arg0. The second one first casts the arg to I4.
 
-    if (tk == MscorlibBinder::GetMethod(METHOD__JIT_HELPERS__UNSAFE_CAST_TO_STACKPTR)->GetMemberDef())
-    {
-        // Return the argument that was passed in converted to IntPtr
-        static const BYTE ilcode[] = { CEE_LDARG_0, CEE_CONV_I, CEE_RET };
-        methInfo->ILCode = const_cast<BYTE*>(ilcode);
-        methInfo->ILCodeSize = sizeof(ilcode);
-        methInfo->maxStack = 1;
-        methInfo->EHcount = 0;
-        methInfo->options = (CorInfoOptions)0;
-        return true;
-    }
-    else if (tk == MscorlibBinder::GetMethod(METHOD__JIT_HELPERS__UNSAFE_ENUM_CAST)->GetMemberDef()) 
+    if (tk == MscorlibBinder::GetMethod(METHOD__JIT_HELPERS__UNSAFE_ENUM_CAST)->GetMemberDef()) 
     {
         // Normally we would follow the above pattern and unconditionally replace the IL,
         // relying on generic type constraints to guarantee that it will only ever be instantiated
@@ -7048,16 +7037,16 @@ bool getILIntrinsicImplementation(MethodDesc * ftn,
     }
     else if (tk == MscorlibBinder::GetMethod(METHOD__JIT_HELPERS__GET_RAW_SZ_ARRAY_DATA)->GetMemberDef())
     {
-        mdToken tokArrayPinningHelper = MscorlibBinder::GetField(FIELD__ARRAY_PINNING_HELPER__M_ARRAY_DATA)->GetMemberDef();
+        mdToken tokRawSzArrayData = MscorlibBinder::GetField(FIELD__RAW_SZARRAY_DATA__DATA)->GetMemberDef();
 
         static BYTE ilcode[] = { CEE_LDARG_0,
                                  CEE_LDFLDA,0,0,0,0,
                                  CEE_RET };
 
-        ilcode[2] = (BYTE)(tokArrayPinningHelper);
-        ilcode[3] = (BYTE)(tokArrayPinningHelper >> 8);
-        ilcode[4] = (BYTE)(tokArrayPinningHelper >> 16);
-        ilcode[5] = (BYTE)(tokArrayPinningHelper >> 24);
+        ilcode[2] = (BYTE)(tokRawSzArrayData);
+        ilcode[3] = (BYTE)(tokRawSzArrayData >> 8);
+        ilcode[4] = (BYTE)(tokRawSzArrayData >> 16);
+        ilcode[5] = (BYTE)(tokRawSzArrayData >> 24);
 
         methInfo->ILCode = const_cast<BYTE*>(ilcode);
         methInfo->ILCodeSize = sizeof(ilcode);
index f257ecd..48f3a5e 100644 (file)
@@ -682,11 +682,9 @@ DEFINE_CLASS(JIT_HELPERS,           CompilerServices,       JitHelpers)
 #ifdef _DEBUG
 DEFINE_METHOD(JIT_HELPERS,          UNSAFE_ENUM_CAST,       UnsafeEnumCastInternal, NoSig)
 DEFINE_METHOD(JIT_HELPERS,          UNSAFE_ENUM_CAST_LONG,  UnsafeEnumCastLongInternal, NoSig)
-DEFINE_METHOD(JIT_HELPERS,          UNSAFE_CAST_TO_STACKPTR,UnsafeCastToStackPointerInternal, NoSig)
 #else // _DEBUG
 DEFINE_METHOD(JIT_HELPERS,          UNSAFE_ENUM_CAST,       UnsafeEnumCast, NoSig)
 DEFINE_METHOD(JIT_HELPERS,          UNSAFE_ENUM_CAST_LONG,  UnsafeEnumCastLong, NoSig)
-DEFINE_METHOD(JIT_HELPERS,          UNSAFE_CAST_TO_STACKPTR,UnsafeCastToStackPointer, NoSig)
 #endif // _DEBUG
 DEFINE_METHOD(JIT_HELPERS,          GET_RAW_SZ_ARRAY_DATA,  GetRawSzArrayData, NoSig)
 
@@ -715,12 +713,12 @@ DEFINE_CLASS(INTERLOCKED,           Threading,              Interlocked)
 DEFINE_METHOD(INTERLOCKED,          COMPARE_EXCHANGE_T,     CompareExchange, GM_RefT_T_T_RetT)
 DEFINE_METHOD(INTERLOCKED,          COMPARE_EXCHANGE_OBJECT,CompareExchange, SM_RefObject_Object_Object_RetObject)
 
-DEFINE_CLASS(PINNING_HELPER,        CompilerServices,       PinningHelper)
-DEFINE_FIELD(PINNING_HELPER,        M_DATA,                 m_data)
+DEFINE_CLASS(RAW_DATA,              CompilerServices,       RawData)
+DEFINE_FIELD(RAW_DATA,              DATA,                   Data)
 
-DEFINE_CLASS(ARRAY_PINNING_HELPER,  CompilerServices,                     ArrayPinningHelper)
-DEFINE_FIELD(ARRAY_PINNING_HELPER,  M_ARRAY_DATA,                         m_arrayData)
-DEFINE_FIELD(ARRAY_PINNING_HELPER,  M_ARRAY_LENGTH_AND_PADDING,           m_lengthAndPadding)
+DEFINE_CLASS(RAW_SZARRAY_DATA,      CompilerServices,       RawSzArrayData)
+DEFINE_FIELD(RAW_SZARRAY_DATA,      COUNT,                  Count)
+DEFINE_FIELD(RAW_SZARRAY_DATA,      DATA,                   Data)
 
 DEFINE_CLASS(RUNTIME_WRAPPED_EXCEPTION, CompilerServices,   RuntimeWrappedException)
 DEFINE_METHOD(RUNTIME_WRAPPED_EXCEPTION, OBJ_CTOR,          .ctor,                      IM_Obj_RetVoid)
index c7124c6..0565c17 100644 (file)
@@ -1206,13 +1206,13 @@ Stub * CreateUnboxingILStubForSharedGenericValueTypeMethods(MethodDesc* pTargetM
     CreateInstantiatingILStubTargetSig(pTargetMD, typeContext, &stubSigBuilder);
 
     // 2. Emit the method body
-    mdToken tokPinningHelper = pCode->GetToken(MscorlibBinder::GetField(FIELD__PINNING_HELPER__M_DATA));
+    mdToken tokRawData = pCode->GetToken(MscorlibBinder::GetField(FIELD__RAW_DATA__DATA));
 
     // 2.1 Push the thisptr
     // We need to skip over the MethodTable*
     // The trick below will do that.
     pCode->EmitLoadThis();
-    pCode->EmitLDFLDA(tokPinningHelper);
+    pCode->EmitLDFLDA(tokRawData);
 
 #if defined(_TARGET_X86_)
     // 2.2 Push the rest of the arguments for x86
@@ -1225,7 +1225,7 @@ Stub * CreateUnboxingILStubForSharedGenericValueTypeMethods(MethodDesc* pTargetM
     // 2.3 Push the hidden context param
     // The context is going to be captured from the thisptr
     pCode->EmitLoadThis();
-    pCode->EmitLDFLDA(tokPinningHelper);
+    pCode->EmitLDFLDA(tokRawData);
     pCode->EmitLDC(Object::GetOffsetOfFirstField());
     pCode->EmitSUB();
     pCode->EmitLDIND_I();
index d2d2180..7667ca8 100644 (file)
@@ -2375,15 +2375,6 @@ FCIMPL1(Object*, ReflectionInvocation::TypedReferenceToObject, TypedByRef * valu
 }
 FCIMPLEND
 
-#ifdef _DEBUG
-FCIMPL1(FC_BOOL_RET, ReflectionInvocation::IsAddressInStack, void * ptr)
-{
-    FCALL_CONTRACT;
-    FC_RETURN_BOOL(Thread::IsAddressInCurrentStack(ptr));
-}
-FCIMPLEND
-#endif
-
 FCIMPL2_IV(Object*, ReflectionInvocation::CreateEnum, ReflectClassBaseObject *pTypeUNSAFE, INT64 value) {
     FCALL_CONTRACT;
     
index 64234d7..7cb3348 100644 (file)
@@ -63,9 +63,6 @@ public:
     static FCDECL4(void, MakeTypedReference, TypedByRef * value, Object* targetUNSAFE, ArrayBase* fldsUNSAFE, ReflectClassBaseObject *pFieldType);
     static FCDECL2(void, SetTypedReference, TypedByRef * target, Object* objUNSAFE);
     static FCDECL1(Object*, TypedReferenceToObject, TypedByRef * value);
-#ifdef _DEBUG
-    static FCDECL1(FC_BOOL_RET, IsAddressInStack, void * ptr);
-#endif
 
 #ifdef FEATURE_COMINTEROP
     static FCDECL3(Object*, GetClassFromProgID, StringObject* classNameUNSAFE, StringObject* serverUNSAFE, CLR_BOOL bThrowOnError);