Merge pull request #1635 from alexrp/core-clr-properties
authorAlex Rønne Petersen <alex@alexrp.com>
Tue, 17 Mar 2015 22:01:50 +0000 (23:01 +0100)
committerAlex Rønne Petersen <alex@alexrp.com>
Tue, 17 Mar 2015 22:01:50 +0000 (23:01 +0100)
Implement CoreCLR security properties on reflection info types.

1  2 
mono/metadata/icall-def.h
mono/metadata/icall.c

index 8ffde8f34f58b2ba93e0d490639228e2586eb902,9532f2d559191c98f9cdc85c5b042e5331ccfeb2..6e665f1697392085549dd6b16bf055a46d039c37
@@@ -588,6 -588,7 +588,7 @@@ ICALL(MFIELD_5, "GetRawConstantValue", 
  ICALL(MFIELD_3, "GetValueInternal", ves_icall_MonoField_GetValueInternal)
  ICALL(MFIELD_6, "ResolveType", ves_icall_MonoField_ResolveType)
  ICALL(MFIELD_4, "SetValueInternal", ves_icall_MonoField_SetValueInternal)
+ ICALL(MFIELD_7, "get_core_clr_security_level", ves_icall_MonoField_get_core_clr_security_level)
  
  ICALL_TYPE(MGENCM, "System.Reflection.MonoGenericCMethod", MGENCM_1)
  ICALL(MGENCM_1, "get_ReflectedType", ves_icall_MonoGenericMethod_get_ReflectedType)
@@@ -609,6 -610,7 +610,7 @@@ ICALL(MMETH_5, "MakeGenericMethod_impl"
  ICALL(MMETH_6, "get_IsGenericMethod", ves_icall_MonoMethod_get_IsGenericMethod)
  ICALL(MMETH_7, "get_IsGenericMethodDefinition", ves_icall_MonoMethod_get_IsGenericMethodDefinition)
  ICALL(MMETH_8, "get_base_method", ves_icall_MonoMethod_get_base_method)
+ ICALL(MMETH_10, "get_core_clr_security_level", ves_icall_MonoMethod_get_core_clr_security_level)
  ICALL(MMETH_9, "get_name", ves_icall_MonoMethod_get_name)
  
  ICALL_TYPE(MMETHI, "System.Reflection.MonoMethodInfo", MMETHI_4)
@@@ -858,22 -860,6 +860,22 @@@ ICALL(ILOCK_22, "Read(long&)", ves_ical
  ICALL_TYPE(ITHREAD, "System.Threading.InternalThread", ITHREAD_1)
  ICALL(ITHREAD_1, "Thread_free_internal", ves_icall_System_Threading_InternalThread_Thread_free_internal)
  
 +ICALL_TYPE(MTHREADP, "System.Threading.Microsoft.ThreadPool", MTHREADP_1)
 +ICALL(MTHREADP_1, "BindIOCompletionCallbackNative", ves_icall_System_Threading_Microsoft_ThreadPool_BindIOCompletionCallbackNative)
 +ICALL(MTHREADP_2, "GetAvailableThreadsNative", ves_icall_System_Threading_Microsoft_ThreadPool_GetAvailableThreadsNative)
 +ICALL(MTHREADP_3, "GetMaxThreadsNative", ves_icall_System_Threading_Microsoft_ThreadPool_GetMaxThreadsNative)
 +ICALL(MTHREADP_4, "GetMinThreadsNative", ves_icall_System_Threading_Microsoft_ThreadPool_GetMinThreadsNative)
 +ICALL(MTHREADP_5, "InitializeVMTp", ves_icall_System_Threading_Microsoft_ThreadPool_InitializeVMTp)
 +ICALL(MTHREADP_6, "IsThreadPoolHosted", ves_icall_System_Threading_Microsoft_ThreadPool_IsThreadPoolHosted)
 +ICALL(MTHREADP_7, "NotifyWorkItemComplete", ves_icall_System_Threading_Microsoft_ThreadPool_NotifyWorkItemComplete)
 +ICALL(MTHREADP_8, "NotifyWorkItemProgressNative", ves_icall_System_Threading_Microsoft_ThreadPool_NotifyWorkItemProgressNative)
 +ICALL(MTHREADP_9, "PostQueuedCompletionStatus", ves_icall_System_Threading_Microsoft_ThreadPool_PostQueuedCompletionStatus)
 +ICALL(MTHREADP_10, "RegisterWaitForSingleObjectNative", ves_icall_System_Threading_Microsoft_ThreadPool_RegisterWaitForSingleObjectNative)
 +ICALL(MTHREADP_11, "ReportThreadStatus", ves_icall_System_Threading_Microsoft_ThreadPool_ReportThreadStatus)
 +ICALL(MTHREADP_12, "RequestWorkerThread", ves_icall_System_Threading_Microsoft_ThreadPool_RequestWorkerThread)
 +ICALL(MTHREADP_13, "SetMaxThreadsNative", ves_icall_System_Threading_Microsoft_ThreadPool_SetMaxThreadsNative)
 +ICALL(MTHREADP_14, "SetMinThreadsNative", ves_icall_System_Threading_Microsoft_ThreadPool_SetMinThreadsNative)
 +
  ICALL_TYPE(MONIT, "System.Threading.Monitor", MONIT_8)
  ICALL(MONIT_8, "Enter", mono_monitor_enter)
  ICALL(MONIT_1, "Exit", mono_monitor_exit)
@@@ -885,9 -871,6 +887,9 @@@ ICALL(MONIT_6, "Monitor_try_enter", ves
  ICALL(MONIT_7, "Monitor_wait", ves_icall_System_Threading_Monitor_Monitor_wait)
  ICALL(MONIT_9, "try_enter_with_atomic_var", ves_icall_System_Threading_Monitor_Monitor_try_enter_with_atomic_var)
  
 +ICALL_TYPE(MRWI, "System.Threading.MonoRuntimeWorkItem", MRWI_1)
 +ICALL(MRWI_1, "ExecuteWorkItem", ves_icall_System_Threading_MonoRuntimeWorkItem_ExecuteWorkItem)
 +
  ICALL_TYPE(MUTEX, "System.Threading.Mutex", MUTEX_1)
  ICALL(MUTEX_1, "CreateMutex_internal(bool,string,bool&)", ves_icall_System_Threading_Mutex_CreateMutex_internal)
  ICALL(MUTEX_2, "OpenMutex_internal(string,System.Security.AccessControl.MutexRights,System.IO.MonoIOError&)", ves_icall_System_Threading_Mutex_OpenMutex_internal)
@@@ -963,11 -946,11 +965,11 @@@ ICALL(THREAD_9, "Yield", ves_icall_Syst
  ICALL(THREAD_52, "current_lcid()", ves_icall_System_Threading_Thread_current_lcid)
  
  ICALL_TYPE(THREADP, "System.Threading.ThreadPool", THREADP_1)
 -ICALL(THREADP_1, "GetAvailableThreads", ves_icall_System_Threading_ThreadPool_GetAvailableThreads)
 -ICALL(THREADP_2, "GetMaxThreads", ves_icall_System_Threading_ThreadPool_GetMaxThreads)
 -ICALL(THREADP_3, "GetMinThreads", ves_icall_System_Threading_ThreadPool_GetMinThreads)
 -ICALL(THREADP_35, "SetMaxThreads", ves_icall_System_Threading_ThreadPool_SetMaxThreads)
 -ICALL(THREADP_4, "SetMinThreads", ves_icall_System_Threading_ThreadPool_SetMinThreads)
 +ICALL(THREADP_1, "GetAvailableThreads_internal", ves_icall_System_Threading_ThreadPool_GetAvailableThreads)
 +ICALL(THREADP_2, "GetMaxThreads_internal", ves_icall_System_Threading_ThreadPool_GetMaxThreads)
 +ICALL(THREADP_3, "GetMinThreads_internal", ves_icall_System_Threading_ThreadPool_GetMinThreads)
 +ICALL(THREADP_35, "SetMaxThreads_internal", ves_icall_System_Threading_ThreadPool_SetMaxThreads)
 +ICALL(THREADP_4, "SetMinThreads_internal", ves_icall_System_Threading_ThreadPool_SetMinThreads)
  ICALL(THREADP_5, "pool_queue", icall_append_job)
  
  ICALL_TYPE(TTIMER, "System.Threading.Timer", TTIMER_1)
diff --combined mono/metadata/icall.c
index f417148ff983e0ca1dc41dbf554de784e509884a,73cdd8027f20c80b0cdcc46ffbfe7c35d57bf2a3..a7a725a8d32c35459d1a1124050853c295e09720
@@@ -38,7 -38,6 +38,7 @@@
  #include <mono/metadata/threads.h>
  #include <mono/metadata/threads-types.h>
  #include <mono/metadata/threadpool.h>
 +#include <mono/metadata/threadpool-microsoft.h>
  #include <mono/metadata/monitor.h>
  #include <mono/metadata/reflection.h>
  #include <mono/metadata/assembly.h>
@@@ -4659,6 -4658,20 +4659,20 @@@ vell_icall_MonoType_get_core_clr_securi
        return mono_security_core_clr_class_level (klass);
  }
  
+ ICALL_EXPORT int
+ ves_icall_MonoField_get_core_clr_security_level (MonoReflectionField *this)
+ {
+       MonoClassField *field = this->field;
+       return mono_security_core_clr_field_level (field, TRUE);
+ }
+ ICALL_EXPORT int
+ ves_icall_MonoMethod_get_core_clr_security_level (MonoReflectionMethod *this)
+ {
+       MonoMethod *method = this->method;
+       return mono_security_core_clr_method_level (method, TRUE);
+ }
  static void
  fill_reflection_assembly_name (MonoDomain *domain, MonoReflectionAssemblyName *aname, MonoAssemblyName *name, const char *absolute, gboolean by_default_version, gboolean default_publickey, gboolean default_token)
  {