diff --git a/docs/design/coreclr/botr/corelib.md b/docs/design/coreclr/botr/corelib.md
index a0578c33bb9892..c5ff7f387e83f8 100644
--- a/docs/design/coreclr/botr/corelib.md
+++ b/docs/design/coreclr/botr/corelib.md
@@ -74,6 +74,8 @@ The pointers to common unmanaged EE structures should be wrapped into handle typ
Passing object references in and out of QCalls is done by wrapping a pointer to a local variable in a handle. It is intentionally cumbersome and should be avoided if reasonably possible. See the `StringHandleOnStack` in the example below. Returning objects, especially strings, from QCalls is the only common pattern where passing the raw objects is widely acceptable. (For reasoning on why this set of restrictions helps make QCalls less prone to GC holes, read the ["GC Holes, FCall, and QCall"](#gcholes) section below.)
+QCalls should be implemented with a C-style method signature. This makes it easier for AOT tooling in the future to connect a QCall on the managed side to the implementation on the native side.
+
### QCall example - managed
Do not replicate the comments into your actual QCall implementation. This is for illustrative purposes.
@@ -82,7 +84,7 @@ Do not replicate the comments into your actual QCall implementation. This is for
class Foo
{
// All QCalls should have the following DllImport attribute
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "Foo_BarInternal", CharSet = CharSet.Unicode)]
// QCalls should always be static extern.
private static extern bool BarInternal(int flags, string inString, StringHandleOnStack retString);
@@ -110,20 +112,13 @@ class Foo
Do not replicate the comments into your actual QCall implementation.
-The QCall entrypoint has to be registered in tables in [vm\ecalllist.h][ecalllist] using `QCFuncEntry` macro. See ["Registering your QCall or FCall Method"](#register) below.
+The QCall entrypoint has to be registered in tables in [vm\qcallentrypoints.cpp][qcall-entrypoints] using the `DllImportEntry` macro. See ["Registering your QCall or FCall Method"](#register) below.
-[ecalllist]: https://github.com/dotnet/runtime/blob/main/src/coreclr/vm/ecalllist.h
+[qcall-entrypoints]: https://github.com/dotnet/runtime/blob/main/src/coreclr/vm/qcallentrypoints.cpp
```C++
-class FooNative
-{
-public:
- // All QCalls should be static and tagged with QCALLTYPE
- static
- BOOL QCALLTYPE BarInternal(int flags, LPCWSTR wszString, QCall::StringHandleOnStack retString);
-};
-
-BOOL QCALLTYPE FooNative::BarInternal(int flags, LPCWSTR wszString, QCall::StringHandleOnStack retString)
+// All QCalls should be free functions and tagged with QCALLTYPE and extern "C"
+extern "C" BOOL QCALLTYPE Foo_BarInternal(int flags, LPCWSTR wszString, QCall::StringHandleOnStack retString)
{
// All QCalls should have QCALL_CONTRACT.
// It is alias for THROWS; GC_TRIGGERS; MODE_PREEMPTIVE.
@@ -221,6 +216,8 @@ public partial sealed class String
The FCall entrypoint has to be registered in tables in [vm\ecalllist.h][ecalllist] using `FCFuncEntry` macro. See ["Registering your QCall or FCall Method"](#register).
+[ecalllist]: https://github.com/dotnet/runtime/blob/main/src/coreclr/vm/ecalllist.h
+
This method is an instance method in managed code, with the "this" parameter passed as the first argument. We use `StringObject*` as the argument type, then copy it into a `STRINGREF` so we get some error checking when we use it.
```C++
@@ -250,7 +247,7 @@ FCIMPLEND
## Registering your QCall or FCall method
-The CLR must know the name of your QCall and FCall methods, both in terms of the managed class and method names, as well as which native methods to call. That is done in [ecalllist.h][ecalllist], with two arrays. The first array maps namespace and class names to an array of function elements. That array of function elements then maps individual method names and signatures to function pointers.
+The CLR must know the name of your QCall and FCall methods, both in terms of the managed class and method names, as well as which native methods to call. For FCalls, registration is done in [ecalllist.h][ecalllist], with two arrays. The first array maps namespace and class names to an array of function elements. That array of function elements then maps individual method names and signatures to function pointers.
Say we defined an FCall method for `String.IsInterned()`, in the example above. First, we need to ensure that we have an array of function elements for the String class.
@@ -271,7 +268,16 @@ FCFuncStart(gStringFuncs)
FCFuncEnd()
```
-There is a parallel `QCFuncElement` macro.
+QCalls are registered in [qcallentrypoints.cpp][qcall-entrypoints] in the `s_QCall` array with the `DllImportEntry` macro as follows:
+
+```C++
+static const Entry s_QCall[] =
+{
+ ...
+ DllImportEntry(MyQCall),
+ ...
+};
+```
## Naming convention
@@ -285,9 +291,9 @@ Certain managed types must have a representation available in both managed and n
The CLR provides a binder for this purpose. After you define your managed and native classes, you should provide some clues to the binder to help ensure that the field offsets remain the same to quickly spot when someone accidentally adds a field to only one definition of a type.
-In [mscorlib.h][mscorlib.h], use macros ending in "_U" to describe a type, the name of fields in managed code, and the name of fields in a corresponding native data structure. Additionally, you can specify a list of methods, and reference them by name when you attempt to call them later.
+In [corelib.h][corelib.h], use macros ending in "_U" to describe a type, the name of fields in managed code, and the name of fields in a corresponding native data structure. Additionally, you can specify a list of methods, and reference them by name when you attempt to call them later.
-[mscorlib.h]: https://github.com/dotnet/runtime/blob/main/src/coreclr/vm/mscorlib.h
+[corelib.h]: https://github.com/dotnet/runtime/blob/main/src/coreclr/vm/corelib.h
``` C++
DEFINE_CLASS_U(SAFE_HANDLE, Interop, SafeHandle, SafeHandle)
@@ -345,7 +351,7 @@ When the CLR starts up, CoreLib is loaded by a method called `SystemDomain::Load
For FCalls, look in [fcall.h][fcall] for infrastructure, and [ecalllist.h][ecalllist] to properly inform the runtime about your FCall method.
-For QCalls, look in [qcall.h][qcall] for associated infrastructure, and [ecalllist.h][ecalllist] to properly inform the runtime about your QCall method.
+For QCalls, look in [qcall.h][qcall] for associated infrastructure, and [qcallentrypoints.cpp][qcall-entrypoints] to properly inform the runtime about your QCall method.
More general infrastructure and some native type definitions can be found in [object.h][object.h]. The binder uses `mscorlib.h` to associate managed and native classes.
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Buffer.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Buffer.CoreCLR.cs
index f8f7117069ed00..31c50754fdc3c7 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Buffer.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Buffer.CoreCLR.cs
@@ -21,7 +21,7 @@ internal static unsafe void _ZeroMemory(ref byte b, nuint byteLength)
}
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "Buffer_Clear")]
private static extern unsafe void __ZeroMemory(void* b, nuint byteLength);
// The maximum block size to for __BulkMoveWithWriteBarrier FCall. This is required to avoid GC starvation.
@@ -77,7 +77,7 @@ private static void _BulkMoveWithWriteBarrier(ref byte destination, ref byte sou
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void __BulkMoveWithWriteBarrier(ref byte destination, ref byte source, nuint byteCount);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "Buffer_MemMove")]
private static extern unsafe void __Memmove(byte* dest, byte* src, nuint len);
// Used by ilmarshalers.cpp
diff --git a/src/coreclr/System.Private.CoreLib/src/System/CLRConfig.cs b/src/coreclr/System.Private.CoreLib/src/System/CLRConfig.cs
index cb2a0321325c78..de2756a08162d0 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/CLRConfig.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/CLRConfig.cs
@@ -50,7 +50,7 @@ internal static bool GetBoolValueWithFallbacks(string switchName, string environ
return defaultValue;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ClrConfig_GetConfigBoolValue", CharSet = CharSet.Unicode)]
private static extern bool GetConfigBoolValue(string configSwitchName, out bool exist);
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs b/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs
index 6ae6201c23cb64..fd17c86a5807ce 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs
@@ -51,7 +51,7 @@ public static void NotifyOfCrossThreadDependency()
}
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint="DebugDebugger_Launch")]
private static extern bool LaunchInternal();
// Returns whether or not a debugger is attached to the process.
@@ -77,7 +77,7 @@ public static extern bool IsAttached
// report the message depending on its settings.
public static void Log(int level, string? category, string? message) => LogInternal(level, category, message);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint="DebugDebugger_Log", CharSet = CharSet.Unicode)]
private static extern void LogInternal(int level, string? category, string? message);
// Checks to see if an attached debugger has logging enabled
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Eventing/EventPipe.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Eventing/EventPipe.CoreCLR.cs
index 2523bff45014c0..fb77d72e1e84f6 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Eventing/EventPipe.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Eventing/EventPipe.CoreCLR.cs
@@ -14,7 +14,7 @@ internal static partial class EventPipeInternal
//
// These PInvokes are used by the configuration APIs to interact with EventPipe.
//
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_Enable")]
private static unsafe extern ulong Enable(
char* outputFile,
EventPipeSerializationFormat format,
@@ -22,40 +22,40 @@ private static unsafe extern ulong Enable(
EventPipeProviderConfigurationNative* providers,
uint numProviders);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_Disable")]
internal static extern void Disable(ulong sessionID);
//
// These PInvokes are used by EventSource to interact with the EventPipe.
//
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_CreateProvider", CharSet = CharSet.Unicode)]
internal static extern IntPtr CreateProvider(string providerName, Interop.Advapi32.EtwEnableCallback callbackFunc);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_DefineEvent")]
internal static extern unsafe IntPtr DefineEvent(IntPtr provHandle, uint eventID, long keywords, uint eventVersion, uint level, void *pMetadata, uint metadataLength);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_GetProvider", CharSet = CharSet.Unicode)]
internal static extern IntPtr GetProvider(string providerName);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_DeleteProvider")]
internal static extern void DeleteProvider(IntPtr provHandle);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_EventActivityIdControl")]
internal static extern int EventActivityIdControl(uint controlCode, ref Guid activityId);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_WriteEventData")]
internal static extern unsafe void WriteEventData(IntPtr eventHandle, EventProvider.EventData* pEventData, uint dataCount, Guid* activityId, Guid* relatedActivityId);
//
// These PInvokes are used as part of the EventPipeEventDispatcher.
//
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_GetSessionInfo")]
internal static extern unsafe bool GetSessionInfo(ulong sessionID, EventPipeSessionInfo* pSessionInfo);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_GetNextEvent")]
internal static extern unsafe bool GetNextEvent(ulong sessionID, EventPipeEventInstanceData* pInstance);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "EventPipeInternal_GetWaitHandle")]
internal static extern unsafe IntPtr GetWaitHandle(ulong sessionID);
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Enum.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Enum.CoreCLR.cs
index 03a1e5079d8b65..b13eda3db506b0 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Enum.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Enum.CoreCLR.cs
@@ -10,7 +10,7 @@ namespace System
{
public abstract partial class Enum
{
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "Enum_GetValuesAndNames")]
private static extern void GetEnumValuesAndNames(QCallTypeHandle enumType, ObjectHandleOnStack values, ObjectHandleOnStack names, Interop.BOOL getNames);
[MethodImpl(MethodImplOptions.InternalCall)]
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Environment.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Environment.CoreCLR.cs
index 56ac1ec84dfa8b..68a7b7d1554250 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Environment.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Environment.CoreCLR.cs
@@ -18,7 +18,7 @@ public static extern int CurrentManagedThreadId
}
// Terminates this process with the given exit code.
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "Environment_Exit")]
[DoesNotReturn]
private static extern void _Exit(int exitCode);
@@ -84,7 +84,7 @@ public static string[] GetCommandLineArgs()
GetCommandLineArgsNative();
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "Environment_GetProcessorCount")]
private static extern int GetProcessorCount();
// Used by VM
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Exception.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Exception.CoreCLR.cs
index 68fcf7b41178e6..4ed3e8926b67f8 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Exception.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Exception.CoreCLR.cs
@@ -248,7 +248,7 @@ internal static string GetMessageFromNativeResources(ExceptionMessageKind kind)
return retMesg!;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ExceptionNative_GetMessageFromNativeResources")]
private static extern void GetMessageFromNativeResources(ExceptionMessageKind kind, StringHandleOnStack retMesg);
internal readonly struct DispatchState
diff --git a/src/coreclr/System.Private.CoreLib/src/System/GC.cs b/src/coreclr/System.Private.CoreLib/src/System/GC.cs
index bcbf042fd1b24d..cab7fa016ba33d 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/GC.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/GC.cs
@@ -78,10 +78,10 @@ public static GCMemoryInfo GetGCMemoryInfo(GCKind kind)
return new GCMemoryInfo(data);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_StartNoGCRegion")]
internal static extern int _StartNoGCRegion(long totalSize, bool lohSizeKnown, long lohSize, bool disallowFullBlockingGC);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_EndNoGCRegion")]
internal static extern int _EndNoGCRegion();
// keep in sync with GC_ALLOC_FLAGS in gcinterface.h
@@ -98,10 +98,10 @@ internal enum GC_ALLOC_FLAGS
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern int GetGenerationWR(IntPtr handle);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_GetTotalMemory")]
private static extern long GetTotalMemory();
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_Collect")]
private static extern void _Collect(int generation, int mode);
[MethodImpl(MethodImplOptions.InternalCall)]
@@ -119,10 +119,10 @@ internal enum GC_ALLOC_FLAGS
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern ulong GetGenerationSize(int gen);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_AddMemoryPressure")]
private static extern void _AddMemoryPressure(ulong bytesAllocated);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_RemoveMemoryPressure")]
private static extern void _RemoveMemoryPressure(ulong bytesAllocated);
public static void AddMemoryPressure(long bytesAllocated)
@@ -289,7 +289,7 @@ public static int GetGeneration(WeakReference wo)
//
public static int MaxGeneration => GetMaxGeneration();
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_WaitForPendingFinalizers")]
private static extern void _WaitForPendingFinalizers();
public static void WaitForPendingFinalizers()
@@ -352,10 +352,10 @@ public static long GetTotalMemory(bool forceFullCollection)
return newSize;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_RegisterFrozenSegment")]
private static extern IntPtr _RegisterFrozenSegment(IntPtr sectionAddress, nint sectionSize);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_UnregisterFrozenSegment")]
private static extern void _UnregisterFrozenSegment(IntPtr segmentHandle);
[MethodImpl(MethodImplOptions.InternalCall)]
diff --git a/src/coreclr/System.Private.CoreLib/src/System/IO/FileLoadException.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/IO/FileLoadException.CoreCLR.cs
index 6aa4e0d82e1fdc..e1b3f8cd819947 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/IO/FileLoadException.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/IO/FileLoadException.CoreCLR.cs
@@ -31,10 +31,10 @@ internal static string FormatFileLoadExceptionMessage(string? fileName, int hRes
return string.Format(format!, fileName, message);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall)]
private static extern void GetFileLoadExceptionMessage(int hResult, StringHandleOnStack retString);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "FileLoadException_GetMessageForHR")]
private static extern void GetMessageForHR(int hresult, StringHandleOnStack retString);
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Assembly.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Assembly.CoreCLR.cs
index ed457f6674bce9..ac19d33303acc9 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Assembly.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Assembly.CoreCLR.cs
@@ -54,7 +54,7 @@ public static Assembly Load(AssemblyName assemblyRef)
return RuntimeAssembly.InternalLoad(assemblyRef, ref stackMark, AssemblyLoadContext.CurrentContextualReflectionContext);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetExecutingAssembly")]
private static extern void GetExecutingAssemblyNative(StackCrawlMarkHandle stackMark, ObjectHandleOnStack retAssembly);
internal static RuntimeAssembly GetExecutingAssembly(ref StackCrawlMark stackMark)
@@ -82,7 +82,7 @@ public static Assembly GetCallingAssembly()
return GetExecutingAssembly(ref stackMark);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetEntryAssembly")]
private static extern void GetEntryAssemblyNative(ObjectHandleOnStack retAssembly);
private static Assembly? GetEntryAssemblyInternal()
@@ -92,7 +92,8 @@ public static Assembly GetCallingAssembly()
return entryAssembly;
}
- [MethodImpl(MethodImplOptions.InternalCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetAssemblyCount")]
+ [SuppressGCTransition]
internal static extern uint GetAssemblyCount();
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/AssemblyBuilder.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/AssemblyBuilder.cs
index c368a319e5c648..6253b05cdcc416 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/AssemblyBuilder.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/AssemblyBuilder.cs
@@ -268,7 +268,7 @@ public static AssemblyBuilder DefineDynamicAssembly(
assemblyAttributes);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AppDomain_CreateDynamicAssembly")]
private static extern void CreateDynamicAssembly(ObjectHandleOnStack name,
StackCrawlMarkHandle stackMark,
int access,
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.cs
index 6559b2e1fdda8d..abdcc9099706b4 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.cs
@@ -118,10 +118,10 @@ internal void CheckTypeNameConflict(string strTypeName, Type? enclosingType)
return SymbolType.FormCompoundType(strFormat, baseType, 0);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ModuleBuilder_GetTypeRef", CharSet = CharSet.Unicode)]
private static extern int GetTypeRef(QCallModule module, string strFullName, QCallModule refedModule, string? strRefedModuleFileName, int tkResolution);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ModuleBuilder_GetMemberRef")]
private static extern int GetMemberRef(QCallModule module, QCallModule refedModule, int tr, int defToken);
private int GetMemberRef(Module? refedModule, int tr, int defToken)
@@ -132,7 +132,7 @@ private int GetMemberRef(Module? refedModule, int tr, int defToken)
return GetMemberRef(new QCallModule(ref thisModule), new QCallModule(ref refedRuntimeModule), tr, defToken);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ModuleBuilder_GetMemberRefFromSignature", CharSet = CharSet.Unicode)]
private static extern int GetMemberRefFromSignature(QCallModule module, int tr, string methodName, byte[] signature, int length);
private int GetMemberRefFromSignature(int tr, string methodName, byte[] signature, int length)
@@ -141,7 +141,7 @@ private int GetMemberRefFromSignature(int tr, string methodName, byte[] signatur
return GetMemberRefFromSignature(new QCallModule(ref thisModule), tr, methodName, signature, length);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ModuleBuilder_GetMemberRefOfMethodInfo")]
private static extern int GetMemberRefOfMethodInfo(QCallModule module, int tr, RuntimeMethodHandleInternal method);
private int GetMemberRefOfMethodInfo(int tr, RuntimeMethodInfo method)
@@ -164,7 +164,7 @@ private int GetMemberRefOfMethodInfo(int tr, RuntimeConstructorInfo method)
return result;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ModuleBuilder_GetMemberRefOfFieldInfo")]
private static extern int GetMemberRefOfFieldInfo(QCallModule module, int tkType, QCallTypeHandle declaringType, int tkField);
private int GetMemberRefOfFieldInfo(int tkType, RuntimeTypeHandle declaringType, RuntimeFieldInfo runtimeField)
@@ -175,7 +175,7 @@ private int GetMemberRefOfFieldInfo(int tkType, RuntimeTypeHandle declaringType,
return GetMemberRefOfFieldInfo(new QCallModule(ref thisModule), tkType, new QCallTypeHandle(ref declaringType), runtimeField.MetadataToken);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ModuleBuilder_GetTokenFromTypeSpec")]
private static extern int GetTokenFromTypeSpec(QCallModule pModule, byte[] signature, int length);
private int GetTokenFromTypeSpec(byte[] signature, int length)
@@ -184,13 +184,13 @@ private int GetTokenFromTypeSpec(byte[] signature, int length)
return GetTokenFromTypeSpec(new QCallModule(ref thisModule), signature, length);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ModuleBuilder_GetArrayMethodToken", CharSet = CharSet.Unicode)]
private static extern int GetArrayMethodToken(QCallModule module, int tkTypeSpec, string methodName, byte[] signature, int sigLength);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ModuleBuilder_GetStringConstant", CharSet = CharSet.Unicode)]
private static extern int GetStringConstant(QCallModule module, string str, int length);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ModuleBuilder_SetFieldRVAContent")]
internal static extern void SetFieldRVAContent(QCallModule module, int fdToken, byte[]? data, int length);
#endregion
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs
index 1ca07d381f96df..eec403c87361c0 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs
@@ -149,26 +149,26 @@ public static FieldInfo GetField(Type type, FieldInfo field)
#endregion
#region Private Static FCalls
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_SetParentType")]
private static extern void SetParentType(QCallModule module, int tdTypeDef, int tkParent);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_AddInterfaceImpl")]
private static extern void AddInterfaceImpl(QCallModule module, int tdTypeDef, int tkInterface);
#endregion
#region Internal Static FCalls
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_DefineMethod", CharSet = CharSet.Unicode)]
internal static extern int DefineMethod(QCallModule module, int tkParent, string name, byte[] signature, int sigLength,
MethodAttributes attributes);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_DefineMethodSpec")]
internal static extern int DefineMethodSpec(QCallModule module, int tkParent, byte[] signature, int sigLength);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_DefineField", CharSet = CharSet.Unicode)]
internal static extern int DefineField(QCallModule module, int tkParent, string name, byte[] signature, int sigLength,
FieldAttributes attributes);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_SetMethodIL")]
private static extern void SetMethodIL(QCallModule module, int tk, bool isInitLocals,
byte[]? body, int bodyLength,
byte[] LocalSig, int sigLength,
@@ -176,7 +176,7 @@ private static extern void SetMethodIL(QCallModule module, int tk, bool isInitLo
ExceptionHandler[]? exceptions, int numExceptions,
int[]? tokenFixups, int numTokenFixups);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_DefineCustomAttribute")]
private static extern void DefineCustomAttribute(QCallModule module, int tkAssociate, int tkConstructor,
byte[]? attr, int attrLength);
@@ -195,40 +195,40 @@ internal static void DefineCustomAttribute(ModuleBuilder module, int tkAssociate
localAttr, (localAttr != null) ? localAttr.Length : 0);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_DefineProperty", CharSet = CharSet.Unicode)]
internal static extern int DefineProperty(QCallModule module, int tkParent, string name, PropertyAttributes attributes,
byte[] signature, int sigLength);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_DefineEvent", CharSet = CharSet.Unicode)]
internal static extern int DefineEvent(QCallModule module, int tkParent, string name, EventAttributes attributes, int tkEventType);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_DefineMethodSemantics")]
internal static extern void DefineMethodSemantics(QCallModule module, int tkAssociation,
MethodSemanticsAttributes semantics, int tkMethod);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_DefineMethodImpl")]
internal static extern void DefineMethodImpl(QCallModule module, int tkType, int tkBody, int tkDecl);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_SetMethodImpl")]
internal static extern void SetMethodImpl(QCallModule module, int tkMethod, MethodImplAttributes MethodImplAttributes);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_SetParamInfo", CharSet = CharSet.Unicode)]
internal static extern int SetParamInfo(QCallModule module, int tkMethod, int iSequence,
ParameterAttributes iParamAttributes, string? strParamName);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_GetTokenFromSig")]
internal static extern int GetTokenFromSig(QCallModule module, byte[] signature, int sigLength);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_SetFieldLayoutOffset")]
internal static extern void SetFieldLayoutOffset(QCallModule module, int fdToken, int iOffset);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_SetClassLayout")]
internal static extern void SetClassLayout(QCallModule module, int tk, PackingSize iPackingSize, int iTypeSize);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_SetConstantValue")]
private static extern unsafe void SetConstantValue(QCallModule module, int tk, int corType, void* pValue);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_SetPInvokeData", CharSet = CharSet.Unicode)]
private static extern void SetPInvokeData(QCallModule module, string DllName, string name, int token, int linkFlags);
#endregion
@@ -655,15 +655,15 @@ public bool IsCreated()
#endregion
#region FCalls
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_DefineType", CharSet = CharSet.Unicode)]
private static extern int DefineType(QCallModule module,
string fullname, int tkParent, TypeAttributes attributes, int tkEnclosingType, int[] interfaceTokens);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_DefineGenericParam", CharSet = CharSet.Unicode)]
private static extern int DefineGenericParam(QCallModule module,
string name, int tkParent, GenericParameterAttributes attributes, int position, int[] constraints);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeBuilder_TermCreateClass")]
private static extern void TermCreateClass(QCallModule module, int tk, ObjectHandleOnStack type);
#endregion
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/LoaderAllocator.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/LoaderAllocator.cs
index 2dd25ea5646c0d..519cf87c12a69a 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/LoaderAllocator.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/LoaderAllocator.cs
@@ -25,7 +25,7 @@ internal sealed class LoaderAllocatorScout
// This field is set by the VM to atomically transfer the ownership to the managed loader allocator
internal IntPtr m_nativeLoaderAllocator;
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "LoaderAllocator_Destroy")]
private static extern bool Destroy(IntPtr nativeLoaderAllocator);
~LoaderAllocatorScout()
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs
index 65fdaf409672ee..4324b1b775e42f 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs
@@ -8,7 +8,7 @@ namespace System.Reflection.Metadata
{
public static class AssemblyExtensions
{
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_InternalTryGetRawMetadata")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern unsafe bool InternalTryGetRawMetadata(QCallAssembly assembly, ref byte* blob, ref int length);
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/MetadataUpdater.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/MetadataUpdater.cs
index bc1fa6edcd9953..7b2a867c3a259c 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/MetadataUpdater.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/MetadataUpdater.cs
@@ -9,10 +9,10 @@ namespace System.Reflection.Metadata
{
public static class MetadataUpdater
{
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_ApplyUpdate")]
private static extern unsafe void ApplyUpdate(QCallAssembly assembly, byte* metadataDelta, int metadataDeltaLength, byte* ilDelta, int ilDeltaLength, byte* pdbDelta, int pdbDeltaLength);
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_IsApplyUpdateSupported")]
private static extern unsafe bool IsApplyUpdateSupported();
///
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeAssembly.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeAssembly.cs
index 9cf0ef180b576a..38622fafd850bc 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeAssembly.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeAssembly.cs
@@ -68,7 +68,7 @@ public override event ModuleResolveEventHandler? ModuleResolve
}
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetCodeBase")]
private static extern bool GetCodeBase(QCallAssembly assembly,
StringHandleOnStack retString);
@@ -126,7 +126,7 @@ public override AssemblyName GetName(bool copiedName)
return an;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetFullName")]
private static extern void GetFullName(QCallAssembly assembly, StringHandleOnStack retString);
public override string? FullName
@@ -146,7 +146,7 @@ public override string? FullName
}
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetEntryPoint")]
private static extern void GetEntryPoint(QCallAssembly assembly, ObjectHandleOnStack retMethod);
public override MethodInfo? EntryPoint
@@ -164,7 +164,7 @@ public override MethodInfo? EntryPoint
}
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetType", CharSet = CharSet.Unicode)]
private static extern void GetType(QCallAssembly assembly,
string name,
bool throwOnError,
@@ -197,7 +197,7 @@ private static extern void GetType(QCallAssembly assembly,
return type;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetExportedTypes")]
private static extern void GetExportedTypes(QCallAssembly assembly, ObjectHandleOnStack retTypes);
[RequiresUnreferencedCode("Types might be removed")]
@@ -231,7 +231,7 @@ public override IEnumerable DefinedTypes
}
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetIsCollectible")]
internal static extern Interop.BOOL GetIsCollectible(QCallAssembly assembly);
public override bool IsCollectible
@@ -244,7 +244,7 @@ public override bool IsCollectible
}
// GetResource will return a pointer to the resources in memory.
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetResource", CharSet = CharSet.Unicode)]
private static extern unsafe byte* GetResource(QCallAssembly assembly,
string resourceName,
out uint length);
@@ -343,7 +343,7 @@ internal static RuntimeAssembly InternalLoad(AssemblyName assemblyName,
return retAssembly!;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_InternalLoad")]
private static extern void InternalLoad(ObjectHandleOnStack assemblyName,
ObjectHandleOnStack requestingAssembly,
StackCrawlMarkHandle stackMark,
@@ -355,7 +355,7 @@ private static extern void InternalLoad(ObjectHandleOnStack assemblyName,
// Returns the module in this assembly with name 'name'
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetModule", CharSet = CharSet.Unicode)]
private static extern void GetModule(QCallAssembly assembly, string name, ObjectHandleOnStack retModule);
public override Module? GetModule(string name)
@@ -428,7 +428,7 @@ public override AssemblyName[] GetReferencedAssemblies()
return GetReferencedAssemblies(GetNativeHandle());
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetManifestResourceInfo", CharSet = CharSet.Unicode)]
private static extern int GetManifestResourceInfo(QCallAssembly assembly,
string resourceName,
ObjectHandleOnStack assemblyRef,
@@ -450,7 +450,7 @@ private static extern int GetManifestResourceInfo(QCallAssembly assembly,
(ResourceLocation)location);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetLocation")]
private static extern void GetLocation(QCallAssembly assembly, StringHandleOnStack retString);
public override string Location
@@ -466,7 +466,7 @@ public override string Location
}
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetImageRuntimeVersion")]
private static extern void GetImageRuntimeVersion(QCallAssembly assembly, StringHandleOnStack retString);
public override string ImageRuntimeVersion
@@ -485,7 +485,7 @@ public override string ImageRuntimeVersion
public override long HostContext => 0;
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetVersion")]
private static extern void GetVersion(QCallAssembly assembly,
out int majVer,
out int minVer,
@@ -499,7 +499,7 @@ internal Version GetVersion()
return new Version(majorVer, minorVer, build, revision);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetLocale")]
private static extern void GetLocale(QCallAssembly assembly, StringHandleOnStack retString);
internal CultureInfo GetLocale()
@@ -520,7 +520,7 @@ internal CultureInfo GetLocale()
public override bool IsDynamic => FCallIsDynamic(GetNativeHandle());
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetSimpleName")]
private static extern void GetSimpleName(QCallAssembly assembly, StringHandleOnStack retSimpleName);
internal string? GetSimpleName()
@@ -531,7 +531,7 @@ internal CultureInfo GetLocale()
return name;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetHashAlgorithm")]
private static extern AssemblyHashAlgorithm GetHashAlgorithm(QCallAssembly assembly);
private AssemblyHashAlgorithm GetHashAlgorithm()
@@ -540,7 +540,7 @@ private AssemblyHashAlgorithm GetHashAlgorithm()
return GetHashAlgorithm(new QCallAssembly(ref runtimeAssembly));
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetFlags")]
private static extern AssemblyNameFlags GetFlags(QCallAssembly assembly);
private AssemblyNameFlags GetFlags()
@@ -549,7 +549,7 @@ private AssemblyNameFlags GetFlags()
return GetFlags(new QCallAssembly(ref runtimeAssembly));
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetPublicKey")]
private static extern void GetPublicKey(QCallAssembly assembly, ObjectHandleOnStack retPublicKey);
internal byte[]? GetPublicKey()
@@ -604,7 +604,7 @@ public override Assembly GetSatelliteAssembly(CultureInfo culture, Version? vers
return retAssembly;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetModules")]
private static extern void GetModules(QCallAssembly assembly,
bool loadIfNotFound,
bool getResourceModules,
@@ -709,7 +709,7 @@ private static void AddPublicNestedTypes(Type type, List types, List PrepareMethod(method, null);
@@ -167,7 +167,7 @@ public static object GetUninitializedObject(
return obj!;
}
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ReflectionSerialization_GetUninitializedObject")]
private static extern void GetUninitializedObject(QCallTypeHandle type, ObjectHandleOnStack retObject);
[MethodImpl(MethodImplOptions.InternalCall)]
@@ -299,7 +299,7 @@ public static IntPtr AllocateTypeAssociatedMemory(Type type, int size)
return AllocateTypeAssociatedMemory(new QCallTypeHandle(ref rt), (uint)size);
}
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_AllocateTypeAssociatedMemory")]
private static extern IntPtr AllocateTypeAssociatedMemory(QCallTypeHandle type, uint size);
[MethodImpl(MethodImplOptions.InternalCall)]
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/ComWrappers.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/ComWrappers.cs
index a6351198a2c595..896eaa5bbd09e3 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/ComWrappers.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/ComWrappers.cs
@@ -103,7 +103,7 @@ private static bool TryGetOrCreateComInterfaceForObjectInternal(ComWrappers impl
return TryGetOrCreateComInterfaceForObjectInternal(ObjectHandleOnStack.Create(ref impl), impl.id, ObjectHandleOnStack.Create(ref instance), flags, out retValue);
}
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ComWrappers_TryGetOrCreateComInterfaceForObject")]
private static extern bool TryGetOrCreateComInterfaceForObjectInternal(ObjectHandleOnStack comWrappersImpl, long wrapperId, ObjectHandleOnStack instance, CreateComInterfaceFlags flags, out IntPtr retValue);
// Called by the runtime to execute the abstract instance function
@@ -251,7 +251,7 @@ private static bool TryGetOrCreateObjectForComInstanceInternal(
return TryGetOrCreateObjectForComInstanceInternal(ObjectHandleOnStack.Create(ref impl), impl.id, externalComObject, innerMaybe, flags, ObjectHandleOnStack.Create(ref wrapperMaybeLocal), ObjectHandleOnStack.Create(ref retValue));
}
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ComWrappers_TryGetOrCreateObjectForComInstance")]
private static extern bool TryGetOrCreateObjectForComInstanceInternal(ObjectHandleOnStack comWrappersImpl, long wrapperId, IntPtr externalComObject, IntPtr innerMaybe, CreateObjectFlags flags, ObjectHandleOnStack wrapper, ObjectHandleOnStack retValue);
// Call to execute the virtual instance function
@@ -283,7 +283,7 @@ public static void RegisterForTrackerSupport(ComWrappers instance)
}
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ComWrappers_SetGlobalInstanceRegisteredForTrackerSupport")]
[SuppressGCTransition]
private static extern void SetGlobalInstanceRegisteredForTrackerSupport(long id);
@@ -317,7 +317,7 @@ public static void RegisterForMarshalling(ComWrappers instance)
SetGlobalInstanceRegisteredForMarshalling(instance.id);
}
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ComWrappers_SetGlobalInstanceRegisteredForMarshalling")]
[SuppressGCTransition]
private static extern void SetGlobalInstanceRegisteredForMarshalling(long id);
@@ -330,7 +330,7 @@ public static void RegisterForMarshalling(ComWrappers instance)
protected static void GetIUnknownImpl(out IntPtr fpQueryInterface, out IntPtr fpAddRef, out IntPtr fpRelease)
=> GetIUnknownImplInternal(out fpQueryInterface, out fpAddRef, out fpRelease);
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ComWrappers_GetIUnknownImpl")]
private static extern void GetIUnknownImplInternal(out IntPtr fpQueryInterface, out IntPtr fpAddRef, out IntPtr fpRelease);
internal static int CallICustomQueryInterface(object customQueryInterfaceMaybe, ref Guid iid, out IntPtr ppObject)
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/Marshal.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/Marshal.CoreCLR.cs
index e064c36746d517..e33ad2ca210e72 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/Marshal.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/Marshal.CoreCLR.cs
@@ -192,7 +192,7 @@ private static void PrelinkCore(MethodInfo m)
GC.KeepAlive(rmi);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "MarshalNative_Prelink")]
private static extern void InternalPrelink(RuntimeMethodHandleInternal m);
[MethodImpl(MethodImplOptions.InternalCall)]
@@ -228,7 +228,7 @@ private static void PrelinkCore(MethodInfo m)
#if TARGET_WINDOWS
internal static bool IsBuiltInComSupported { get; } = IsBuiltInComSupportedInternal();
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "MarshalNative_IsBuiltInComSupported")]
private static extern bool IsBuiltInComSupportedInternal();
///
@@ -250,7 +250,7 @@ public static IntPtr GetHINSTANCE(Module m)
return (IntPtr)(-1);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "MarshalNative_GetHINSTANCE")]
private static extern IntPtr GetHINSTANCE(QCallModule m);
#endif // TARGET_WINDOWS
@@ -299,7 +299,7 @@ public static string GetTypeInfoName(ITypeInfo typeInfo)
return type;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "MarshalNative_GetTypeFromCLSID", CharSet = CharSet.Unicode)]
private static extern void GetTypeFromCLSID(in Guid clsid, string? server, ObjectHandleOnStack retType);
///
@@ -806,7 +806,7 @@ public static object BindToMoniker(string monikerName)
internal static extern IntPtr GetFunctionPointerForDelegateInternal(Delegate d);
#if DEBUG // Used for testing in Checked or Debug
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "MarshalNative_GetIsInCooperativeGCModeFunctionPointer")]
internal static unsafe extern delegate* unmanaged GetIsInCooperativeGCModeFunctionPointer();
#endif
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/NativeLibrary.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/NativeLibrary.CoreCLR.cs
index 879fe53aa0d135..9d01cab387f4f3 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/NativeLibrary.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/NativeLibrary.CoreCLR.cs
@@ -20,18 +20,18 @@ internal static IntPtr LoadLibraryByName(string libraryName, Assembly assembly,
/// External functions that implement the NativeLibrary interface
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "NativeLibrary_LoadFromPath", CharSet = CharSet.Unicode)]
internal static extern IntPtr LoadFromPath(string libraryName, bool throwOnError);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "NativeLibrary_LoadByName", CharSet = CharSet.Unicode)]
internal static extern IntPtr LoadByName(string libraryName, QCallAssembly callingAssembly,
bool hasDllImportSearchPathFlag, uint dllImportSearchPathFlag,
bool throwOnError);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "NativeLibrary_FreeLib")]
internal static extern void FreeLib(IntPtr handle);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "NativeLibrary_GetSymbol", CharSet = CharSet.Unicode)]
internal static extern IntPtr GetSymbol(IntPtr handle, string symbolName, bool throwOnError);
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/ObjectiveCMarshal.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/ObjectiveCMarshal.CoreCLR.cs
index 02cbd9ebb8076a..3471cedefa9a80 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/ObjectiveCMarshal.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/ObjectiveCMarshal.CoreCLR.cs
@@ -21,18 +21,18 @@ public static void SetMessageSendPendingException(Exception? exception)
System.StubHelpers.StubHelpers.SetPendingExceptionObject(exception);
}
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ObjCMarshal_TrySetGlobalMessageSendCallback")]
private static extern bool TrySetGlobalMessageSendCallback(
MessageSendFunction msgSendFunction,
IntPtr func);
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ObjCMarshal_TryInitializeReferenceTracker")]
private static unsafe extern bool TryInitializeReferenceTracker(
delegate* unmanaged beginEndCallback,
delegate* unmanaged isReferencedCallback,
delegate* unmanaged trackedObjectEnteredFinalization);
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ObjCMarshal_CreateReferenceTrackingHandle")]
private static extern IntPtr CreateReferenceTrackingHandleInternal(
ObjectHandleOnStack obj,
out int memInSizeT,
@@ -61,4 +61,4 @@ internal static bool AvailableUnhandledExceptionPropagation()
return null;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/X86Base.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/X86Base.CoreCLR.cs
index e523487f0d6b65..7ad6a2a2f11a8a 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/X86Base.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/X86Base.CoreCLR.cs
@@ -8,7 +8,7 @@ namespace System.Runtime.Intrinsics.X86
{
public abstract partial class X86Base
{
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "X86BaseCpuId")]
private static extern unsafe void __cpuidex(int* cpuInfo, int functionId, int subFunctionId);
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.CoreCLR.cs
index 77b9a935e337d1..4892307efbcfcb 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.CoreCLR.cs
@@ -11,24 +11,24 @@ namespace System.Runtime.Loader
{
public partial class AssemblyLoadContext
{
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_InitializeAssemblyLoadContext")]
private static extern IntPtr InitializeAssemblyLoadContext(IntPtr ptrAssemblyLoadContext, bool fRepresentsTPALoadContext, bool isCollectible);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_PrepareForAssemblyLoadContextRelease")]
private static extern void PrepareForAssemblyLoadContextRelease(IntPtr ptrNativeAssemblyBinder, IntPtr ptrAssemblyLoadContextStrong);
[RequiresUnreferencedCode("Types and members the loaded assembly depends on might be removed")]
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_LoadFromStream")]
private static extern void LoadFromStream(IntPtr ptrNativeAssemblyBinder, IntPtr ptrAssemblyArray, int iAssemblyArrayLen, IntPtr ptrSymbols, int iSymbolArrayLen, ObjectHandleOnStack retAssembly);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "MultiCoreJIT_InternalSetProfileRoot", CharSet = CharSet.Unicode)]
internal static extern void InternalSetProfileRoot(string directoryPath);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "MultiCoreJIT_InternalStartProfile", CharSet = CharSet.Unicode)]
internal static extern void InternalStartProfile(string? profile, IntPtr ptrNativeAssemblyBinder);
[RequiresUnreferencedCode("Types and members the loaded assembly depends on might be removed")]
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_LoadFromPath", CharSet = CharSet.Unicode)]
private static extern void LoadFromPath(IntPtr ptrNativeAssemblyBinder, string? ilPath, string? niPath, ObjectHandleOnStack retAssembly);
[MethodImpl(MethodImplOptions.InternalCall)]
@@ -37,16 +37,16 @@ public partial class AssemblyLoadContext
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern bool IsTracingEnabled();
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_TraceResolvingHandlerInvoked", CharSet = CharSet.Unicode)]
internal static extern bool TraceResolvingHandlerInvoked(string assemblyName, string handlerName, string? alcName, string? resultAssemblyName, string? resultAssemblyPath);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_TraceAssemblyResolveHandlerInvoked", CharSet = CharSet.Unicode)]
internal static extern bool TraceAssemblyResolveHandlerInvoked(string assemblyName, string handlerName, string? resultAssemblyName, string? resultAssemblyPath);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_TraceAssemblyLoadFromResolveHandlerInvoked", CharSet = CharSet.Unicode)]
internal static extern bool TraceAssemblyLoadFromResolveHandlerInvoked(string assemblyName, bool isTrackedAssembly, string requestingAssemblyPath, string? requestedAssemblyPath);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_TraceSatelliteSubdirectoryPathProbed", CharSet = CharSet.Unicode)]
internal static extern bool TraceSatelliteSubdirectoryPathProbed(string filePath, int hResult);
[RequiresUnreferencedCode("Types and members the loaded assembly depends on might be removed")]
@@ -72,7 +72,7 @@ internal unsafe Assembly InternalLoad(ReadOnlySpan arrAssembly, ReadOnlySp
}
#if TARGET_WINDOWS
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_LoadFromInMemoryModule")]
private static extern IntPtr LoadFromInMemoryModuleInternal(IntPtr ptrNativeAssemblyBinder, IntPtr hModule, ObjectHandleOnStack retAssembly);
@@ -134,7 +134,7 @@ private static IntPtr ResolveUnmanagedDllUsingEvent(string unmanagedDllName, Ass
return context.ResolveUsingEvent(assemblyName);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AssemblyNative_GetLoadContextForAssembly")]
private static extern IntPtr GetLoadContextForAssembly(QCallAssembly assembly);
// Returns the load context in which the specified assembly has been loaded
diff --git a/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs b/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs
index e753b47552f794..ef07d063012b56 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs
@@ -260,7 +260,7 @@ internal static object CreateInstanceForAnotherGenericParameter(
return instantiatedObject!;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_CreateInstanceForAnotherGenericParameter")]
private static extern void CreateInstanceForAnotherGenericParameter(
QCallTypeHandle baseType,
IntPtr* pTypeHandles,
@@ -297,7 +297,7 @@ internal static void GetActivationInfo(
ctorIsPublic = fCtorIsPublicTemp != Interop.BOOL.FALSE;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_GetActivationInfo")]
private static extern void GetActivationInfo(
ObjectHandleOnStack pRuntimeType,
delegate** ppfnAllocator,
@@ -403,7 +403,7 @@ internal static IntroducedMethodEnumerator GetIntroducedMethods(RuntimeType type
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern Type[]? GetInterfaces(RuntimeType type);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_GetConstraints")]
private static extern void GetConstraints(QCallTypeHandle handle, ObjectHandleOnStack types);
internal Type[] GetConstraints()
@@ -416,7 +416,7 @@ internal Type[] GetConstraints()
return types!;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "QCall_GetGCHandleForTypeHandle")]
private static extern IntPtr GetGCHandle(QCallTypeHandle handle, GCHandleType type);
internal IntPtr GetGCHandle(GCHandleType type)
@@ -425,7 +425,7 @@ internal IntPtr GetGCHandle(GCHandleType type)
return GetGCHandle(new QCallTypeHandle(ref nativeHandle), type);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "QCall_FreeGCHandleForTypeHandle")]
private static extern IntPtr FreeGCHandle(QCallTypeHandle typeHandle, IntPtr objHandle);
internal IntPtr FreeGCHandle(IntPtr objHandle)
@@ -440,7 +440,7 @@ internal IntPtr FreeGCHandle(IntPtr objHandle)
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern int GetNumVirtualsAndStaticVirtuals(RuntimeType type);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_VerifyInterfaceIsImplemented")]
private static extern void VerifyInterfaceIsImplemented(QCallTypeHandle handle, QCallTypeHandle interfaceHandle);
internal void VerifyInterfaceIsImplemented(RuntimeTypeHandle interfaceHandle)
@@ -450,7 +450,7 @@ internal void VerifyInterfaceIsImplemented(RuntimeTypeHandle interfaceHandle)
VerifyInterfaceIsImplemented(new QCallTypeHandle(ref nativeHandle), new QCallTypeHandle(ref nativeInterfaceHandle));
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_GetInterfaceMethodImplementation")]
private static extern RuntimeMethodHandleInternal GetInterfaceMethodImplementation(QCallTypeHandle handle, QCallTypeHandle interfaceHandle, RuntimeMethodHandleInternal interfaceMethodHandle);
internal RuntimeMethodHandleInternal GetInterfaceMethodImplementation(RuntimeTypeHandle interfaceHandle, RuntimeMethodHandleInternal interfaceMethodHandle)
@@ -479,7 +479,7 @@ internal static bool IsComObject(RuntimeType type, bool isGenericCOM)
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern bool IsByRefLike(RuntimeType type);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_IsVisible")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool _IsVisible(QCallTypeHandle typeHandle);
@@ -491,7 +491,7 @@ internal static bool IsVisible(RuntimeType type)
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern bool IsValueType(RuntimeType type);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_ConstructName")]
private static extern void ConstructName(QCallTypeHandle handle, TypeNameFormatFlags formatFlags, StringHandleOnStack retString);
internal string ConstructName(TypeNameFormatFlags formatFlags)
@@ -519,7 +519,7 @@ internal static MdUtf8String GetUtf8Name(RuntimeType type)
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern IRuntimeMethodInfo GetDeclaringMethod(RuntimeType type);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_GetTypeByName", CharSet = CharSet.Unicode)]
private static extern void GetTypeByName(string name, bool throwOnError, bool ignoreCase, StackCrawlMarkHandle stackMark,
ObjectHandleOnStack assemblyLoadContext,
ObjectHandleOnStack type, ObjectHandleOnStack keepalive);
@@ -553,7 +553,7 @@ private static extern void GetTypeByName(string name, bool throwOnError, bool ig
return type;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_GetTypeByNameUsingCARules", CharSet = CharSet.Unicode)]
private static extern void GetTypeByNameUsingCARules(string name, QCallModule scope, ObjectHandleOnStack type);
internal static RuntimeType GetTypeByNameUsingCARules(string name, RuntimeModule scope)
@@ -567,7 +567,7 @@ internal static RuntimeType GetTypeByNameUsingCARules(string name, RuntimeModule
return type!;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_GetInstantiation")]
internal static extern void GetInstantiation(QCallTypeHandle type, ObjectHandleOnStack types, Interop.BOOL fAsRuntimeTypeArray);
internal RuntimeType[] GetInstantiationInternal()
@@ -586,7 +586,7 @@ internal Type[] GetInstantiationPublic()
return types!;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_Instantiate")]
private static extern void Instantiate(QCallTypeHandle handle, IntPtr* pInst, int numGenericArgs, ObjectHandleOnStack type);
internal RuntimeType Instantiate(RuntimeType inst)
@@ -614,7 +614,7 @@ internal RuntimeType Instantiate(Type[]? inst)
}
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_MakeArray")]
private static extern void MakeArray(QCallTypeHandle handle, int rank, ObjectHandleOnStack type);
internal RuntimeType MakeArray(int rank)
@@ -625,7 +625,7 @@ internal RuntimeType MakeArray(int rank)
return type!;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_MakeSZArray")]
private static extern void MakeSZArray(QCallTypeHandle handle, ObjectHandleOnStack type);
internal RuntimeType MakeSZArray()
@@ -636,7 +636,7 @@ internal RuntimeType MakeSZArray()
return type!;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_MakeByRef")]
private static extern void MakeByRef(QCallTypeHandle handle, ObjectHandleOnStack type);
internal RuntimeType MakeByRef()
@@ -647,7 +647,7 @@ internal RuntimeType MakeByRef()
return type!;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_MakePointer")]
private static extern void MakePointer(QCallTypeHandle handle, ObjectHandleOnStack type);
internal RuntimeType MakePointer()
@@ -658,13 +658,13 @@ internal RuntimeType MakePointer()
return type!;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_IsCollectible")]
internal static extern Interop.BOOL IsCollectible(QCallTypeHandle handle);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern bool HasInstantiation(RuntimeType type);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_GetGenericTypeDefinition")]
private static extern void GetGenericTypeDefinition(QCallTypeHandle type, ObjectHandleOnStack retType);
internal static RuntimeType GetGenericTypeDefinition(RuntimeType type)
@@ -879,7 +879,7 @@ internal bool IsNullHandle()
return m_value == null;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeMethodHandle_GetFunctionPointer")]
internal static extern IntPtr GetFunctionPointer(RuntimeMethodHandleInternal handle);
public IntPtr GetFunctionPointer()
@@ -889,10 +889,10 @@ public IntPtr GetFunctionPointer()
return ptr;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeMethodHandle_GetIsCollectible")]
internal static extern Interop.BOOL GetIsCollectible(RuntimeMethodHandleInternal handle);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeMethodHandle_IsCAVisibleFromDecoratedType")]
internal static extern Interop.BOOL IsCAVisibleFromDecoratedType(
QCallTypeHandle attrTypeHandle,
RuntimeMethodHandleInternal attrCtor,
@@ -919,7 +919,7 @@ internal static MethodAttributes GetAttributes(IRuntimeMethodInfo method)
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern MethodImplAttributes GetImplAttributes(IRuntimeMethodInfo method);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeMethodHandle_ConstructInstantiation")]
private static extern void ConstructInstantiation(RuntimeMethodHandleInternal method, TypeNameFormatFlags format, StringHandleOnStack retString);
internal static string ConstructInstantiation(IRuntimeMethodInfo method, TypeNameFormatFlags format)
@@ -982,7 +982,7 @@ internal static MdUtf8String GetUtf8Name(RuntimeMethodHandleInternal method)
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern object? InvokeMethod(object? target, in Span
public static long LockContentionCount => GetLockContentionCount();
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ObjectNative_GetMonitorLockContentionCount")]
private static extern long GetLockContentionCount();
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs
index 83be00cf5e03f6..a94077585e474e 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs
@@ -92,7 +92,7 @@ private unsafe void StartCore()
}
}
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ThreadNative_Start")]
private static extern unsafe void StartInternal(ThreadHandle t, int stackSize, int priority, char* pThreadName);
// Called from the runtime
@@ -119,7 +119,7 @@ private void StartCallback()
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void SleepInternal(int millisecondsTimeout);
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ThreadNative_UninterruptibleSleep0")]
internal static extern void UninterruptibleSleep0();
///
@@ -132,7 +132,7 @@ private void StartCallback()
public static void SpinWait(int iterations) => SpinWaitInternal(iterations);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ThreadNative_YieldThread")]
private static extern Interop.BOOL YieldInternal();
public static bool Yield() => YieldInternal() != Interop.BOOL.FALSE;
@@ -157,7 +157,7 @@ partial void ThreadNameChanged(string? value)
InformThreadNameChange(GetNativeHandle(), value, value?.Length ?? 0);
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ThreadNative_InformThreadNameChange", CharSet = CharSet.Unicode)]
private static extern void InformThreadNameChange(ThreadHandle t, string? name, int len);
/// Returns true if the thread has been started and is not dead.
@@ -219,7 +219,7 @@ public ThreadPriority Priority
[MethodImpl(MethodImplOptions.InternalCall)]
private extern void SetPriorityNative(int priority);
- [DllImport(RuntimeHelpers.QCall)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ThreadNative_GetCurrentOSThreadId")]
private static extern ulong GetCurrentOSThreadId();
///
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Threading/ThreadPool.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Threading/ThreadPool.CoreCLR.cs
index cb7bfae3d235b2..e76bc247d1c044 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Threading/ThreadPool.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Threading/ThreadPool.CoreCLR.cs
@@ -157,10 +157,7 @@ public UnmanagedThreadPoolWorkItem(IntPtr callback, IntPtr state)
_state = state;
}
- void IThreadPoolWorkItem.Execute() => ExecuteUnmanagedThreadPoolWorkItem(_callback, _state);
-
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
- private static extern void ExecuteUnmanagedThreadPoolWorkItem(IntPtr callback, IntPtr state);
+ unsafe void IThreadPoolWorkItem.Execute() => ((delegate* unmanaged)_callback)(_state);
}
public static partial class ThreadPool
@@ -345,7 +342,7 @@ public static long CompletedWorkItemCount
}
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ThreadPool_GetCompletedWorkItemCount")]
private static extern long GetCompletedWorkItemCount();
private static long PendingUnmanagedWorkItemCount => UsePortableThreadPool ? 0 : GetPendingUnmanagedWorkItemCount();
@@ -422,7 +419,7 @@ internal static void RequestWorkerThread()
RequestWorkerThreadNative();
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ThreadPool_RequestWorkerThread")]
private static extern Interop.BOOL RequestWorkerThreadNative();
// Entry point from unmanaged code
@@ -443,7 +440,7 @@ internal static bool PerformRuntimeSpecificGateActivities(int cpuUtilization)
return PerformRuntimeSpecificGateActivitiesNative(cpuUtilization) != Interop.BOOL.FALSE;
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "ThreadPool_PerformGateActivities")]
private static extern Interop.BOOL PerformRuntimeSpecificGateActivitiesNative(int cpuUtilization);
[MethodImpl(MethodImplOptions.InternalCall)]
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Threading/Timer.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Threading/Timer.CoreCLR.cs
index ca4975f59229e4..ba4f2c9c3b826a 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Threading/Timer.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Threading/Timer.CoreCLR.cs
@@ -59,13 +59,13 @@ internal static void AppDomainTimerCallback(int id)
Instances[id].FireNextTimers();
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AppDomainTimer_Create")]
private static extern AppDomainTimerSafeHandle CreateAppDomainTimer(uint dueTime, int id);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AppDomainTimer_Change")]
private static extern bool ChangeAppDomainTimer(AppDomainTimerSafeHandle handle, uint dueTime);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "AppDomainTimer_Delete")]
private static extern bool DeleteAppDomainTimer(IntPtr handle);
#endregion
diff --git a/src/coreclr/System.Private.CoreLib/src/System/TypeLoadException.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/TypeLoadException.CoreCLR.cs
index 9d1e59821d4f90..c478e7d1b5004a 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/TypeLoadException.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/TypeLoadException.CoreCLR.cs
@@ -46,7 +46,7 @@ private void SetMessageField()
}
}
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall)]
private static extern void GetTypeLoadExceptionMessage(int resourceId, StringHandleOnStack retString);
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/TypeNameParser.cs b/src/coreclr/System.Private.CoreLib/src/System/TypeNameParser.cs
index 9a00284c9a3c79..bba08c98482eb4 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/TypeNameParser.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/TypeNameParser.cs
@@ -17,8 +17,8 @@ namespace System
internal sealed class SafeTypeNameParserHandle : SafeHandleZeroOrMinusOneIsInvalid
{
#region QCalls
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
- private static extern void _ReleaseTypeNameParser(IntPtr pTypeNameParser);
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeName_ReleaseTypeNameParser")]
+ private static extern void Release(IntPtr pTypeNameParser);
#endregion
public SafeTypeNameParserHandle()
@@ -28,7 +28,7 @@ public SafeTypeNameParserHandle()
protected override bool ReleaseHandle()
{
- _ReleaseTypeNameParser(handle);
+ Release(handle);
handle = IntPtr.Zero;
return true;
}
@@ -37,19 +37,19 @@ protected override bool ReleaseHandle()
internal sealed class TypeNameParser : IDisposable
{
#region QCalls
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeName_CreateTypeNameParser", CharSet = CharSet.Unicode)]
private static extern void _CreateTypeNameParser(string typeName, ObjectHandleOnStack retHandle, bool throwOnError);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeName_GetNames")]
private static extern void _GetNames(SafeTypeNameParserHandle pTypeNameParser, ObjectHandleOnStack retArray);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeName_GetTypeArguments")]
private static extern void _GetTypeArguments(SafeTypeNameParserHandle pTypeNameParser, ObjectHandleOnStack retArray);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeName_GetModifiers")]
private static extern void _GetModifiers(SafeTypeNameParserHandle pTypeNameParser, ObjectHandleOnStack retArray);
- [DllImport(RuntimeHelpers.QCall, CharSet = CharSet.Unicode)]
+ [DllImport(RuntimeHelpers.QCall, EntryPoint = "TypeName_GetAssemblyName")]
private static extern void _GetAssemblyName(SafeTypeNameParserHandle pTypeNameParser, StringHandleOnStack retString);
#endregion
diff --git a/src/coreclr/classlibnative/bcltype/objectnative.cpp b/src/coreclr/classlibnative/bcltype/objectnative.cpp
index 5ecbdc3b0c3742..711d5c343f1a37 100644
--- a/src/coreclr/classlibnative/bcltype/objectnative.cpp
+++ b/src/coreclr/classlibnative/bcltype/objectnative.cpp
@@ -321,7 +321,7 @@ FCIMPL1(FC_BOOL_RET, ObjectNative::IsLockHeld, Object* pThisUNSAFE)
}
FCIMPLEND
-INT64 QCALLTYPE ObjectNative::GetMonitorLockContentionCount()
+extern "C" INT64 QCALLTYPE ObjectNative_GetMonitorLockContentionCount()
{
QCALL_CONTRACT;
diff --git a/src/coreclr/classlibnative/bcltype/objectnative.h b/src/coreclr/classlibnative/bcltype/objectnative.h
index cc084e4d3b5189..c700ff2394987f 100644
--- a/src/coreclr/classlibnative/bcltype/objectnative.h
+++ b/src/coreclr/classlibnative/bcltype/objectnative.h
@@ -37,7 +37,7 @@ class ObjectNative
static FCDECL1(void, Pulse, Object* pThisUNSAFE);
static FCDECL1(void, PulseAll, Object* pThisUNSAFE);
static FCDECL1(FC_BOOL_RET, IsLockHeld, Object* pThisUNSAFE);
- static INT64 QCALLTYPE GetMonitorLockContentionCount();
};
+extern "C" INT64 QCALLTYPE ObjectNative_GetMonitorLockContentionCount();
#endif // _OBJECTNATIVE_H_
diff --git a/src/coreclr/classlibnative/bcltype/system.cpp b/src/coreclr/classlibnative/bcltype/system.cpp
index bf5cd0fc75309a..2d517279fad6fa 100644
--- a/src/coreclr/classlibnative/bcltype/system.cpp
+++ b/src/coreclr/classlibnative/bcltype/system.cpp
@@ -52,7 +52,7 @@ FCIMPLEND;
-VOID QCALLTYPE SystemNative::Exit(INT32 exitcode)
+extern "C" VOID QCALLTYPE Environment_Exit(INT32 exitcode)
{
QCALL_CONTRACT;
@@ -90,23 +90,6 @@ FCIMPL0(INT32, SystemNative::GetExitCode)
}
FCIMPLEND
-void QCALLTYPE SystemNative::_GetCommandLine(QCall::StringHandleOnStack retString)
-{
- QCALL_CONTRACT;
-
- BEGIN_QCALL;
-
- LPCWSTR commandLine;
-
- commandLine = WszGetCommandLine();
- if (commandLine==NULL)
- COMPlusThrowOM();
-
- retString.Set(commandLine);
-
- END_QCALL;
-}
-
FCIMPL0(Object*, SystemNative::GetCommandLineArgs)
{
FCALL_CONTRACT;
@@ -174,7 +157,7 @@ FCIMPL1(ReflectMethodObject*, SystemNative::GetMethodFromStackTrace, ArrayBase*
}
FCIMPLEND
-INT32 QCALLTYPE SystemNative::GetProcessorCount()
+extern "C" INT32 QCALLTYPE Environment_GetProcessorCount()
{
QCALL_CONTRACT;
@@ -432,7 +415,7 @@ FCIMPLEND
#if defined(TARGET_X86) || defined(TARGET_AMD64)
-void QCALLTYPE SystemNative::X86BaseCpuId(int cpuInfo[4], int functionId, int subFunctionId)
+extern "C" void QCALLTYPE X86BaseCpuId(int cpuInfo[4], int functionId, int subFunctionId)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/classlibnative/bcltype/system.h b/src/coreclr/classlibnative/bcltype/system.h
index 61f2deae894357..27e772be2af07d 100644
--- a/src/coreclr/classlibnative/bcltype/system.h
+++ b/src/coreclr/classlibnative/bcltype/system.h
@@ -40,46 +40,39 @@ class SystemNative
static FCDECL0(UINT32, GetTickCount);
static FCDECL0(UINT64, GetTickCount64);
- static
- void QCALLTYPE Exit(INT32 exitcode);
-
static FCDECL1(VOID,SetExitCode,INT32 exitcode);
static FCDECL0(INT32, GetExitCode);
- static
- void QCALLTYPE _GetCommandLine(QCall::StringHandleOnStack retString);
-
static FCDECL0(Object*, GetCommandLineArgs);
static FCDECL1(VOID, FailFast, StringObject* refMessageUNSAFE);
static FCDECL2(VOID, FailFastWithExitCode, StringObject* refMessageUNSAFE, UINT exitCode);
static FCDECL2(VOID, FailFastWithException, StringObject* refMessageUNSAFE, ExceptionObject* refExceptionUNSAFE);
static FCDECL3(VOID, FailFastWithExceptionAndSource, StringObject* refMessageUNSAFE, ExceptionObject* refExceptionUNSAFE, StringObject* errorSourceUNSAFE);
- // Returns the number of logical processors that can be used by managed code
- static INT32 QCALLTYPE GetProcessorCount();
-
static FCDECL0(FC_BOOL_RET, IsServerGC);
// Return a method info for the method were the exception was thrown
static FCDECL1(ReflectMethodObject*, GetMethodFromStackTrace, ArrayBase* pStackTraceUNSAFE);
-#if defined(TARGET_X86) || defined(TARGET_AMD64)
- static void QCALLTYPE X86BaseCpuId(int cpuInfo[4], int functionId, int subFunctionId);
-#endif // defined(TARGET_X86) || defined(TARGET_AMD64)
-
private:
// Common processing code for FailFast
static void GenericFailFast(STRINGREF refMesgString, EXCEPTIONREF refExceptionForWatsonBucketing, UINT_PTR retAddress, UINT exitCode, STRINGREF errorSource);
};
-/* static */
-void QCALLTYPE GetTypeLoadExceptionMessage(UINT32 resId, QCall::StringHandleOnStack retString);
+extern "C" void QCALLTYPE Environment_Exit(INT32 exitcode);
+
+// Returns the number of logical processors that can be used by managed code
+extern "C" INT32 QCALLTYPE Environment_GetProcessorCount();
+
+#if defined(TARGET_X86) || defined(TARGET_AMD64)
+extern "C" void QCALLTYPE X86BaseCpuId(int cpuInfo[4], int functionId, int subFunctionId);
+#endif // defined(TARGET_X86) || defined(TARGET_AMD64)
+
+extern "C" void QCALLTYPE GetTypeLoadExceptionMessage(UINT32 resId, QCall::StringHandleOnStack retString);
-/* static */
-void QCALLTYPE GetFileLoadExceptionMessage(UINT32 hr, QCall::StringHandleOnStack retString);
+extern "C" void QCALLTYPE GetFileLoadExceptionMessage(UINT32 hr, QCall::StringHandleOnStack retString);
-/* static */
-void QCALLTYPE FileLoadException_GetMessageForHR(UINT32 hresult, QCall::StringHandleOnStack retString);
+extern "C" void QCALLTYPE FileLoadException_GetMessageForHR(UINT32 hresult, QCall::StringHandleOnStack retString);
#endif // _SYSTEM_H_
diff --git a/src/coreclr/vm/CMakeLists.txt b/src/coreclr/vm/CMakeLists.txt
index 1e961638b8c067..8c4562105ecc57 100644
--- a/src/coreclr/vm/CMakeLists.txt
+++ b/src/coreclr/vm/CMakeLists.txt
@@ -4,6 +4,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${ARCH_SOURCES_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../interop/inc)
+include_directories(${CLR_SRC_NATIVE_DIR})
# needed when zLib compression is used
include_directories(${CLR_SRC_LIBS_NATIVE_DIR}/AnyOS/zlib)
@@ -363,6 +364,7 @@ set(VM_SOURCES_WKS
profilinghelper.cpp
proftoeeinterfaceimpl.cpp
qcall.cpp
+ qcallentrypoints.cpp
reflectclasswriter.cpp
reflectioninvocation.cpp
runtimehandles.cpp
diff --git a/src/coreclr/vm/appdomainnative.cpp b/src/coreclr/vm/appdomainnative.cpp
index 5992976e315c20..cafda33dd69e0c 100644
--- a/src/coreclr/vm/appdomainnative.cpp
+++ b/src/coreclr/vm/appdomainnative.cpp
@@ -16,7 +16,7 @@
using namespace clr::fs;
// static
-void QCALLTYPE AppDomainNative::CreateDynamicAssembly(QCall::ObjectHandleOnStack assemblyName, QCall::StackCrawlMarkHandle stackMark, INT32 access, QCall::ObjectHandleOnStack assemblyLoadContext, QCall::ObjectHandleOnStack retAssembly)
+extern "C" void QCALLTYPE AppDomain_CreateDynamicAssembly(QCall::ObjectHandleOnStack assemblyName, QCall::StackCrawlMarkHandle stackMark, INT32 access, QCall::ObjectHandleOnStack assemblyLoadContext, QCall::ObjectHandleOnStack retAssembly)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/appdomainnative.hpp b/src/coreclr/vm/appdomainnative.hpp
index fa128750d00398..4e3b114be30b1e 100644
--- a/src/coreclr/vm/appdomainnative.hpp
+++ b/src/coreclr/vm/appdomainnative.hpp
@@ -19,10 +19,10 @@
class AppDomainNative
{
public:
- static void QCALLTYPE CreateDynamicAssembly(QCall::ObjectHandleOnStack assemblyName, QCall::StackCrawlMarkHandle stackMark, INT32 access, QCall::ObjectHandleOnStack assemblyLoadContext, QCall::ObjectHandleOnStack retAssembly);
static FCDECL0(Object*, GetLoadedAssemblies);
static FCDECL1(Object*, GetOrInternString, StringObject* pStringUNSAFE);
static FCDECL1(Object*, IsStringInterned, StringObject* pString);
};
+extern "C" void QCALLTYPE AppDomain_CreateDynamicAssembly(QCall::ObjectHandleOnStack assemblyName, QCall::StackCrawlMarkHandle stackMark, INT32 access, QCall::ObjectHandleOnStack assemblyLoadContext, QCall::ObjectHandleOnStack retAssembly);
#endif
diff --git a/src/coreclr/vm/assemblynative.cpp b/src/coreclr/vm/assemblynative.cpp
index a67c9e5c4c0b65..82717ec56b0a88 100644
--- a/src/coreclr/vm/assemblynative.cpp
+++ b/src/coreclr/vm/assemblynative.cpp
@@ -32,13 +32,12 @@
#include "../binder/inc/bindertracing.h"
#include "../binder/inc/defaultassemblybinder.h"
-/* static */
-void QCALLTYPE AssemblyNative::InternalLoad(QCall::ObjectHandleOnStack assemblyName,
- QCall::ObjectHandleOnStack requestingAssembly,
- QCall::StackCrawlMarkHandle stackMark,
- BOOL fThrowOnFileNotFound,
- QCall::ObjectHandleOnStack assemblyLoadContext,
- QCall::ObjectHandleOnStack retAssembly)
+extern "C" void QCALLTYPE AssemblyNative_InternalLoad(QCall::ObjectHandleOnStack assemblyName,
+ QCall::ObjectHandleOnStack requestingAssembly,
+ QCall::StackCrawlMarkHandle stackMark,
+ BOOL fThrowOnFileNotFound,
+ QCall::ObjectHandleOnStack assemblyLoadContext,
+ QCall::ObjectHandleOnStack retAssembly)
{
QCALL_CONTRACT;
@@ -190,8 +189,7 @@ Assembly* AssemblyNative::LoadFromPEImage(AssemblyBinder* pBinder, PEImage *pIma
RETURN pDomainAssembly->GetAssembly();
}
-/* static */
-void QCALLTYPE AssemblyNative::LoadFromPath(INT_PTR ptrNativeAssemblyBinder, LPCWSTR pwzILPath, LPCWSTR pwzNIPath, QCall::ObjectHandleOnStack retLoadedAssembly)
+extern "C" void QCALLTYPE AssemblyNative_LoadFromPath(INT_PTR ptrNativeAssemblyBinder, LPCWSTR pwzILPath, LPCWSTR pwzNIPath, QCall::ObjectHandleOnStack retLoadedAssembly)
{
QCALL_CONTRACT;
@@ -240,7 +238,7 @@ void QCALLTYPE AssemblyNative::LoadFromPath(INT_PTR ptrNativeAssemblyBinder, LPC
}
/*static */
-void QCALLTYPE AssemblyNative::LoadFromStream(INT_PTR ptrNativeAssemblyBinder, INT_PTR ptrAssemblyArray,
+extern "C" void QCALLTYPE AssemblyNative_LoadFromStream(INT_PTR ptrNativeAssemblyBinder, INT_PTR ptrAssemblyArray,
INT32 cbAssemblyArrayLength, INT_PTR ptrSymbolArray, INT32 cbSymbolArrayLength,
QCall::ObjectHandleOnStack retLoadedAssembly)
{
@@ -308,9 +306,9 @@ void QCALLTYPE AssemblyNative::LoadFromStream(INT_PTR ptrNativeAssemblyBinder, I
END_QCALL;
}
-#ifndef TARGET_UNIX
+#ifdef TARGET_WINDOWS
/*static */
-void QCALLTYPE AssemblyNative::LoadFromInMemoryModule(INT_PTR ptrNativeAssemblyBinder, INT_PTR hModule, QCall::ObjectHandleOnStack retLoadedAssembly)
+extern "C" void QCALLTYPE AssemblyNative_LoadFromInMemoryModule(INT_PTR ptrNativeAssemblyBinder, INT_PTR hModule, QCall::ObjectHandleOnStack retLoadedAssembly)
{
QCALL_CONTRACT;
@@ -344,7 +342,7 @@ void QCALLTYPE AssemblyNative::LoadFromInMemoryModule(INT_PTR ptrNativeAssemblyB
}
#endif
-void QCALLTYPE AssemblyNative::GetLocation(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE AssemblyNative_GetLocation(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -357,7 +355,7 @@ void QCALLTYPE AssemblyNative::GetLocation(QCall::AssemblyHandle pAssembly, QCal
END_QCALL;
}
-void QCALLTYPE AssemblyNative::GetType(QCall::AssemblyHandle pAssembly,
+extern "C" void QCALLTYPE AssemblyNative_GetType(QCall::AssemblyHandle pAssembly,
LPCWSTR wszName,
BOOL bThrowOnError,
BOOL bIgnoreCase,
@@ -407,7 +405,7 @@ void QCALLTYPE AssemblyNative::GetType(QCall::AssemblyHandle pAssembly,
return;
}
-void QCALLTYPE AssemblyNative::GetForwardedType(QCall::AssemblyHandle pAssembly, mdToken mdtExternalType, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE AssemblyNative_GetForwardedType(QCall::AssemblyHandle pAssembly, mdToken mdtExternalType, QCall::ObjectHandleOnStack retType)
{
CONTRACTL
{
@@ -453,7 +451,7 @@ FCIMPL1(FC_BOOL_RET, AssemblyNative::IsDynamic, AssemblyBaseObject* pAssemblyUNS
}
FCIMPLEND
-void QCALLTYPE AssemblyNative::GetVersion(QCall::AssemblyHandle pAssembly, INT32* pMajorVersion, INT32* pMinorVersion, INT32*pBuildNumber, INT32* pRevisionNumber)
+extern "C" void QCALLTYPE AssemblyNative_GetVersion(QCall::AssemblyHandle pAssembly, INT32* pMajorVersion, INT32* pMinorVersion, INT32*pBuildNumber, INT32* pRevisionNumber)
{
QCALL_CONTRACT;
@@ -471,7 +469,7 @@ void QCALLTYPE AssemblyNative::GetVersion(QCall::AssemblyHandle pAssembly, INT32
END_QCALL;
}
-void QCALLTYPE AssemblyNative::GetPublicKey(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retPublicKey)
+extern "C" void QCALLTYPE AssemblyNative_GetPublicKey(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retPublicKey)
{
QCALL_CONTRACT;
@@ -484,7 +482,7 @@ void QCALLTYPE AssemblyNative::GetPublicKey(QCall::AssemblyHandle pAssembly, QCa
END_QCALL;
}
-void QCALLTYPE AssemblyNative::GetSimpleName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retSimpleName)
+extern "C" void QCALLTYPE AssemblyNative_GetSimpleName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retSimpleName)
{
QCALL_CONTRACT;
@@ -493,7 +491,7 @@ void QCALLTYPE AssemblyNative::GetSimpleName(QCall::AssemblyHandle pAssembly, QC
END_QCALL;
}
-void QCALLTYPE AssemblyNative::GetLocale(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE AssemblyNative_GetLocale(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -508,7 +506,7 @@ void QCALLTYPE AssemblyNative::GetLocale(QCall::AssemblyHandle pAssembly, QCall:
END_QCALL;
}
-BOOL QCALLTYPE AssemblyNative::GetCodeBase(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString)
+extern "C" BOOL QCALLTYPE AssemblyNative_GetCodeBase(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -528,7 +526,7 @@ BOOL QCALLTYPE AssemblyNative::GetCodeBase(QCall::AssemblyHandle pAssembly, QCal
return ret;
}
-INT32 QCALLTYPE AssemblyNative::GetHashAlgorithm(QCall::AssemblyHandle pAssembly)
+extern "C" INT32 QCALLTYPE AssemblyNative_GetHashAlgorithm(QCall::AssemblyHandle pAssembly)
{
QCALL_CONTRACT;
@@ -539,7 +537,7 @@ INT32 QCALLTYPE AssemblyNative::GetHashAlgorithm(QCall::AssemblyHandle pAssembly
return retVal;
}
-INT32 QCALLTYPE AssemblyNative::GetFlags(QCall::AssemblyHandle pAssembly)
+extern "C" INT32 QCALLTYPE AssemblyNative_GetFlags(QCall::AssemblyHandle pAssembly)
{
QCALL_CONTRACT;
@@ -550,7 +548,7 @@ INT32 QCALLTYPE AssemblyNative::GetFlags(QCall::AssemblyHandle pAssembly)
return retVal;
}
-BYTE * QCALLTYPE AssemblyNative::GetResource(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, DWORD * length)
+extern "C" BYTE * QCALLTYPE AssemblyNative_GetResource(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, DWORD * length)
{
QCALL_CONTRACT;
@@ -580,7 +578,7 @@ BYTE * QCALLTYPE AssemblyNative::GetResource(QCall::AssemblyHandle pAssembly, LP
return pbInMemoryResource;
}
-INT32 QCALLTYPE AssemblyNative::GetManifestResourceInfo(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, QCall::ObjectHandleOnStack retAssembly, QCall::StringHandleOnStack retFileName)
+extern "C" INT32 QCALLTYPE AssemblyNative_GetManifestResourceInfo(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, QCall::ObjectHandleOnStack retAssembly, QCall::StringHandleOnStack retFileName)
{
QCALL_CONTRACT;
@@ -623,7 +621,7 @@ INT32 QCALLTYPE AssemblyNative::GetManifestResourceInfo(QCall::AssemblyHandle pA
return rv;
}
-void QCALLTYPE AssemblyNative::GetModules(QCall::AssemblyHandle pAssembly, BOOL fLoadIfNotFound, BOOL fGetResourceModules, QCall::ObjectHandleOnStack retModules)
+extern "C" void QCALLTYPE AssemblyNative_GetModules(QCall::AssemblyHandle pAssembly, BOOL fLoadIfNotFound, BOOL fGetResourceModules, QCall::ObjectHandleOnStack retModules)
{
QCALL_CONTRACT;
@@ -672,7 +670,7 @@ void QCALLTYPE AssemblyNative::GetModules(QCall::AssemblyHandle pAssembly, BOOL
END_QCALL;
}
-BOOL QCALLTYPE AssemblyNative::GetIsCollectible(QCall::AssemblyHandle pAssembly)
+extern "C" BOOL QCALLTYPE AssemblyNative_GetIsCollectible(QCall::AssemblyHandle pAssembly)
{
QCALL_CONTRACT;
@@ -689,15 +687,14 @@ BOOL QCALLTYPE AssemblyNative::GetIsCollectible(QCall::AssemblyHandle pAssembly)
extern volatile uint32_t g_cAssemblies;
-FCIMPL0(uint32_t, AssemblyNative::GetAssemblyCount)
+extern "C" uint32_t QCALLTYPE AssemblyNative_GetAssemblyCount()
{
- FCALL_CONTRACT;
+ QCALL_CONTRACT_NO_GC_TRANSITION;
return g_cAssemblies;
}
-FCIMPLEND
-void QCALLTYPE AssemblyNative::GetModule(QCall::AssemblyHandle pAssembly, LPCWSTR wszFileName, QCall::ObjectHandleOnStack retModule)
+extern "C" void QCALLTYPE AssemblyNative_GetModule(QCall::AssemblyHandle pAssembly, LPCWSTR wszFileName, QCall::ObjectHandleOnStack retModule)
{
QCALL_CONTRACT;
@@ -736,7 +733,7 @@ void QCALLTYPE AssemblyNative::GetModule(QCall::AssemblyHandle pAssembly, LPCWST
return;
}
-void QCALLTYPE AssemblyNative::GetExportedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes)
+extern "C" void QCALLTYPE AssemblyNative_GetExportedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes)
{
QCALL_CONTRACT;
@@ -856,7 +853,7 @@ void QCALLTYPE AssemblyNative::GetExportedTypes(QCall::AssemblyHandle pAssembly,
END_QCALL;
}
-void QCALLTYPE AssemblyNative::GetForwardedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes)
+extern "C" void QCALLTYPE AssemblyNative_GetForwardedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes)
{
QCALL_CONTRACT;
@@ -1032,7 +1029,7 @@ FCIMPL1(Object*, AssemblyNative::GetReferencedAssemblies, AssemblyBaseObject * p
}
FCIMPLEND
-void QCALLTYPE AssemblyNative::GetEntryPoint(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retMethod)
+extern "C" void QCALLTYPE AssemblyNative_GetEntryPoint(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retMethod)
{
QCALL_CONTRACT;
@@ -1058,7 +1055,7 @@ void QCALLTYPE AssemblyNative::GetEntryPoint(QCall::AssemblyHandle pAssembly, QC
//
//
-void QCALLTYPE AssemblyNative::GetFullName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE AssemblyNative_GetFullName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -1071,7 +1068,7 @@ void QCALLTYPE AssemblyNative::GetFullName(QCall::AssemblyHandle pAssembly, QCal
END_QCALL;
}
-void QCALLTYPE AssemblyNative::GetExecutingAssembly(QCall::StackCrawlMarkHandle stackMark, QCall::ObjectHandleOnStack retAssembly)
+extern "C" void QCALLTYPE AssemblyNative_GetExecutingAssembly(QCall::StackCrawlMarkHandle stackMark, QCall::ObjectHandleOnStack retAssembly)
{
QCALL_CONTRACT;
@@ -1091,14 +1088,14 @@ void QCALLTYPE AssemblyNative::GetExecutingAssembly(QCall::StackCrawlMarkHandle
return;
}
-void QCALLTYPE AssemblyNative::GetEntryAssembly(QCall::ObjectHandleOnStack retAssembly)
+extern "C" void QCALLTYPE AssemblyNative_GetEntryAssembly(QCall::ObjectHandleOnStack retAssembly)
{
QCALL_CONTRACT;
BEGIN_QCALL;
DomainAssembly * pRootAssembly = NULL;
- Assembly * pAssembly = GetAppDomain()->m_pRootAssembly;
+ Assembly * pAssembly = GetAppDomain()->GetRootAssembly();
if (pAssembly)
{
@@ -1129,7 +1126,7 @@ FCIMPL1(ReflectModuleBaseObject *, AssemblyNative::GetInMemoryAssemblyModule, As
}
FCIMPLEND
-void QCALLTYPE AssemblyNative::GetImageRuntimeVersion(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE AssemblyNative_GetImageRuntimeVersion(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -1152,7 +1149,7 @@ void QCALLTYPE AssemblyNative::GetImageRuntimeVersion(QCall::AssemblyHandle pAss
/*static*/
-INT_PTR QCALLTYPE AssemblyNative::InitializeAssemblyLoadContext(INT_PTR ptrManagedAssemblyLoadContext, BOOL fRepresentsTPALoadContext, BOOL fIsCollectible)
+extern "C" INT_PTR QCALLTYPE AssemblyNative_InitializeAssemblyLoadContext(INT_PTR ptrManagedAssemblyLoadContext, BOOL fRepresentsTPALoadContext, BOOL fIsCollectible)
{
QCALL_CONTRACT;
@@ -1225,7 +1222,7 @@ INT_PTR QCALLTYPE AssemblyNative::InitializeAssemblyLoadContext(INT_PTR ptrManag
}
/*static*/
-void QCALLTYPE AssemblyNative::PrepareForAssemblyLoadContextRelease(INT_PTR ptrNativeAssemblyBinder, INT_PTR ptrManagedStrongAssemblyLoadContext)
+extern "C" void QCALLTYPE AssemblyNative_PrepareForAssemblyLoadContextRelease(INT_PTR ptrNativeAssemblyBinder, INT_PTR ptrManagedStrongAssemblyLoadContext)
{
QCALL_CONTRACT;
@@ -1243,7 +1240,7 @@ void QCALLTYPE AssemblyNative::PrepareForAssemblyLoadContextRelease(INT_PTR ptrN
}
/*static*/
-INT_PTR QCALLTYPE AssemblyNative::GetLoadContextForAssembly(QCall::AssemblyHandle pAssembly)
+extern "C" INT_PTR QCALLTYPE AssemblyNative_GetLoadContextForAssembly(QCall::AssemblyHandle pAssembly)
{
QCALL_CONTRACT;
@@ -1268,7 +1265,7 @@ INT_PTR QCALLTYPE AssemblyNative::GetLoadContextForAssembly(QCall::AssemblyHandl
}
// static
-BOOL QCALLTYPE AssemblyNative::InternalTryGetRawMetadata(
+extern "C" BOOL QCALLTYPE AssemblyNative_InternalTryGetRawMetadata(
QCall::AssemblyHandle assembly,
UINT8 **blobRef,
INT32 *lengthRef)
@@ -1303,7 +1300,7 @@ FCIMPL0(FC_BOOL_RET, AssemblyNative::IsTracingEnabled)
FCIMPLEND
// static
-void QCALLTYPE AssemblyNative::TraceResolvingHandlerInvoked(LPCWSTR assemblyName, LPCWSTR handlerName, LPCWSTR alcName, LPCWSTR resultAssemblyName, LPCWSTR resultAssemblyPath)
+extern "C" void QCALLTYPE AssemblyNative_TraceResolvingHandlerInvoked(LPCWSTR assemblyName, LPCWSTR handlerName, LPCWSTR alcName, LPCWSTR resultAssemblyName, LPCWSTR resultAssemblyPath)
{
QCALL_CONTRACT;
@@ -1315,7 +1312,7 @@ void QCALLTYPE AssemblyNative::TraceResolvingHandlerInvoked(LPCWSTR assemblyName
}
// static
-void QCALLTYPE AssemblyNative::TraceAssemblyResolveHandlerInvoked(LPCWSTR assemblyName, LPCWSTR handlerName, LPCWSTR resultAssemblyName, LPCWSTR resultAssemblyPath)
+extern "C" void QCALLTYPE AssemblyNative_TraceAssemblyResolveHandlerInvoked(LPCWSTR assemblyName, LPCWSTR handlerName, LPCWSTR resultAssemblyName, LPCWSTR resultAssemblyPath)
{
QCALL_CONTRACT;
@@ -1327,7 +1324,7 @@ void QCALLTYPE AssemblyNative::TraceAssemblyResolveHandlerInvoked(LPCWSTR assemb
}
// static
-void QCALLTYPE AssemblyNative::TraceAssemblyLoadFromResolveHandlerInvoked(LPCWSTR assemblyName, bool isTrackedAssembly, LPCWSTR requestingAssemblyPath, LPCWSTR requestedAssemblyPath)
+extern "C" void QCALLTYPE AssemblyNative_TraceAssemblyLoadFromResolveHandlerInvoked(LPCWSTR assemblyName, bool isTrackedAssembly, LPCWSTR requestingAssemblyPath, LPCWSTR requestedAssemblyPath)
{
QCALL_CONTRACT;
@@ -1339,7 +1336,7 @@ void QCALLTYPE AssemblyNative::TraceAssemblyLoadFromResolveHandlerInvoked(LPCWST
}
// static
-void QCALLTYPE AssemblyNative::TraceSatelliteSubdirectoryPathProbed(LPCWSTR filePath, HRESULT hr)
+extern "C" void QCALLTYPE AssemblyNative_TraceSatelliteSubdirectoryPathProbed(LPCWSTR filePath, HRESULT hr)
{
QCALL_CONTRACT;
@@ -1351,7 +1348,7 @@ void QCALLTYPE AssemblyNative::TraceSatelliteSubdirectoryPathProbed(LPCWSTR file
}
// static
-void QCALLTYPE AssemblyNative::ApplyUpdate(
+extern "C" void QCALLTYPE AssemblyNative_ApplyUpdate(
QCall::AssemblyHandle assembly,
UINT8* metadataDelta,
INT32 metadataDeltaLength,
@@ -1397,7 +1394,7 @@ void QCALLTYPE AssemblyNative::ApplyUpdate(
}
// static
-BOOL QCALLTYPE AssemblyNative::IsApplyUpdateSupported()
+extern "C" BOOL QCALLTYPE AssemblyNative_IsApplyUpdateSupported()
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/assemblynative.hpp b/src/coreclr/vm/assemblynative.hpp
index 6270e5072612eb..912424e5214304 100644
--- a/src/coreclr/vm/assemblynative.hpp
+++ b/src/coreclr/vm/assemblynative.hpp
@@ -24,13 +24,10 @@ class AssemblyNative
friend class DomainAssembly;
public:
- // static FCALLs
- static
- void QCALLTYPE GetEntryAssembly(QCall::ObjectHandleOnStack retAssembly);
- static
- void QCALLTYPE GetExecutingAssembly(QCall::StackCrawlMarkHandle stackMark, QCall::ObjectHandleOnStack retAssembly);
+ static Assembly* LoadFromPEImage(AssemblyBinder* pBinder, PEImage *pImage);
+ // static FCALLs
static FCDECL0(FC_BOOL_RET, IsTracingEnabled);
//
@@ -38,99 +35,113 @@ class AssemblyNative
//
static
- void QCALLTYPE GetLocale(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString);
+ FCDECL1(FC_BOOL_RET, IsDynamic, AssemblyBaseObject * pAssemblyUNSAFE);
+ static FCDECL1(Object*, GetManifestResourceNames, AssemblyBaseObject * pAssemblyUNSAFE);
+ static FCDECL1(Object*, GetReferencedAssemblies, AssemblyBaseObject * pAssemblyUNSAFE);
+ static FCDECL1(ReflectModuleBaseObject *, GetInMemoryAssemblyModule, AssemblyBaseObject * pAssemblyUNSAFE);
+};
- static
- INT32 QCALLTYPE GetHashAlgorithm(QCall::AssemblyHandle pAssembly);
+extern "C" uint32_t QCALLTYPE AssemblyNative_GetAssemblyCount();
+extern "C" void QCALLTYPE AssemblyNative_GetEntryAssembly(QCall::ObjectHandleOnStack retAssembly);
- static
- void QCALLTYPE GetSimpleName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retSimpleName);
- static
- void QCALLTYPE GetPublicKey(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retPublicKey);
+extern "C" void QCALLTYPE AssemblyNative_GetExecutingAssembly(QCall::StackCrawlMarkHandle stackMark, QCall::ObjectHandleOnStack retAssembly);
- static
- INT32 QCALLTYPE GetFlags(QCall::AssemblyHandle pAssembly);
- static
- void QCALLTYPE GetFullName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString);
+extern "C" void QCALLTYPE AssemblyNative_GetLocale(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString);
- static
- void QCALLTYPE GetLocation(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString);
- static
- BOOL QCALLTYPE GetCodeBase(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString);
+extern "C" INT32 QCALLTYPE AssemblyNative_GetHashAlgorithm(QCall::AssemblyHandle pAssembly);
- static
- BYTE * QCALLTYPE GetResource(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, DWORD * length);
- static
- FCDECL1(FC_BOOL_RET, IsDynamic, AssemblyBaseObject * pAssemblyUNSAFE);
- static
- void QCALLTYPE GetVersion(QCall::AssemblyHandle pAssembly, INT32* pMajorVersion, INT32* pMinorVersion, INT32*pBuildNumber, INT32* pRevisionNumber);
+extern "C" void QCALLTYPE AssemblyNative_GetSimpleName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retSimpleName);
- static
- void QCALLTYPE GetType(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, BOOL bThrowOnError, BOOL bIgnoreCase, QCall::ObjectHandleOnStack retType, QCall::ObjectHandleOnStack keepAlive, QCall::ObjectHandleOnStack pAssemblyLoadContext);
- static
- void QCALLTYPE GetForwardedType(QCall::AssemblyHandle pAssembly, mdToken mdtExternalType, QCall::ObjectHandleOnStack retType);
+extern "C" void QCALLTYPE AssemblyNative_GetPublicKey(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retPublicKey);
- static
- INT32 QCALLTYPE GetManifestResourceInfo(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, QCall::ObjectHandleOnStack retAssembly, QCall::StringHandleOnStack retFileName);
- static
- void QCALLTYPE GetModules(QCall::AssemblyHandle pAssembly, BOOL fLoadIfNotFound, BOOL fGetResourceModules, QCall::ObjectHandleOnStack retModules);
+extern "C" INT32 QCALLTYPE AssemblyNative_GetFlags(QCall::AssemblyHandle pAssembly);
- static
- void QCALLTYPE GetModule(QCall::AssemblyHandle pAssembly, LPCWSTR wszFileName, QCall::ObjectHandleOnStack retModule);
- static
- void QCALLTYPE GetExportedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes);
+extern "C" void QCALLTYPE AssemblyNative_GetFullName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString);
- static
- void QCALLTYPE GetForwardedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes);
- static FCDECL1(Object*, GetManifestResourceNames, AssemblyBaseObject * pAssemblyUNSAFE);
- static FCDECL1(Object*, GetReferencedAssemblies, AssemblyBaseObject * pAssemblyUNSAFE);
+extern "C" void QCALLTYPE AssemblyNative_GetLocation(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString);
- static
- void QCALLTYPE GetEntryPoint(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retMethod);
- static FCDECL1(ReflectModuleBaseObject *, GetInMemoryAssemblyModule, AssemblyBaseObject * pAssemblyUNSAFE);
+extern "C" BOOL QCALLTYPE AssemblyNative_GetCodeBase(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString);
- static
- void QCALLTYPE GetImageRuntimeVersion(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString);
- static BOOL QCALLTYPE GetIsCollectible(QCall::AssemblyHandle pAssembly);
+extern "C" BYTE * QCALLTYPE AssemblyNative_GetResource(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, DWORD * length);
- static FCDECL0(uint32_t, GetAssemblyCount);
- //
- // PEAssembly QCalls
- //
- static INT_PTR QCALLTYPE InitializeAssemblyLoadContext(INT_PTR ptrManagedAssemblyLoadContext, BOOL fRepresentsTPALoadContext, BOOL fIsCollectible);
- static void QCALLTYPE PrepareForAssemblyLoadContextRelease(INT_PTR ptrNativeAssemblyBinder, INT_PTR ptrManagedStrongAssemblyLoadContext);
- static void QCALLTYPE InternalLoad(QCall::ObjectHandleOnStack assemblyName, QCall::ObjectHandleOnStack requestingAssembly, QCall::StackCrawlMarkHandle stackMark,BOOL fThrowOnFileNotFound, QCall::ObjectHandleOnStack assemblyLoadContext, QCall::ObjectHandleOnStack retAssembly);
- static void QCALLTYPE LoadFromPath(INT_PTR ptrNativeAssemblyBinder, LPCWSTR pwzILPath, LPCWSTR pwzNIPath, QCall::ObjectHandleOnStack retLoadedAssembly);
- static void QCALLTYPE LoadFromStream(INT_PTR ptrNativeAssemblyBinder, INT_PTR ptrAssemblyArray, INT32 cbAssemblyArrayLength, INT_PTR ptrSymbolArray, INT32 cbSymbolArrayLength, QCall::ObjectHandleOnStack retLoadedAssembly);
-#ifndef TARGET_UNIX
- static void QCALLTYPE LoadFromInMemoryModule(INT_PTR ptrNativeAssemblyBinder, INT_PTR hModule, QCall::ObjectHandleOnStack retLoadedAssembly);
+extern "C" void QCALLTYPE AssemblyNative_GetVersion(QCall::AssemblyHandle pAssembly, INT32* pMajorVersion, INT32* pMinorVersion, INT32*pBuildNumber, INT32* pRevisionNumber);
+
+
+extern "C" void QCALLTYPE AssemblyNative_GetType(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, BOOL bThrowOnError, BOOL bIgnoreCase, QCall::ObjectHandleOnStack retType, QCall::ObjectHandleOnStack keepAlive, QCall::ObjectHandleOnStack pAssemblyLoadContext);
+
+
+extern "C" void QCALLTYPE AssemblyNative_GetForwardedType(QCall::AssemblyHandle pAssembly, mdToken mdtExternalType, QCall::ObjectHandleOnStack retType);
+
+
+extern "C" INT32 QCALLTYPE AssemblyNative_GetManifestResourceInfo(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, QCall::ObjectHandleOnStack retAssembly, QCall::StringHandleOnStack retFileName);
+
+
+extern "C" void QCALLTYPE AssemblyNative_GetModules(QCall::AssemblyHandle pAssembly, BOOL fLoadIfNotFound, BOOL fGetResourceModules, QCall::ObjectHandleOnStack retModules);
+
+
+extern "C" void QCALLTYPE AssemblyNative_GetModule(QCall::AssemblyHandle pAssembly, LPCWSTR wszFileName, QCall::ObjectHandleOnStack retModule);
+
+
+extern "C" void QCALLTYPE AssemblyNative_GetExportedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes);
+
+
+extern "C" void QCALLTYPE AssemblyNative_GetForwardedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes);
+
+
+extern "C" void QCALLTYPE AssemblyNative_GetEntryPoint(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retMethod);
+
+
+
+extern "C" void QCALLTYPE AssemblyNative_GetImageRuntimeVersion(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString);
+
+
+extern "C" BOOL QCALLTYPE AssemblyNative_GetIsCollectible(QCall::AssemblyHandle pAssembly);
+
+extern "C" INT_PTR QCALLTYPE AssemblyNative_InitializeAssemblyLoadContext(INT_PTR ptrManagedAssemblyLoadContext, BOOL fRepresentsTPALoadContext, BOOL fIsCollectible);
+
+extern "C" void QCALLTYPE AssemblyNative_PrepareForAssemblyLoadContextRelease(INT_PTR ptrNativeAssemblyBinder, INT_PTR ptrManagedStrongAssemblyLoadContext);
+
+extern "C" void QCALLTYPE AssemblyNative_InternalLoad(QCall::ObjectHandleOnStack assemblyName, QCall::ObjectHandleOnStack requestingAssembly, QCall::StackCrawlMarkHandle stackMark,BOOL fThrowOnFileNotFound, QCall::ObjectHandleOnStack assemblyLoadContext, QCall::ObjectHandleOnStack retAssembly);
+
+extern "C" void QCALLTYPE AssemblyNative_LoadFromPath(INT_PTR ptrNativeAssemblyBinder, LPCWSTR pwzILPath, LPCWSTR pwzNIPath, QCall::ObjectHandleOnStack retLoadedAssembly);
+
+extern "C" void QCALLTYPE AssemblyNative_LoadFromStream(INT_PTR ptrNativeAssemblyBinder, INT_PTR ptrAssemblyArray, INT32 cbAssemblyArrayLength, INT_PTR ptrSymbolArray, INT32 cbSymbolArrayLength, QCall::ObjectHandleOnStack retLoadedAssembly);
+#ifdef TARGET_WINDOWS
+
+extern "C" void QCALLTYPE AssemblyNative_LoadFromInMemoryModule(INT_PTR ptrNativeAssemblyBinder, INT_PTR hModule, QCall::ObjectHandleOnStack retLoadedAssembly);
#endif
- static Assembly* LoadFromPEImage(AssemblyBinder* pBinder, PEImage *pImage);
- static INT_PTR QCALLTYPE GetLoadContextForAssembly(QCall::AssemblyHandle pAssembly);
- static BOOL QCALLTYPE InternalTryGetRawMetadata(QCall::AssemblyHandle assembly, UINT8 **blobRef, INT32 *lengthRef);
- static void QCALLTYPE TraceResolvingHandlerInvoked(LPCWSTR assemblyName, LPCWSTR handlerName, LPCWSTR alcName, LPCWSTR resultAssemblyName, LPCWSTR resultAssemblyPath);
- static void QCALLTYPE TraceAssemblyResolveHandlerInvoked(LPCWSTR assemblyName, LPCWSTR handlerName, LPCWSTR resultAssemblyName, LPCWSTR resultAssemblyPath);
- static void QCALLTYPE TraceAssemblyLoadFromResolveHandlerInvoked(LPCWSTR assemblyName, bool isTrackedAssembly, LPCWSTR requestingAssemblyPath, LPCWSTR requestedAssemblyPath);
- static void QCALLTYPE TraceSatelliteSubdirectoryPathProbed(LPCWSTR filePath, HRESULT hr);
+extern "C" INT_PTR QCALLTYPE AssemblyNative_GetLoadContextForAssembly(QCall::AssemblyHandle pAssembly);
- static void QCALLTYPE ApplyUpdate(QCall::AssemblyHandle assembly, UINT8* metadataDelta, INT32 metadataDeltaLength, UINT8* ilDelta, INT32 ilDeltaLength, UINT8* pdbDelta, INT32 pdbDeltaLength);
- static BOOL QCALLTYPE IsApplyUpdateSupported();
-};
+
+extern "C" BOOL QCALLTYPE AssemblyNative_InternalTryGetRawMetadata(QCall::AssemblyHandle assembly, UINT8 **blobRef, INT32 *lengthRef);
+
+extern "C" void QCALLTYPE AssemblyNative_TraceResolvingHandlerInvoked(LPCWSTR assemblyName, LPCWSTR handlerName, LPCWSTR alcName, LPCWSTR resultAssemblyName, LPCWSTR resultAssemblyPath);
+
+extern "C" void QCALLTYPE AssemblyNative_TraceAssemblyResolveHandlerInvoked(LPCWSTR assemblyName, LPCWSTR handlerName, LPCWSTR resultAssemblyName, LPCWSTR resultAssemblyPath);
+
+extern "C" void QCALLTYPE AssemblyNative_TraceAssemblyLoadFromResolveHandlerInvoked(LPCWSTR assemblyName, bool isTrackedAssembly, LPCWSTR requestingAssemblyPath, LPCWSTR requestedAssemblyPath);
+
+extern "C" void QCALLTYPE AssemblyNative_TraceSatelliteSubdirectoryPathProbed(LPCWSTR filePath, HRESULT hr);
+
+
+extern "C" void QCALLTYPE AssemblyNative_ApplyUpdate(QCall::AssemblyHandle assembly, UINT8* metadataDelta, INT32 metadataDeltaLength, UINT8* ilDelta, INT32 ilDeltaLength, UINT8* pdbDelta, INT32 pdbDeltaLength);
+
+extern "C" BOOL QCALLTYPE AssemblyNative_IsApplyUpdateSupported();
#endif
diff --git a/src/coreclr/vm/binder.cpp b/src/coreclr/vm/binder.cpp
index 338547a1a1380a..4d0ab1c2678fa5 100644
--- a/src/coreclr/vm/binder.cpp
+++ b/src/coreclr/vm/binder.cpp
@@ -8,6 +8,7 @@
#include "binder.h"
#include "ecall.h"
+#include "qcall.h"
#include "field.h"
#include "excep.h"
@@ -1030,19 +1031,25 @@ void CoreLibBinder::CheckExtended()
else
if (pMD->IsNDirect())
{
- NDirect::PopulateNDirectMethodDesc((NDirectMethodDesc *)pMD);
+ NDirectMethodDesc* pNMD = (NDirectMethodDesc*)pMD;
+ NDirect::PopulateNDirectMethodDesc(pNMD);
- if (pMD->IsQCall())
+ if (pNMD->IsQCall() && QCallResolveDllImport(pNMD->GetEntrypointName()) == nullptr)
{
- id = ((NDirectMethodDesc *)pMD)->GetECallID();
- if (id == 0) {
- id = ECall::GetIDForMethod(pMD);
+ LPCUTF8 pszClassName;
+ LPCUTF8 pszNameSpace;
+ if (FAILED(pInternalImport->GetNameOfTypeDef(tdClass, &pszClassName, &pszNameSpace)))
+ {
+ pszClassName = pszNameSpace = "Invalid TypeDef record";
}
+ LPCUTF8 pszName;
+ if (FAILED(pInternalImport->GetNameOfMethodDef(td, &pszName)))
+ {
+ pszName = "Invalid method name";
+ }
+ printf("CheckExtended: Unable to find qcall implementation: %s.%s::%s (EntryPoint name: %s)\n", pszNameSpace, pszClassName, pszName, pNMD->GetEntrypointName());
}
- else
- {
- continue;
- }
+ continue;
}
else
{
diff --git a/src/coreclr/vm/clrconfignative.cpp b/src/coreclr/vm/clrconfignative.cpp
index 87238ae6856fb3..7868f80014236c 100644
--- a/src/coreclr/vm/clrconfignative.cpp
+++ b/src/coreclr/vm/clrconfignative.cpp
@@ -8,7 +8,7 @@
#include "clrconfignative.h"
#include
-BOOL QCALLTYPE ClrConfigNative::GetConfigBoolValue(LPCWSTR name, BOOL *exist)
+extern "C" BOOL QCALLTYPE ClrConfig_GetConfigBoolValue(LPCWSTR name, BOOL *exist)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/clrconfignative.h b/src/coreclr/vm/clrconfignative.h
index 161fac6ad4f38d..c2c0009442e2ed 100644
--- a/src/coreclr/vm/clrconfignative.h
+++ b/src/coreclr/vm/clrconfignative.h
@@ -4,10 +4,5 @@
#ifndef _CLRCONFIGNATIVE_H_
#define _CLRCONFIGNATIVE_H_
-class ClrConfigNative
-{
-public:
- static BOOL QCALLTYPE GetConfigBoolValue(LPCWSTR name, BOOL *exist);
-};
-
+extern "C" BOOL QCALLTYPE ClrConfig_GetConfigBoolValue(LPCWSTR name, BOOL *exist);
#endif // _CLRCONFIGNATIVE_H_
diff --git a/src/coreclr/vm/comdynamic.cpp b/src/coreclr/vm/comdynamic.cpp
index 166793c40bfdb9..4996b53e2e48c8 100644
--- a/src/coreclr/vm/comdynamic.cpp
+++ b/src/coreclr/vm/comdynamic.cpp
@@ -37,7 +37,7 @@ struct ExceptionInstance {
// Defining a type into metadata of this dynamic module
//
//*************************************************************
-INT32 QCALLTYPE COMDynamicWrite::DefineGenericParam(QCall::ModuleHandle pModule,
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineGenericParam(QCall::ModuleHandle pModule,
LPCWSTR wszFullName,
INT32 tkParent,
INT32 attributes,
@@ -61,7 +61,7 @@ INT32 QCALLTYPE COMDynamicWrite::DefineGenericParam(QCall::ModuleHandle pModule,
return (INT32)classE;
}
-INT32 QCALLTYPE COMDynamicWrite::DefineType(QCall::ModuleHandle pModule,
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineType(QCall::ModuleHandle pModule,
LPCWSTR wszFullName,
INT32 tkParent,
INT32 attributes,
@@ -70,6 +70,26 @@ INT32 QCALLTYPE COMDynamicWrite::DefineType(QCall::ModuleHandle pModule,
{
QCALL_CONTRACT;
+ int classE = mdTokenNil;
+
+ BEGIN_QCALL;
+
+ classE = COMDynamicWrite::DefineType(pModule, wszFullName, tkParent, attributes, tkEnclosingType, pInterfaceTokens);
+
+ END_QCALL;
+
+ return (INT32)classE;
+}
+
+INT32 COMDynamicWrite::DefineType(Module* pModule,
+ LPCWSTR wszFullName,
+ INT32 tkParent,
+ INT32 attributes,
+ INT32 tkEnclosingType,
+ INT32 * pInterfaceTokens)
+{
+ QCALL_CONTRACT;
+
mdTypeDef classE = mdTokenNil;
BEGIN_QCALL;
@@ -121,7 +141,7 @@ INT32 QCALLTYPE COMDynamicWrite::DefineType(QCall::ModuleHandle pModule,
}
// This function will reset the parent class in metadata
-void QCALLTYPE COMDynamicWrite::SetParentType(QCall::ModuleHandle pModule, INT32 tdType, INT32 tkParent)
+extern "C" void QCALLTYPE TypeBuilder_SetParentType(QCall::ModuleHandle pModule, INT32 tdType, INT32 tkParent)
{
QCALL_CONTRACT;
@@ -136,7 +156,7 @@ void QCALLTYPE COMDynamicWrite::SetParentType(QCall::ModuleHandle pModule, INT32
}
// This function will add another interface impl
-void QCALLTYPE COMDynamicWrite::AddInterfaceImpl(QCall::ModuleHandle pModule, INT32 tdType, INT32 tkInterface)
+extern "C" void QCALLTYPE TypeBuilder_AddInterfaceImpl(QCall::ModuleHandle pModule, INT32 tdType, INT32 tkInterface)
{
QCALL_CONTRACT;
@@ -151,7 +171,7 @@ void QCALLTYPE COMDynamicWrite::AddInterfaceImpl(QCall::ModuleHandle pModule, IN
}
// This function will create a method within the class
-INT32 QCALLTYPE COMDynamicWrite::DefineMethodSpec(QCall::ModuleHandle pModule, INT32 tkParent, LPCBYTE pSignature, INT32 sigLength)
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineMethodSpec(QCall::ModuleHandle pModule, INT32 tkParent, LPCBYTE pSignature, INT32 sigLength)
{
QCALL_CONTRACT;
@@ -173,7 +193,7 @@ INT32 QCALLTYPE COMDynamicWrite::DefineMethodSpec(QCall::ModuleHandle pModule, I
return (INT32) memberE;
}
-INT32 QCALLTYPE COMDynamicWrite::DefineMethod(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, LPCBYTE pSignature, INT32 sigLength, INT32 attributes)
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineMethod(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, LPCBYTE pSignature, INT32 sigLength, INT32 attributes)
{
QCALL_CONTRACT;
@@ -205,7 +225,7 @@ INT32 QCALLTYPE COMDynamicWrite::DefineMethod(QCall::ModuleHandle pModule, INT32
**Arguments:
**Exceptions:
==============================================================================*/
-mdFieldDef QCALLTYPE COMDynamicWrite::DefineField(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, LPCBYTE pSignature, INT32 sigLength, INT32 attr)
+extern "C" mdFieldDef QCALLTYPE TypeBuilder_DefineField(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, LPCBYTE pSignature, INT32 sigLength, INT32 attr)
{
QCALL_CONTRACT;
@@ -279,7 +299,7 @@ UINT32 ExceptionHandlingSize(unsigned uNumExceptions, COR_ILMETHOD_SECT_EH_CLAUS
// SetMethodIL -- This function will create a method within the class
-void QCALLTYPE COMDynamicWrite::SetMethodIL(QCall::ModuleHandle pModule,
+extern "C" void QCALLTYPE TypeBuilder_SetMethodIL(QCall::ModuleHandle pModule,
INT32 tk,
BOOL fIsInitLocal,
LPCBYTE pBody,
@@ -453,14 +473,21 @@ void QCALLTYPE COMDynamicWrite::SetMethodIL(QCall::ModuleHandle pModule,
END_QCALL;
}
-void QCALLTYPE COMDynamicWrite::TermCreateClass(QCall::ModuleHandle pModule, INT32 tk, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE TypeBuilder_TermCreateClass(QCall::ModuleHandle pModule, INT32 tk, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
- TypeHandle typeHnd;
-
BEGIN_QCALL;
+ COMDynamicWrite::TermCreateClass(pModule, tk, retType);
+
+ END_QCALL;
+}
+
+void COMDynamicWrite::TermCreateClass(Module* pModule, INT32 tk, QCall::ObjectHandleOnStack retType)
+{
+ TypeHandle typeHnd;
+
_ASSERTE(pModule->GetReflectionModule()->GetClassWriter());
// Use the same service, regardless of whether we are generating a normal
@@ -480,10 +507,6 @@ void QCALLTYPE COMDynamicWrite::TermCreateClass(QCall::ModuleHandle pModule, INT
GCX_COOP();
retType.Set(typeHnd.GetManagedClassObject());
}
-
- END_QCALL;
-
- return;
}
/*============================SetPInvokeData============================
@@ -492,7 +515,7 @@ void QCALLTYPE COMDynamicWrite::TermCreateClass(QCall::ModuleHandle pModule, INT
**Arguments:
**Exceptions:
==============================================================================*/
-void QCALLTYPE COMDynamicWrite::SetPInvokeData(QCall::ModuleHandle pModule, LPCWSTR wszDllName, LPCWSTR wszFunctionName, INT32 token, INT32 linkFlags)
+extern "C" void QCALLTYPE TypeBuilder_SetPInvokeData(QCall::ModuleHandle pModule, LPCWSTR wszDllName, LPCWSTR wszFunctionName, INT32 token, INT32 linkFlags)
{
QCALL_CONTRACT;
@@ -521,7 +544,7 @@ void QCALLTYPE COMDynamicWrite::SetPInvokeData(QCall::ModuleHandle pModule, LPCW
**Arguments:
**Exceptions:
==============================================================================*/
-INT32 QCALLTYPE COMDynamicWrite::DefineProperty(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, INT32 attr, LPCBYTE pSignature, INT32 sigLength)
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineProperty(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, INT32 attr, LPCBYTE pSignature, INT32 sigLength)
{
QCALL_CONTRACT;
@@ -558,7 +581,7 @@ INT32 QCALLTYPE COMDynamicWrite::DefineProperty(QCall::ModuleHandle pModule, INT
**Arguments:
**Exceptions:
==============================================================================*/
-INT32 QCALLTYPE COMDynamicWrite::DefineEvent(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, INT32 attr, INT32 tkEventType)
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineEvent(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, INT32 attr, INT32 tkEventType)
{
QCALL_CONTRACT;
@@ -588,7 +611,7 @@ INT32 QCALLTYPE COMDynamicWrite::DefineEvent(QCall::ModuleHandle pModule, INT32
**Arguments:
**Exceptions:
==============================================================================*/
-void QCALLTYPE COMDynamicWrite::DefineMethodSemantics(QCall::ModuleHandle pModule, INT32 tkAssociation, INT32 attr, INT32 tkMethod)
+extern "C" void QCALLTYPE TypeBuilder_DefineMethodSemantics(QCall::ModuleHandle pModule, INT32 tkAssociation, INT32 attr, INT32 tkMethod)
{
QCALL_CONTRACT;
@@ -609,7 +632,7 @@ void QCALLTYPE COMDynamicWrite::DefineMethodSemantics(QCall::ModuleHandle pModul
/*============================SetMethodImpl============================
** To set a Method's Implementation flags
==============================================================================*/
-void QCALLTYPE COMDynamicWrite::SetMethodImpl(QCall::ModuleHandle pModule, INT32 tkMethod, INT32 attr)
+extern "C" void QCALLTYPE TypeBuilder_SetMethodImpl(QCall::ModuleHandle pModule, INT32 tkMethod, INT32 attr)
{
QCALL_CONTRACT;
@@ -629,7 +652,7 @@ void QCALLTYPE COMDynamicWrite::SetMethodImpl(QCall::ModuleHandle pModule, INT32
/*============================DefineMethodImpl============================
** Define a MethodImpl record
==============================================================================*/
-void QCALLTYPE COMDynamicWrite::DefineMethodImpl(QCall::ModuleHandle pModule, UINT32 tkType, UINT32 tkBody, UINT32 tkDecl)
+extern "C" void QCALLTYPE TypeBuilder_DefineMethodImpl(QCall::ModuleHandle pModule, UINT32 tkType, UINT32 tkBody, UINT32 tkDecl)
{
QCALL_CONTRACT;
@@ -653,7 +676,7 @@ void QCALLTYPE COMDynamicWrite::DefineMethodImpl(QCall::ModuleHandle pModule, UI
**Arguments:
**Exceptions:
==============================================================================*/
-INT32 QCALLTYPE COMDynamicWrite::GetTokenFromSig(QCall::ModuleHandle pModule, LPCBYTE pSignature, INT32 sigLength)
+extern "C" INT32 QCALLTYPE TypeBuilder_GetTokenFromSig(QCall::ModuleHandle pModule, LPCBYTE pSignature, INT32 sigLength)
{
QCALL_CONTRACT;
@@ -683,7 +706,7 @@ INT32 QCALLTYPE COMDynamicWrite::GetTokenFromSig(QCall::ModuleHandle pModule, LP
**Arguments:
**Exceptions:
==============================================================================*/
-INT32 QCALLTYPE COMDynamicWrite::SetParamInfo(QCall::ModuleHandle pModule, UINT32 tkMethod, UINT32 iSequence, UINT32 iAttributes, LPCWSTR wszParamName)
+extern "C" INT32 QCALLTYPE TypeBuilder_SetParamInfo(QCall::ModuleHandle pModule, UINT32 tkMethod, UINT32 iSequence, UINT32 iAttributes, LPCWSTR wszParamName)
{
QCALL_CONTRACT;
@@ -717,7 +740,7 @@ INT32 QCALLTYPE COMDynamicWrite::SetParamInfo(QCall::ModuleHandle pModule, UINT3
**Arguments:
**Exceptions:
==============================================================================*/
-void QCALLTYPE COMDynamicWrite::SetConstantValue(QCall::ModuleHandle pModule, UINT32 tk, DWORD valueCorType, LPVOID pValue)
+extern "C" void QCALLTYPE TypeBuilder_SetConstantValue(QCall::ModuleHandle pModule, UINT32 tk, DWORD valueCorType, LPVOID pValue)
{
QCALL_CONTRACT;
@@ -773,7 +796,7 @@ void QCALLTYPE COMDynamicWrite::SetConstantValue(QCall::ModuleHandle pModule, UI
**Arguments:
**Exceptions:
==============================================================================*/
-void QCALLTYPE COMDynamicWrite::SetFieldLayoutOffset(QCall::ModuleHandle pModule, INT32 tkField, INT32 iOffset)
+extern "C" void QCALLTYPE TypeBuilder_SetFieldLayoutOffset(QCall::ModuleHandle pModule, INT32 tkField, INT32 iOffset)
{
QCALL_CONTRACT;
@@ -797,7 +820,7 @@ void QCALLTYPE COMDynamicWrite::SetFieldLayoutOffset(QCall::ModuleHandle pModule
**Arguments:
**Exceptions:
==============================================================================*/
-void QCALLTYPE COMDynamicWrite::SetClassLayout(QCall::ModuleHandle pModule, INT32 tk, INT32 iPackSize, UINT32 iTotalSize)
+extern "C" void QCALLTYPE TypeBuilder_SetClassLayout(QCall::ModuleHandle pModule, INT32 tk, INT32 iPackSize, UINT32 iTotalSize)
{
QCALL_CONTRACT;
@@ -894,7 +917,7 @@ void UpdateRuntimeStateForAssemblyCustomAttribute(Module* pModule, mdToken tkCus
}
}
-void QCALLTYPE COMDynamicWrite::DefineCustomAttribute(QCall::ModuleHandle pModule, INT32 token, INT32 conTok, LPCBYTE pBlob, INT32 cbBlob)
+extern "C" void QCALLTYPE TypeBuilder_DefineCustomAttribute(QCall::ModuleHandle pModule, INT32 token, INT32 conTok, LPCBYTE pBlob, INT32 cbBlob)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/comdynamic.h b/src/coreclr/vm/comdynamic.h
index 1ced3f98de3e20..d279aef52faf1b 100644
--- a/src/coreclr/vm/comdynamic.h
+++ b/src/coreclr/vm/comdynamic.h
@@ -20,108 +20,118 @@ typedef enum PEFileKinds {
struct ExceptionInstance;
// COMDynamicWrite
-// This class defines all the methods that implement the dynamic IL creation process
+// These methods implement the dynamic IL creation process
// inside reflection.
+// This class exists as a container for methods that need friend access to other types.
class COMDynamicWrite
{
-public:
- // This function will create the class's metadata definition
- static
- INT32 QCALLTYPE DefineType(QCall::ModuleHandle pModule,
- LPCWSTR wszFullName,
- INT32 tkParent,
- INT32 attributes,
- INT32 tkEnclosingType,
- INT32 * pInterfaceTokens);
-
- static
- INT32 QCALLTYPE DefineGenericParam(QCall::ModuleHandle pModule,
- LPCWSTR wszFullName,
- INT32 tkParent,
- INT32 attributes,
- INT32 position,
- INT32 * pConstraintTokens);
-
- // This function will reset the parent class in metadata
- static
- void QCALLTYPE SetParentType(QCall::ModuleHandle pModule, INT32 tdType, INT32 tkParent);
-
- // This function will add another interface impl
- static
- void QCALLTYPE AddInterfaceImpl(QCall::ModuleHandle pModule, INT32 tdType, INT32 tkInterface);
-
- // This function will create a method within the class
- static
- INT32 QCALLTYPE DefineMethod(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, LPCBYTE pSignature, INT32 sigLength, INT32 attributes);
-
- static
- INT32 QCALLTYPE DefineMethodSpec(QCall::ModuleHandle pModule, INT32 tkParent, LPCBYTE pSignature, INT32 sigLength);
-
- // This function will create a method within the class
- static
- void QCALLTYPE SetMethodIL(QCall::ModuleHandle pModule,
- INT32 tk,
- BOOL fIsInitLocal,
- LPCBYTE pBody,
- INT32 cbBody,
- LPCBYTE pLocalSig,
- INT32 sigLength,
- UINT16 maxStackSize,
- ExceptionInstance * pExceptions,
- INT32 numExceptions,
- INT32 * pTokenFixups,
- INT32 numTokenFixups);
-
- static
- void QCALLTYPE TermCreateClass(QCall::ModuleHandle pModule, INT32 tk, QCall::ObjectHandleOnStack retType);
-
- static
- mdFieldDef QCALLTYPE DefineField(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, LPCBYTE pSignature, INT32 sigLength, INT32 attr);
-
- static
- void QCALLTYPE SetPInvokeData(QCall::ModuleHandle pModule, LPCWSTR wszDllName, LPCWSTR wszFunctionName, INT32 token, INT32 linkFlags);
-
- static
- INT32 QCALLTYPE DefineProperty(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, INT32 attr, LPCBYTE pSignature, INT32 sigLength);
-
- static
- INT32 QCALLTYPE DefineEvent(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, INT32 attr, INT32 tkEventType);
-
- // functions to set Setter, Getter, Reset, TestDefault, and other methods
- static
- void QCALLTYPE DefineMethodSemantics(QCall::ModuleHandle pModule, INT32 tkAssociation, INT32 attr, INT32 tkMethod);
-
- // functions to set method's implementation flag
- static
- void QCALLTYPE SetMethodImpl(QCall::ModuleHandle pModule, INT32 tkMethod, INT32 attr);
-
- // functions to create MethodImpl record
- static
- void QCALLTYPE DefineMethodImpl(QCall::ModuleHandle pModule, UINT32 tkType, UINT32 tkBody, UINT32 tkDecl);
-
- // GetTokenFromSig's argument
- static
- INT32 QCALLTYPE GetTokenFromSig(QCall::ModuleHandle pModule, LPCBYTE pSignature, INT32 sigLength);
-
- // Set Field offset
- static
- void QCALLTYPE SetFieldLayoutOffset(QCall::ModuleHandle pModule, INT32 tkField, INT32 iOffset);
-
- // Set classlayout info
- static
- void QCALLTYPE SetClassLayout(QCall::ModuleHandle pModule, INT32 tk, INT32 iPackSize, UINT32 iTotalSize);
-
- // Set a custom attribute
- static
- void QCALLTYPE DefineCustomAttribute(QCall::ModuleHandle pModule, INT32 token, INT32 conTok, LPCBYTE pBlob, INT32 cbBlob);
-
- // functions to set ParamInfo
- static
- INT32 QCALLTYPE SetParamInfo(QCall::ModuleHandle pModule, UINT32 tkMethod, UINT32 iSequence, UINT32 iAttributes, LPCWSTR wszParamName);
-
- // functions to set default value
- static
- void QCALLTYPE SetConstantValue(QCall::ModuleHandle pModule, UINT32 tk, DWORD valueType, LPVOID pValue);
+ public:
+ static INT32 DefineType(Module* pModule,
+ LPCWSTR wszFullName,
+ INT32 tkParent,
+ INT32 attributes,
+ INT32 tkEnclosingType,
+ INT32 * pInterfaceTokens);
+ static void TermCreateClass(Module* pModule, INT32 tk, QCall::ObjectHandleOnStack retType);
};
+
+// This function will create the class's metadata definition
+
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineType(QCall::ModuleHandle pModule,
+ LPCWSTR wszFullName,
+ INT32 tkParent,
+ INT32 attributes,
+ INT32 tkEnclosingType,
+ INT32 * pInterfaceTokens);
+
+
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineGenericParam(QCall::ModuleHandle pModule,
+ LPCWSTR wszFullName,
+ INT32 tkParent,
+ INT32 attributes,
+ INT32 position,
+ INT32 * pConstraintTokens);
+
+// This function will reset the parent class in metadata
+
+extern "C" void QCALLTYPE TypeBuilder_SetParentType(QCall::ModuleHandle pModule, INT32 tdType, INT32 tkParent);
+
+// This function will add another interface impl
+
+extern "C" void QCALLTYPE TypeBuilder_AddInterfaceImpl(QCall::ModuleHandle pModule, INT32 tdType, INT32 tkInterface);
+
+// This function will create a method within the class
+
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineMethod(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, LPCBYTE pSignature, INT32 sigLength, INT32 attributes);
+
+
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineMethodSpec(QCall::ModuleHandle pModule, INT32 tkParent, LPCBYTE pSignature, INT32 sigLength);
+
+// This function will create a method within the class
+
+extern "C" void QCALLTYPE TypeBuilder_SetMethodIL(QCall::ModuleHandle pModule,
+ INT32 tk,
+ BOOL fIsInitLocal,
+ LPCBYTE pBody,
+ INT32 cbBody,
+ LPCBYTE pLocalSig,
+ INT32 sigLength,
+ UINT16 maxStackSize,
+ ExceptionInstance * pExceptions,
+ INT32 numExceptions,
+ INT32 * pTokenFixups,
+ INT32 numTokenFixups);
+
+
+extern "C" void QCALLTYPE TypeBuilder_TermCreateClass(QCall::ModuleHandle pModule, INT32 tk, QCall::ObjectHandleOnStack retType);
+
+
+extern "C" mdFieldDef QCALLTYPE TypeBuilder_DefineField(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, LPCBYTE pSignature, INT32 sigLength, INT32 attr);
+
+
+extern "C" void QCALLTYPE TypeBuilder_SetPInvokeData(QCall::ModuleHandle pModule, LPCWSTR wszDllName, LPCWSTR wszFunctionName, INT32 token, INT32 linkFlags);
+
+
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineProperty(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, INT32 attr, LPCBYTE pSignature, INT32 sigLength);
+
+
+extern "C" INT32 QCALLTYPE TypeBuilder_DefineEvent(QCall::ModuleHandle pModule, INT32 tkParent, LPCWSTR wszName, INT32 attr, INT32 tkEventType);
+
+// functions to set Setter, Getter, Reset, TestDefault, and other methods
+
+extern "C" void QCALLTYPE TypeBuilder_DefineMethodSemantics(QCall::ModuleHandle pModule, INT32 tkAssociation, INT32 attr, INT32 tkMethod);
+
+// functions to set method's implementation flag
+
+extern "C" void QCALLTYPE TypeBuilder_SetMethodImpl(QCall::ModuleHandle pModule, INT32 tkMethod, INT32 attr);
+
+// functions to create MethodImpl record
+
+extern "C" void QCALLTYPE TypeBuilder_DefineMethodImpl(QCall::ModuleHandle pModule, UINT32 tkType, UINT32 tkBody, UINT32 tkDecl);
+
+// GetTokenFromSig's argument
+
+extern "C" INT32 QCALLTYPE TypeBuilder_GetTokenFromSig(QCall::ModuleHandle pModule, LPCBYTE pSignature, INT32 sigLength);
+
+// Set Field offset
+
+extern "C" void QCALLTYPE TypeBuilder_SetFieldLayoutOffset(QCall::ModuleHandle pModule, INT32 tkField, INT32 iOffset);
+
+// Set classlayout info
+
+extern "C" void QCALLTYPE TypeBuilder_SetClassLayout(QCall::ModuleHandle pModule, INT32 tk, INT32 iPackSize, UINT32 iTotalSize);
+
+// Set a custom attribute
+
+extern "C" void QCALLTYPE TypeBuilder_DefineCustomAttribute(QCall::ModuleHandle pModule, INT32 token, INT32 conTok, LPCBYTE pBlob, INT32 cbBlob);
+
+// functions to set ParamInfo
+
+extern "C" INT32 QCALLTYPE TypeBuilder_SetParamInfo(QCall::ModuleHandle pModule, UINT32 tkMethod, UINT32 iSequence, UINT32 iAttributes, LPCWSTR wszParamName);
+
+// functions to set default value
+
+extern "C" void QCALLTYPE TypeBuilder_SetConstantValue(QCall::ModuleHandle pModule, UINT32 tk, DWORD valueType, LPVOID pValue);
+
#endif // _COMDYNAMIC_H_
diff --git a/src/coreclr/vm/commodule.cpp b/src/coreclr/vm/commodule.cpp
index c00a08336a7c22..f19482c2a59f38 100644
--- a/src/coreclr/vm/commodule.cpp
+++ b/src/coreclr/vm/commodule.cpp
@@ -21,7 +21,7 @@
// wszFullName is escaped (TYPE_NAME_RESERVED_CHAR). It should not be byref or contain enclosing type name,
// assembly name, and generic argument list.
//**************************************************
-mdTypeRef QCALLTYPE COMModule::GetTypeRef(QCall::ModuleHandle pModule,
+extern "C" mdTypeRef QCALLTYPE ModuleBuilder_GetTypeRef(QCall::ModuleHandle pModule,
LPCWSTR wszFullName,
QCall::ModuleHandle pRefedModule,
LPCWSTR wszRefedModuleFileName,
@@ -135,7 +135,7 @@ mdTypeRef QCALLTYPE COMModule::GetTypeRef(QCall::ModuleHandle pModule,
** int tkTypeSpec
**Exceptions:
==============================================================================*/
-INT32 QCALLTYPE COMModule::GetArrayMethodToken(QCall::ModuleHandle pModule,
+extern "C" INT32 QCALLTYPE ModuleBuilder_GetArrayMethodToken(QCall::ModuleHandle pModule,
INT32 tkTypeSpec,
LPCWSTR wszMethodName,
LPCBYTE pSignature,
@@ -167,6 +167,46 @@ INT32 QCALLTYPE COMModule::GetArrayMethodToken(QCall::ModuleHandle pModule,
return (INT32)memberRefE;
}
+namespace
+{
+ //******************************************************************************
+ //
+ // Return a TypeRef token given a TypeDef token from the same emit scope
+ //
+ //******************************************************************************
+ void DefineTypeRefHelper(
+ IMetaDataEmit *pEmit, // given emit scope
+ mdTypeDef td, // given typedef in the emit scope
+ mdTypeRef *ptr) // return typeref
+ {
+ CONTRACTL {
+ STANDARD_VM_CHECK;
+
+ PRECONDITION(CheckPointer(pEmit));
+ PRECONDITION(CheckPointer(ptr));
+ }
+ CONTRACTL_END;
+
+ CQuickBytes qb;
+ WCHAR* szTypeDef = (WCHAR*) qb.AllocThrows((MAX_CLASSNAME_LENGTH+1) * sizeof(WCHAR));
+ mdToken rs; // resolution scope
+ DWORD dwFlags;
+
+ SafeComHolder pImport;
+ IfFailThrow( pEmit->QueryInterface(IID_IMetaDataImport, (void **)&pImport) );
+ IfFailThrow( pImport->GetTypeDefProps(td, szTypeDef, MAX_CLASSNAME_LENGTH, NULL, &dwFlags, NULL) );
+ if ( IsTdNested(dwFlags) )
+ {
+ mdToken tdNested;
+ IfFailThrow( pImport->GetNestedClassProps(td, &tdNested) );
+ DefineTypeRefHelper( pEmit, tdNested, &rs);
+ }
+ else
+ rs = TokenFromRid( 1, mdtModule );
+
+ IfFailThrow( pEmit->DefineTypeRefByName( rs, szTypeDef, ptr) );
+ } // DefineTypeRefHelper
+}
//******************************************************************************
//
@@ -174,7 +214,7 @@ INT32 QCALLTYPE COMModule::GetArrayMethodToken(QCall::ModuleHandle pModule,
// This function will return a MemberRef token given a MethodDef token and the module where the MethodDef/FieldDef is defined.
//
//******************************************************************************
-INT32 QCALLTYPE COMModule::GetMemberRef(QCall::ModuleHandle pModule, QCall::ModuleHandle pRefedModule, INT32 tr, INT32 token)
+extern "C" INT32 QCALLTYPE ModuleBuilder_GetMemberRef(QCall::ModuleHandle pModule, QCall::ModuleHandle pRefedModule, INT32 tr, INT32 token)
{
QCALL_CONTRACT;
@@ -250,52 +290,12 @@ INT32 QCALLTYPE COMModule::GetMemberRef(QCall::ModuleHandle pModule, QCall::Modu
return (INT32)memberRefE;
}
-
-//******************************************************************************
-//
-// Return a TypeRef token given a TypeDef token from the same emit scope
-//
-//******************************************************************************
-void COMModule::DefineTypeRefHelper(
- IMetaDataEmit *pEmit, // given emit scope
- mdTypeDef td, // given typedef in the emit scope
- mdTypeRef *ptr) // return typeref
-{
- CONTRACTL {
- STANDARD_VM_CHECK;
-
- PRECONDITION(CheckPointer(pEmit));
- PRECONDITION(CheckPointer(ptr));
- }
- CONTRACTL_END;
-
- CQuickBytes qb;
- WCHAR* szTypeDef = (WCHAR*) qb.AllocThrows((MAX_CLASSNAME_LENGTH+1) * sizeof(WCHAR));
- mdToken rs; // resolution scope
- DWORD dwFlags;
-
- SafeComHolder pImport;
- IfFailThrow( pEmit->QueryInterface(IID_IMetaDataImport, (void **)&pImport) );
- IfFailThrow( pImport->GetTypeDefProps(td, szTypeDef, MAX_CLASSNAME_LENGTH, NULL, &dwFlags, NULL) );
- if ( IsTdNested(dwFlags) )
- {
- mdToken tdNested;
- IfFailThrow( pImport->GetNestedClassProps(td, &tdNested) );
- DefineTypeRefHelper( pEmit, tdNested, &rs);
- }
- else
- rs = TokenFromRid( 1, mdtModule );
-
- IfFailThrow( pEmit->DefineTypeRefByName( rs, szTypeDef, ptr) );
-} // DefineTypeRefHelper
-
-
//******************************************************************************
//
// Return a MemberRef token given a RuntimeMethodInfo
//
//******************************************************************************
-INT32 QCALLTYPE COMModule::GetMemberRefOfMethodInfo(QCall::ModuleHandle pModule, INT32 tr, MethodDesc * pMeth)
+extern "C" INT32 QCALLTYPE ModuleBuilder_GetMemberRefOfMethodInfo(QCall::ModuleHandle pModule, INT32 tr, MethodDesc * pMeth)
{
QCALL_CONTRACT;
@@ -376,7 +376,7 @@ INT32 QCALLTYPE COMModule::GetMemberRefOfMethodInfo(QCall::ModuleHandle pModule,
// Return a MemberRef token given a RuntimeFieldInfo
//
//******************************************************************************
-mdMemberRef QCALLTYPE COMModule::GetMemberRefOfFieldInfo(QCall::ModuleHandle pModule, mdTypeDef tr, QCall::TypeHandle th, mdFieldDef tkField)
+extern "C" mdMemberRef QCALLTYPE ModuleBuilder_GetMemberRefOfFieldInfo(QCall::ModuleHandle pModule, mdTypeDef tr, QCall::TypeHandle th, mdFieldDef tkField)
{
QCALL_CONTRACT;
@@ -450,7 +450,7 @@ mdMemberRef QCALLTYPE COMModule::GetMemberRefOfFieldInfo(QCall::ModuleHandle pMo
// Return a MemberRef token given a Signature
//
//******************************************************************************
-INT32 QCALLTYPE COMModule::GetMemberRefFromSignature(QCall::ModuleHandle pModule,
+extern "C" INT32 QCALLTYPE ModuleBuilder_GetMemberRefFromSignature(QCall::ModuleHandle pModule,
INT32 tr,
LPCWSTR wszMemberName,
LPCBYTE pSignature,
@@ -482,7 +482,7 @@ INT32 QCALLTYPE COMModule::GetMemberRefFromSignature(QCall::ModuleHandle pModule
// This function is used to set the FieldRVA with the content data
//
//******************************************************************************
-void QCALLTYPE COMModule::SetFieldRVAContent(QCall::ModuleHandle pModule, INT32 tkField, LPCBYTE pContent, INT32 length)
+extern "C" void QCALLTYPE ModuleBuilder_SetFieldRVAContent(QCall::ModuleHandle pModule, INT32 tkField, LPCBYTE pContent, INT32 length)
{
QCALL_CONTRACT;
@@ -532,7 +532,7 @@ void QCALLTYPE COMModule::SetFieldRVAContent(QCall::ModuleHandle pModule, INT32
// string constant or return the token of an existing constant.
//
//******************************************************************************
-mdString QCALLTYPE COMModule::GetStringConstant(QCall::ModuleHandle pModule, LPCWSTR pwzValue, INT32 iLength)
+extern "C" mdString QCALLTYPE ModuleBuilder_GetStringConstant(QCall::ModuleHandle pModule, LPCWSTR pwzValue, INT32 iLength)
{
QCALL_CONTRACT;
@@ -559,7 +559,7 @@ mdString QCALLTYPE COMModule::GetStringConstant(QCall::ModuleHandle pModule, LPC
/*=============================SetModuleName====================================
// SetModuleName
==============================================================================*/
-void QCALLTYPE COMModule::SetModuleName(QCall::ModuleHandle pModule, LPCWSTR wszModuleName)
+extern "C" void QCALLTYPE ModuleBuilder_SetModuleName(QCall::ModuleHandle pModule, LPCWSTR wszModuleName)
{
QCALL_CONTRACT;
@@ -578,7 +578,7 @@ void QCALLTYPE COMModule::SetModuleName(QCall::ModuleHandle pModule, LPCWSTR wsz
// Return a type spec token given a byte array
//
//******************************************************************************
-mdTypeSpec QCALLTYPE COMModule::GetTokenFromTypeSpec(QCall::ModuleHandle pModule, LPCBYTE pSignature, INT32 sigLength)
+extern "C" mdTypeSpec QCALLTYPE ModuleBuilder_GetTokenFromTypeSpec(QCall::ModuleHandle pModule, LPCBYTE pSignature, INT32 sigLength)
{
QCALL_CONTRACT;
@@ -600,7 +600,7 @@ mdTypeSpec QCALLTYPE COMModule::GetTokenFromTypeSpec(QCall::ModuleHandle pModule
// GetType
// Given a class name, this method will look for that class
// with in the module.
-void QCALLTYPE COMModule::GetType(QCall::ModuleHandle pModule, LPCWSTR wszName, BOOL bThrowOnError, BOOL bIgnoreCase, QCall::ObjectHandleOnStack retType, QCall::ObjectHandleOnStack keepAlive)
+extern "C" void QCALLTYPE RuntimeModule_GetType(QCall::ModuleHandle pModule, LPCWSTR wszName, BOOL bThrowOnError, BOOL bIgnoreCase, QCall::ObjectHandleOnStack retType, QCall::ObjectHandleOnStack keepAlive)
{
CONTRACTL
{
@@ -645,7 +645,7 @@ void QCALLTYPE COMModule::GetType(QCall::ModuleHandle pModule, LPCWSTR wszName,
// GetName
// This routine will return the name of the module as a String
-void QCALLTYPE COMModule::GetScopeName(QCall::ModuleHandle pModule, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE RuntimeModule_GetScopeName(QCall::ModuleHandle pModule, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -680,7 +680,7 @@ static void ReplaceNiExtension(SString& fileName, PCWSTR pwzOldSuffix, PCWSTR pw
**Arguments:
**Exceptions:
==============================================================================*/
-void QCALLTYPE COMModule::GetFullyQualifiedName(QCall::ModuleHandle pModule, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE RuntimeModule_GetFullyQualifiedName(QCall::ModuleHandle pModule, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -711,7 +711,7 @@ void QCALLTYPE COMModule::GetFullyQualifiedName(QCall::ModuleHandle pModule, QCa
**Arguments: refThis
**Exceptions: None.
==============================================================================*/
-HINSTANCE QCALLTYPE COMModule::GetHINSTANCE(QCall::ModuleHandle pModule)
+extern "C" HINSTANCE QCALLTYPE MarshalNative_GetHINSTANCE(QCall::ModuleHandle pModule)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/commodule.h b/src/coreclr/vm/commodule.h
index 4453214c473a59..4148043af5f0df 100644
--- a/src/coreclr/vm/commodule.h
+++ b/src/coreclr/vm/commodule.h
@@ -14,98 +14,72 @@ class Module;
class COMModule
{
public:
- // IsTransient
- // Determine if a Module is transient
- static
- BOOL QCALLTYPE IsTransient(QCall::ModuleHandle pModule);
-
- // GetTypeRef
- // This function will return the class token for the named element.
- static
- mdTypeRef QCALLTYPE GetTypeRef(QCall::ModuleHandle pModule,
- LPCWSTR wszFullName,
- QCall::ModuleHandle pRefedModule,
- LPCWSTR wszRefedModuleFileName,
- INT32 tkResolution);
-
- // SetFieldRVAContent
- // This function is used to set the FieldRVA with the content data
- static
- void QCALLTYPE SetFieldRVAContent(QCall::ModuleHandle pModule, INT32 tkField, LPCBYTE pContent, INT32 length);
-
-
- //GetArrayMethodToken
- static
- INT32 QCALLTYPE GetArrayMethodToken(QCall::ModuleHandle pModule,
- INT32 tkTypeSpec,
- LPCWSTR wszMethodName,
- LPCBYTE pSignature,
- INT32 sigLength);
-
- // GetMemberRefToken
- // This function will return the MemberRef token
- static
- INT32 QCALLTYPE GetMemberRef(QCall::ModuleHandle pModule, QCall::ModuleHandle pRefedModule, INT32 tr, INT32 token);
-
- // This function return a MemberRef token given a MethodInfo describing a array method
- static
- INT32 QCALLTYPE GetMemberRefOfMethodInfo(QCall::ModuleHandle pModule, INT32 tr, MethodDesc * method);
-
-
- // GetMemberRefOfFieldInfo
- // This function will return a memberRef token given a FieldInfo
- static
- mdMemberRef QCALLTYPE GetMemberRefOfFieldInfo(QCall::ModuleHandle pModule, mdTypeDef tr, QCall::TypeHandle th, mdFieldDef tkField);
-
- // GetMemberRefFromSignature
- // This function will return the MemberRef token given the signature from managed code
- static
- INT32 QCALLTYPE GetMemberRefFromSignature(QCall::ModuleHandle pModule,
- INT32 tr,
- LPCWSTR wszMemberName,
- LPCBYTE pSignature,
- INT32 sigLength);
-
- // GetTokenFromTypeSpec
- static
- mdTypeSpec QCALLTYPE GetTokenFromTypeSpec(QCall::ModuleHandle pModule, LPCBYTE pSignature, INT32 sigLength);
-
- // GetType
- // Given a class type, this method will look for that type
- // with in the module.
- static
- void QCALLTYPE GetType(QCall::ModuleHandle pModule, LPCWSTR wszName, BOOL bThrowOnError, BOOL bIgnoreCase, QCall::ObjectHandleOnStack retType, QCall::ObjectHandleOnStack keepAlive);
-
- // Get class will return an array contain all of the classes
- // that are defined within this Module.
+ // GetTypes will return an array containing all of the types
+ // that are defined within this Module.
static FCDECL1(Object*, GetTypes, ReflectModuleBaseObject* pModuleUNSAFE);
- // GetStringConstant
- // If this is a dynamic module, this routine will define a new
- // string constant or return the token of an existing constant.
- static
- mdString QCALLTYPE GetStringConstant(QCall::ModuleHandle pModule, LPCWSTR pwzValue, INT32 iLength);
+ static FCDECL1(Object*, GetMethods, ReflectModuleBaseObject* refThisUNSAFE);
+};
+// GetTypeRef
+// This function will return the class token for the named element.
+extern "C" mdTypeRef QCALLTYPE ModuleBuilder_GetTypeRef(QCall::ModuleHandle pModule,
+ LPCWSTR wszFullName,
+ QCall::ModuleHandle pRefedModule,
+ LPCWSTR wszRefedModuleFileName,
+ INT32 tkResolution);
- static
- void QCALLTYPE SetModuleName(QCall::ModuleHandle pModule, LPCWSTR wszModuleName);
+// SetFieldRVAContent
+// This function is used to set the FieldRVA with the content data
+extern "C" void QCALLTYPE ModuleBuilder_SetFieldRVAContent(QCall::ModuleHandle pModule, INT32 tkField, LPCBYTE pContent, INT32 length);
- static FCDECL1(Object*, GetMethods, ReflectModuleBaseObject* refThisUNSAFE);
- static
- void QCALLTYPE GetScopeName(QCall::ModuleHandle pModule, QCall::StringHandleOnStack retString);
+//GetArrayMethodToken
+extern "C" INT32 QCALLTYPE ModuleBuilder_GetArrayMethodToken(QCall::ModuleHandle pModule,
+ INT32 tkTypeSpec,
+ LPCWSTR wszMethodName,
+ LPCBYTE pSignature,
+ INT32 sigLength);
- static
- void QCALLTYPE GetFullyQualifiedName(QCall::ModuleHandle pModule, QCall::StringHandleOnStack retString);
+// GetMemberRefToken
+// This function will return the MemberRef token
+extern "C" INT32 QCALLTYPE ModuleBuilder_GetMemberRef(QCall::ModuleHandle pModule, QCall::ModuleHandle pRefedModule, INT32 tr, INT32 token);
- static
- HINSTANCE QCALLTYPE GetHINSTANCE(QCall::ModuleHandle pModule);
+// This function return a MemberRef token given a MethodInfo describing a array method
+extern "C" INT32 QCALLTYPE ModuleBuilder_GetMemberRefOfMethodInfo(QCall::ModuleHandle pModule, INT32 tr, MethodDesc * method);
- static void DefineTypeRefHelper(
- IMetaDataEmit *pEmit, // given emit scope
- mdTypeDef td, // given typedef in the emit scope
- mdTypeRef *ptr); // return typeref
-};
+// GetMemberRefOfFieldInfo
+// This function will return a memberRef token given a FieldInfo
+extern "C" mdMemberRef QCALLTYPE ModuleBuilder_GetMemberRefOfFieldInfo(QCall::ModuleHandle pModule, mdTypeDef tr, QCall::TypeHandle th, mdFieldDef tkField);
+
+// GetMemberRefFromSignature
+// This function will return the MemberRef token given the signature from managed code
+extern "C" INT32 QCALLTYPE ModuleBuilder_GetMemberRefFromSignature(QCall::ModuleHandle pModule,
+ INT32 tr,
+ LPCWSTR wszMemberName,
+ LPCBYTE pSignature,
+ INT32 sigLength);
+
+// GetTokenFromTypeSpec
+extern "C" mdTypeSpec QCALLTYPE ModuleBuilder_GetTokenFromTypeSpec(QCall::ModuleHandle pModule, LPCBYTE pSignature, INT32 sigLength);
+
+// GetType
+// Given a class type, this method will look for that type
+// with in the module.
+extern "C" void QCALLTYPE RuntimeModule_GetType(QCall::ModuleHandle pModule, LPCWSTR wszName, BOOL bThrowOnError, BOOL bIgnoreCase, QCall::ObjectHandleOnStack retType, QCall::ObjectHandleOnStack keepAlive);
+
+// GetStringConstant
+// If this is a dynamic module, this routine will define a new
+// string constant or return the token of an existing constant.
+extern "C" mdString QCALLTYPE ModuleBuilder_GetStringConstant(QCall::ModuleHandle pModule, LPCWSTR pwzValue, INT32 iLength);
+
+extern "C" void QCALLTYPE ModuleBuilder_SetModuleName(QCall::ModuleHandle pModule, LPCWSTR wszModuleName);
+
+extern "C" void QCALLTYPE RuntimeModule_GetScopeName(QCall::ModuleHandle pModule, QCall::StringHandleOnStack retString);
+
+extern "C" void QCALLTYPE RuntimeModule_GetFullyQualifiedName(QCall::ModuleHandle pModule, QCall::StringHandleOnStack retString);
+
+extern "C" HINSTANCE QCALLTYPE MarshalNative_GetHINSTANCE(QCall::ModuleHandle pModule);
#endif
diff --git a/src/coreclr/vm/comsynchronizable.cpp b/src/coreclr/vm/comsynchronizable.cpp
index 15a33c711e7a95..5cd165eeeb705d 100644
--- a/src/coreclr/vm/comsynchronizable.cpp
+++ b/src/coreclr/vm/comsynchronizable.cpp
@@ -239,13 +239,19 @@ ULONG WINAPI ThreadNative::KickOffThread(void* pass)
return 0;
}
-void QCALLTYPE ThreadNative::Start(QCall::ThreadHandle thread, int threadStackSize, int priority, PCWSTR pThreadName)
+extern "C" void QCALLTYPE ThreadNative_Start(QCall::ThreadHandle thread, int threadStackSize, int priority, PCWSTR pThreadName)
{
QCALL_CONTRACT;
BEGIN_QCALL;
- Thread * pNewThread = thread;
+ ThreadNative::Start(thread, threadStackSize, priority, pThreadName);
+
+ END_QCALL;
+}
+
+void ThreadNative::Start(Thread* pNewThread, int threadStackSize, int priority, PCWSTR pThreadName)
+{
_ASSERTE(pNewThread != NULL);
// Is the thread already started? You can't restart a thread.
@@ -318,8 +324,6 @@ void QCALLTYPE ThreadNative::Start(QCall::ThreadHandle thread, int threadStackSi
PulseAllHelper(pNewThread);
pNewThread->HandleThreadStartupFailure();
}
-
- END_QCALL;
}
// Note that you can manipulate the priority of a thread that hasn't started yet,
@@ -474,7 +478,7 @@ FCIMPLEND
#define Sleep(dwMilliseconds) Dont_Use_Sleep(dwMilliseconds)
-void QCALLTYPE ThreadNative::UninterruptibleSleep0()
+extern "C" void QCALLTYPE ThreadNative_UninterruptibleSleep0()
{
QCALL_CONTRACT;
@@ -523,7 +527,7 @@ FCIMPL0(Object*, ThreadNative::GetCurrentThread)
}
FCIMPLEND
-UINT64 QCALLTYPE ThreadNative::GetCurrentOSThreadId()
+extern "C" UINT64 QCALLTYPE ThreadNative_GetCurrentOSThreadId()
{
QCALL_CONTRACT;
@@ -991,14 +995,19 @@ FCIMPL1(void, ThreadNative::DisableComObjectEagerCleanup, ThreadBaseObject* pThi
FCIMPLEND
#endif //FEATURE_COMINTEROP
-void QCALLTYPE ThreadNative::InformThreadNameChange(QCall::ThreadHandle thread, LPCWSTR name, INT32 len)
+extern "C" void QCALLTYPE ThreadNative_InformThreadNameChange(QCall::ThreadHandle thread, LPCWSTR name, INT32 len)
{
QCALL_CONTRACT;
BEGIN_QCALL;
- Thread* pThread = thread;
+ ThreadNative::InformThreadNameChange(thread, name, len);
+ END_QCALL;
+}
+
+void ThreadNative::InformThreadNameChange(Thread* pThread, LPCWSTR name, INT32 len)
+{
// Set on Windows 10 Creators Update and later machines the unmanaged thread name as well. That will show up in ETW traces and debuggers which is very helpful
// if more and more threads get a meaningful name
// Will also show up in Linux in gdb and such.
@@ -1030,11 +1039,9 @@ void QCALLTYPE ThreadNative::InformThreadNameChange(QCall::ThreadHandle thread,
g_pDebugInterface->NameChangeEvent(NULL, pThread);
}
#endif // DEBUGGING_SUPPORTED
-
- END_QCALL;
}
-UINT64 QCALLTYPE ThreadNative::GetProcessDefaultStackSize()
+extern "C" UINT64 QCALLTYPE ThreadNative_GetProcessDefaultStackSize()
{
QCALL_CONTRACT;
@@ -1130,7 +1137,7 @@ FCIMPL1(void, ThreadNative::SpinWait, int iterations)
}
FCIMPLEND
-BOOL QCALLTYPE ThreadNative::YieldThread()
+extern "C" BOOL QCALLTYPE ThreadNative_YieldThread()
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/comsynchronizable.h b/src/coreclr/vm/comsynchronizable.h
index cfab18d9010706..43fcd25b15e06b 100644
--- a/src/coreclr/vm/comsynchronizable.h
+++ b/src/coreclr/vm/comsynchronizable.h
@@ -59,7 +59,6 @@ friend class ThreadBaseObject;
ApartmentUnknown = 2
};
- static void QCALLTYPE Start(QCall::ThreadHandle thread, int threadStackSize, int priority, PCWSTR pThreadName);
static FCDECL1(INT32, GetPriority, ThreadBaseObject* pThisUNSAFE);
static FCDECL2(void, SetPriority, ThreadBaseObject* pThisUNSAFE, INT32 iPriority);
static FCDECL1(void, Interrupt, ThreadBaseObject* pThisUNSAFE);
@@ -68,7 +67,6 @@ friend class ThreadBaseObject;
#undef Sleep
static FCDECL1(void, Sleep, INT32 iTime);
#define Sleep(a) Dont_Use_Sleep(a)
- static void QCALLTYPE UninterruptibleSleep0();
static FCDECL1(void, Initialize, ThreadBaseObject* pThisUNSAFE);
static FCDECL2(void, SetBackground, ThreadBaseObject* pThisUNSAFE, CLR_BOOL isBackground);
static FCDECL1(FC_BOOL_RET, IsBackground, ThreadBaseObject* pThisUNSAFE);
@@ -79,18 +77,11 @@ friend class ThreadBaseObject;
static FCDECL2(INT32, SetApartmentState, ThreadBaseObject* pThisUNSAFE, INT32 iState);
#endif // FEATURE_COMINTEROP_APARTMENT_SUPPORT
- static
- void QCALLTYPE InformThreadNameChange(QCall::ThreadHandle thread, LPCWSTR name, INT32 len);
-
- static
- UINT64 QCALLTYPE GetProcessDefaultStackSize();
static FCDECL1(INT32, GetManagedThreadId, ThreadBaseObject* th);
static FCDECL0(INT32, GetOptimalMaxSpinWaitsPerSpinIteration);
static FCDECL1(void, SpinWait, int iterations);
- static BOOL QCALLTYPE YieldThread();
static FCDECL0(Object*, GetCurrentThread);
- static UINT64 QCALLTYPE GetCurrentOSThreadId();
static FCDECL1(void, Finalize, ThreadBaseObject* pThis);
#ifdef FEATURE_COMINTEROP
static FCDECL1(void, DisableComObjectEagerCleanup, ThreadBaseObject* pThis);
@@ -100,6 +91,8 @@ friend class ThreadBaseObject;
static FCDECL0(INT32, GetCurrentProcessorNumber);
+ static void Start(Thread* pNewThread, int threadStackSize, int priority, PCWSTR pThreadName);
+ static void InformThreadNameChange(Thread* pThread, LPCWSTR name, INT32 len);
private:
struct KickOffThread_Args {
@@ -113,6 +106,12 @@ friend class ThreadBaseObject;
static BOOL DoJoin(THREADBASEREF DyingThread, INT32 timeout);
};
+extern "C" void QCALLTYPE ThreadNative_Start(QCall::ThreadHandle thread, int threadStackSize, int priority, PCWSTR pThreadName);
+extern "C" void QCALLTYPE ThreadNative_UninterruptibleSleep0();
+extern "C" void QCALLTYPE ThreadNative_InformThreadNameChange(QCall::ThreadHandle thread, LPCWSTR name, INT32 len);
+extern "C" UINT64 QCALLTYPE ThreadNative_GetProcessDefaultStackSize();
+extern "C" BOOL QCALLTYPE ThreadNative_YieldThread();
+extern "C" UINT64 QCALLTYPE ThreadNative_GetCurrentOSThreadId();
#endif // _COMSYNCHRONIZABLE_H
diff --git a/src/coreclr/vm/comthreadpool.cpp b/src/coreclr/vm/comthreadpool.cpp
index 578f30e4f3d14d..ddb84a1f8d45a2 100644
--- a/src/coreclr/vm/comthreadpool.cpp
+++ b/src/coreclr/vm/comthreadpool.cpp
@@ -290,7 +290,7 @@ FCIMPL0(INT32, ThreadPoolNative::GetThreadCount)
FCIMPLEND
/*****************************************************************************************************/
-INT64 QCALLTYPE ThreadPoolNative::GetCompletedWorkItemCount()
+extern "C" INT64 QCALLTYPE ThreadPool_GetCompletedWorkItemCount()
{
QCALL_CONTRACT;
@@ -592,7 +592,7 @@ VOID QueueUserWorkItemManagedCallback(PVOID pArg)
}
-BOOL QCALLTYPE ThreadPoolNative::RequestWorkerThread()
+extern "C" BOOL QCALLTYPE ThreadPool_RequestWorkerThread()
{
QCALL_CONTRACT;
@@ -621,7 +621,7 @@ BOOL QCALLTYPE ThreadPoolNative::RequestWorkerThread()
return res;
}
-BOOL QCALLTYPE ThreadPoolNative::PerformGateActivities(INT32 cpuUtilization)
+extern "C" BOOL QCALLTYPE ThreadPool_PerformGateActivities(INT32 cpuUtilization)
{
QCALL_CONTRACT;
@@ -713,20 +713,6 @@ FCIMPLEND
/********************************************************************************************************************/
-void QCALLTYPE ThreadPoolNative::ExecuteUnmanagedThreadPoolWorkItem(LPTHREAD_START_ROUTINE callback, LPVOID state)
-{
- QCALL_CONTRACT;
-
- BEGIN_QCALL;
-
- _ASSERTE_ALL_BUILDS(__FILE__, ThreadpoolMgr::UsePortableThreadPool());
- callback(state);
-
- END_QCALL;
-}
-
-/********************************************************************************************************************/
-
struct BindIoCompletion_Args
{
DWORD ErrorCode;
@@ -936,7 +922,7 @@ VOID WINAPI AppDomainTimerCallback(PVOID callbackState, BOOLEAN timerOrWaitFired
ManagedThreadBase::ThreadPool(AppDomainTimerCallback_Worker, pTimerInfoContext);
}
-HANDLE QCALLTYPE AppDomainTimerNative::CreateAppDomainTimer(INT32 dueTime, INT32 timerId)
+extern "C" HANDLE QCALLTYPE AppDomainTimer_Create(INT32 dueTime, INT32 timerId)
{
QCALL_CONTRACT;
@@ -976,7 +962,7 @@ HANDLE QCALLTYPE AppDomainTimerNative::CreateAppDomainTimer(INT32 dueTime, INT32
return hTimer;
}
-BOOL QCALLTYPE AppDomainTimerNative::DeleteAppDomainTimer(HANDLE hTimer)
+extern "C" BOOL QCALLTYPE AppDomainTimer_Delete(HANDLE hTimer)
{
QCALL_CONTRACT;
@@ -998,7 +984,7 @@ BOOL QCALLTYPE AppDomainTimerNative::DeleteAppDomainTimer(HANDLE hTimer)
}
-BOOL QCALLTYPE AppDomainTimerNative::ChangeAppDomainTimer(HANDLE hTimer, INT32 dueTime)
+extern "C" BOOL QCALLTYPE AppDomainTimer_Change(HANDLE hTimer, INT32 dueTime)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/comthreadpool.h b/src/coreclr/vm/comthreadpool.h
index e4e8769d05ae4d..074d4dab3f0c70 100644
--- a/src/coreclr/vm/comthreadpool.h
+++ b/src/coreclr/vm/comthreadpool.h
@@ -35,7 +35,6 @@ class ThreadPoolNative
static FCDECL2(VOID, CorGetMinThreads, DWORD* workerThreads, DWORD* completionPortThreads);
static FCDECL2(VOID, CorGetAvailableThreads, DWORD* workerThreads, DWORD* completionPortThreads);
static FCDECL0(INT32, GetThreadCount);
- static INT64 QCALLTYPE GetCompletedWorkItemCount();
static FCDECL0(INT64, GetPendingUnmanagedWorkItemCount);
static FCDECL0(VOID, NotifyRequestProgress);
@@ -55,24 +54,19 @@ class ThreadPoolNative
static FCDECL1(void, CorQueueWaitCompletion, Object* completeWaitWorkItemObjectUNSAFE);
#endif
- static BOOL QCALLTYPE RequestWorkerThread();
- static BOOL QCALLTYPE PerformGateActivities(INT32 cpuUtilization);
static FCDECL1(FC_BOOL_RET, CorPostQueuedCompletionStatus, LPOVERLAPPED lpOverlapped);
static FCDECL2(FC_BOOL_RET, CorUnregisterWait, LPVOID WaitHandle, Object * objectToNotify);
static FCDECL1(void, CorWaitHandleCleanupNative, LPVOID WaitHandle);
static FCDECL1(FC_BOOL_RET, CorBindIoCompletionCallback, HANDLE fileHandle);
-
- static void QCALLTYPE ExecuteUnmanagedThreadPoolWorkItem(LPTHREAD_START_ROUTINE callback, LPVOID state);
};
-class AppDomainTimerNative
-{
-public:
- static HANDLE QCALLTYPE CreateAppDomainTimer(INT32 dueTime, INT32 timerId);
- static BOOL QCALLTYPE ChangeAppDomainTimer(HANDLE hTimer, INT32 dueTime);
- static BOOL QCALLTYPE DeleteAppDomainTimer(HANDLE hTimer);
-};
+extern "C" INT64 QCALLTYPE ThreadPool_GetCompletedWorkItemCount();
+extern "C" BOOL QCALLTYPE ThreadPool_RequestWorkerThread();
+extern "C" BOOL QCALLTYPE ThreadPool_PerformGateActivities(INT32 cpuUtilization);
+extern "C" HANDLE QCALLTYPE AppDomainTimer_Create(INT32 dueTime, INT32 timerId);
+extern "C" BOOL QCALLTYPE AppDomainTimer_Change(HANDLE hTimer, INT32 dueTime);
+extern "C" BOOL QCALLTYPE AppDomainTimer_Delete(HANDLE hTimer);
VOID QueueUserWorkItemManagedCallback(PVOID pArg);
void WINAPI BindIoCompletionCallbackStub(DWORD ErrorCode,
diff --git a/src/coreclr/vm/comutilnative.cpp b/src/coreclr/vm/comutilnative.cpp
index 5f5f31a2c7c0e1..141eb7b64b0723 100644
--- a/src/coreclr/vm/comutilnative.cpp
+++ b/src/coreclr/vm/comutilnative.cpp
@@ -569,7 +569,7 @@ FCIMPLEND
// our locks within CER's to avoid this problem - just use the CLR's
// unmanaged resources.
//
-void QCALLTYPE ExceptionNative::GetMessageFromNativeResources(ExceptionMessageKind kind, QCall::StringHandleOnStack retMesg)
+extern "C" void QCALLTYPE ExceptionNative_GetMessageFromNativeResources(ExceptionMessageKind kind, QCall::StringHandleOnStack retMesg)
{
QCALL_CONTRACT;
@@ -580,21 +580,21 @@ void QCALLTYPE ExceptionNative::GetMessageFromNativeResources(ExceptionMessageKi
const WCHAR * wszFallbackString = NULL;
switch(kind) {
- case ThreadAbort:
+ case ExceptionMessageKind::ThreadAbort:
hr = buffer.LoadResourceAndReturnHR(CCompRC::Error, IDS_EE_THREAD_ABORT);
if (FAILED(hr)) {
wszFallbackString = W("Thread was being aborted.");
}
break;
- case ThreadInterrupted:
+ case ExceptionMessageKind::ThreadInterrupted:
hr = buffer.LoadResourceAndReturnHR(CCompRC::Error, IDS_EE_THREAD_INTERRUPTED);
if (FAILED(hr)) {
wszFallbackString = W("Thread was interrupted from a waiting state.");
}
break;
- case OutOfMemory:
+ case ExceptionMessageKind::OutOfMemory:
hr = buffer.LoadResourceAndReturnHR(CCompRC::Error, IDS_EE_OUT_OF_MEMORY);
if (FAILED(hr)) {
wszFallbackString = W("Insufficient memory to continue the execution of the program.");
@@ -616,7 +616,7 @@ void QCALLTYPE ExceptionNative::GetMessageFromNativeResources(ExceptionMessageKi
END_QCALL;
}
-void QCALLTYPE Buffer::Clear(void *dst, size_t length)
+extern "C" void QCALLTYPE Buffer_Clear(void *dst, size_t length)
{
QCALL_CONTRACT;
@@ -656,7 +656,7 @@ FCIMPL3(VOID, Buffer::BulkMoveWithWriteBarrier, void *dst, void *src, size_t byt
}
FCIMPLEND
-void QCALLTYPE Buffer::MemMove(void *dst, void *src, size_t length)
+extern "C" void QCALLTYPE Buffer_MemMove(void *dst, void *src, size_t length)
{
QCALL_CONTRACT;
@@ -886,7 +886,7 @@ FCIMPL2(int, GCInterface::CollectionCount, INT32 generation, INT32 getSpecialGCC
}
FCIMPLEND
-int QCALLTYPE GCInterface::StartNoGCRegion(INT64 totalSize, BOOL lohSizeKnown, INT64 lohSize, BOOL disallowFullBlockingGC)
+extern "C" int QCALLTYPE GCInterface_StartNoGCRegion(INT64 totalSize, BOOL lohSizeKnown, INT64 lohSize, BOOL disallowFullBlockingGC)
{
QCALL_CONTRACT;
@@ -906,7 +906,7 @@ int QCALLTYPE GCInterface::StartNoGCRegion(INT64 totalSize, BOOL lohSizeKnown, I
return retVal;
}
-int QCALLTYPE GCInterface::EndNoGCRegion()
+extern "C" int QCALLTYPE GCInterface_EndNoGCRegion()
{
QCALL_CONTRACT;
@@ -970,7 +970,7 @@ FCIMPLEND
**Arguments: None
**Exceptions: None
==============================================================================*/
-INT64 QCALLTYPE GCInterface::GetTotalMemory()
+extern "C" INT64 QCALLTYPE GCInterface_GetTotalMemory()
{
QCALL_CONTRACT;
@@ -992,7 +992,7 @@ INT64 QCALLTYPE GCInterface::GetTotalMemory()
**Arguments: args->generation: The maximum generation to collect
**Exceptions: Argument exception if args->generation is < 0 or > GetMaxGeneration();
==============================================================================*/
-void QCALLTYPE GCInterface::Collect(INT32 generation, INT32 mode)
+extern "C" void QCALLTYPE GCInterface_Collect(INT32 generation, INT32 mode)
{
QCALL_CONTRACT;
@@ -1015,7 +1015,7 @@ void QCALLTYPE GCInterface::Collect(INT32 generation, INT32 mode)
**Arguments: None
**Exceptions: None
==============================================================================*/
-void QCALLTYPE GCInterface::WaitForPendingFinalizers()
+extern "C" void QCALLTYPE GCInterface_WaitForPendingFinalizers()
{
QCALL_CONTRACT;
@@ -1156,7 +1156,7 @@ FCIMPLEND;
**Arguments: args-> pointer to section, size of section
**Exceptions: None
==============================================================================*/
-void* QCALLTYPE GCInterface::RegisterFrozenSegment(void* pSection, SIZE_T sizeSection)
+extern "C" void* QCALLTYPE GCInterface_RegisterFrozenSegment(void* pSection, SIZE_T sizeSection)
{
QCALL_CONTRACT;
@@ -1189,7 +1189,7 @@ void* QCALLTYPE GCInterface::RegisterFrozenSegment(void* pSection, SIZE_T sizeSe
**Arguments: args-> segment handle
**Exceptions: None
==============================================================================*/
-void QCALLTYPE GCInterface::UnregisterFrozenSegment(void* segment)
+extern "C" void QCALLTYPE GCInterface_UnregisterFrozenSegment(void* segment)
{
QCALL_CONTRACT;
@@ -1290,12 +1290,12 @@ FORCEINLINE UINT64 GCInterface::InterlockedSub(UINT64 *pMinuend, UINT64 subtrahe
return newMemValue;
}
-void QCALLTYPE GCInterface::_AddMemoryPressure(UINT64 bytesAllocated)
+extern "C" void QCALLTYPE GCInterface_AddMemoryPressure(UINT64 bytesAllocated)
{
QCALL_CONTRACT;
BEGIN_QCALL;
- AddMemoryPressure(bytesAllocated);
+ GCInterface::AddMemoryPressure(bytesAllocated);
END_QCALL;
}
@@ -1422,12 +1422,12 @@ void GCInterface::AddMemoryPressure(UINT64 bytesAllocated)
}
}
-void QCALLTYPE GCInterface::_RemoveMemoryPressure(UINT64 bytesAllocated)
+extern "C" void QCALLTYPE GCInterface_RemoveMemoryPressure(UINT64 bytesAllocated)
{
QCALL_CONTRACT;
BEGIN_QCALL;
- RemoveMemoryPressure(bytesAllocated);
+ GCInterface::RemoveMemoryPressure(bytesAllocated);
END_QCALL;
}
@@ -1691,7 +1691,7 @@ FCIMPLEND
#include
-void QCALLTYPE COMInterlocked::MemoryBarrierProcessWide()
+extern "C" void QCALLTYPE Interlocked_MemoryBarrierProcessWide()
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/comutilnative.h b/src/coreclr/vm/comutilnative.h
index a4e25bf0eae05b..22bfc527184ad2 100644
--- a/src/coreclr/vm/comutilnative.h
+++ b/src/coreclr/vm/comutilnative.h
@@ -35,18 +35,10 @@ void FreeExceptionData(ExceptionData *pedata);
class ExceptionNative
{
-private:
- enum ExceptionMessageKind {
- ThreadAbort = 1,
- ThreadInterrupted = 2,
- OutOfMemory = 3
- };
-
public:
static FCDECL1(FC_BOOL_RET, IsImmutableAgileException, Object* pExceptionUNSAFE);
static FCDECL1(FC_BOOL_RET, IsTransient, INT32 hresult);
static FCDECL3(StringObject *, StripFileInfo, Object *orefExcepUNSAFE, StringObject *orefStrUNSAFE, CLR_BOOL isRemoteStackTrace);
- static void QCALLTYPE GetMessageFromNativeResources(ExceptionMessageKind kind, QCall::StringHandleOnStack retMesg);
static FCDECL0(VOID, PrepareForForeignExceptionRaise);
static FCDECL3(VOID, GetStackTracesDeepCopy, Object* pExceptionObjectUnsafe, Object **pStackTraceUnsafe, Object **pDynamicMethodsUnsafe);
static FCDECL3(VOID, SaveStackTracesFromDeepCopy, Object* pExceptionObjectUnsafe, Object *pStackTraceUnsafe, Object *pDynamicMethodsUnsafe);
@@ -61,6 +53,13 @@ class ExceptionNative
static FCDECL0(UINT32, GetExceptionCount);
};
+enum class ExceptionMessageKind {
+ ThreadAbort = 1,
+ ThreadInterrupted = 2,
+ OutOfMemory = 3
+};
+extern "C" void QCALLTYPE ExceptionNative_GetMessageFromNativeResources(ExceptionMessageKind kind, QCall::StringHandleOnStack retMesg);
+
//
// Buffer
//
@@ -68,11 +67,11 @@ class Buffer
{
public:
static FCDECL3(VOID, BulkMoveWithWriteBarrier, void *dst, void *src, size_t byteCount);
-
- static void QCALLTYPE MemMove(void *dst, void *src, size_t length);
- static void QCALLTYPE Clear(void *dst, size_t length);
};
+extern "C" void QCALLTYPE Buffer_MemMove(void *dst, void *src, size_t length);
+extern "C" void QCALLTYPE Buffer_Clear(void *dst, size_t length);
+
const UINT MEM_PRESSURE_COUNT = 4;
struct GCGenerationInfo
@@ -150,14 +149,6 @@ class GCInterface {
static FCDECL0(UINT64, GetSegmentSize);
static FCDECL0(int, GetLastGCPercentTimeInGC);
static FCDECL1(UINT64, GetGenerationSize, int gen);
- static
- INT64 QCALLTYPE GetTotalMemory();
-
- static
- void QCALLTYPE Collect(INT32 generation, INT32 mode);
-
- static
- void QCALLTYPE WaitForPendingFinalizers();
static FCDECL0(int, GetMaxGeneration);
static FCDECL1(void, KeepAlive, Object *obj);
@@ -170,26 +161,6 @@ class GCInterface {
static FCDECL3(Object*, AllocateNewArray, void* elementTypeHandle, INT32 length, INT32 flags);
-#ifdef FEATURE_BASICFREEZE
- static
- void* QCALLTYPE RegisterFrozenSegment(void *pSection, SIZE_T sizeSection);
-
- static
- void QCALLTYPE UnregisterFrozenSegment(void *segmentHandle);
-#endif // FEATURE_BASICFREEZE
-
- static
- int QCALLTYPE StartNoGCRegion(INT64 totalSize, BOOL lohSizeKnown, INT64 lohSize, BOOL disallowFullBlockingGC);
-
- static
- int QCALLTYPE EndNoGCRegion();
-
- static
- void QCALLTYPE _AddMemoryPressure(UINT64 bytesAllocated);
-
- static
- void QCALLTYPE _RemoveMemoryPressure(UINT64 bytesAllocated);
-
NOINLINE static void SendEtwRemoveMemoryPressureEvent(UINT64 bytesAllocated);
static void SendEtwAddMemoryPressureEvent(UINT64 bytesAllocated);
@@ -202,6 +173,25 @@ class GCInterface {
NOINLINE static void GarbageCollectModeAny(int generation);
};
+extern "C" INT64 QCALLTYPE GCInterface_GetTotalMemory();
+
+extern "C" void QCALLTYPE GCInterface_Collect(INT32 generation, INT32 mode);
+
+extern "C" void QCALLTYPE GCInterface_WaitForPendingFinalizers();
+#ifdef FEATURE_BASICFREEZE
+extern "C" void* QCALLTYPE GCInterface_RegisterFrozenSegment(void *pSection, SIZE_T sizeSection);
+
+extern "C" void QCALLTYPE GCInterface_UnregisterFrozenSegment(void *segmentHandle);
+#endif // FEATURE_BASICFREEZE
+
+extern "C" int QCALLTYPE GCInterface_StartNoGCRegion(INT64 totalSize, BOOL lohSizeKnown, INT64 lohSize, BOOL disallowFullBlockingGC);
+
+extern "C" int QCALLTYPE GCInterface_EndNoGCRegion();
+
+extern "C" void QCALLTYPE GCInterface_AddMemoryPressure(UINT64 bytesAllocated);
+
+extern "C" void QCALLTYPE GCInterface_RemoveMemoryPressure(UINT64 bytesAllocated);
+
class COMInterlocked
{
public:
@@ -220,9 +210,10 @@ class COMInterlocked
static FCDECL0(void, FCMemoryBarrier);
static FCDECL0(void, FCMemoryBarrierLoad);
- static void QCALLTYPE MemoryBarrierProcessWide();
};
+extern "C" void QCALLTYPE Interlocked_MemoryBarrierProcessWide();
+
class ValueTypeHelper {
public:
static FCDECL1(FC_BOOL_RET, CanCompareBits, Object* obj);
diff --git a/src/coreclr/vm/comwaithandle.cpp b/src/coreclr/vm/comwaithandle.cpp
index 5c9181a4722a60..8ec141aa2a4e9d 100644
--- a/src/coreclr/vm/comwaithandle.cpp
+++ b/src/coreclr/vm/comwaithandle.cpp
@@ -36,7 +36,7 @@ FCIMPL2(INT32, WaitHandleNative::CorWaitOneNative, HANDLE handle, INT32 timeout)
FCIMPLEND
#ifdef TARGET_UNIX
-INT32 QCALLTYPE WaitHandleNative::CorWaitOnePrioritizedNative(HANDLE handle, INT32 timeoutMs)
+extern "C" INT32 QCALLTYPE WaitHandle_CorWaitOnePrioritizedNative(HANDLE handle, INT32 timeoutMs)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/comwaithandle.h b/src/coreclr/vm/comwaithandle.h
index 4bdee2221bf038..ae250a1b9a966f 100644
--- a/src/coreclr/vm/comwaithandle.h
+++ b/src/coreclr/vm/comwaithandle.h
@@ -19,10 +19,10 @@ class WaitHandleNative
{
public:
static FCDECL2(INT32, CorWaitOneNative, HANDLE handle, INT32 timeout);
-#ifdef TARGET_UNIX
- static INT32 QCALLTYPE CorWaitOnePrioritizedNative(HANDLE handle, INT32 timeoutMs);
-#endif
static FCDECL4(INT32, CorWaitMultipleNative, HANDLE *handleArray, INT32 numHandles, CLR_BOOL waitForAll, INT32 timeout);
static FCDECL3(INT32, CorSignalAndWaitOneNative, HANDLE waitHandleSignalUNSAFE, HANDLE waitHandleWaitUNSAFE, INT32 timeout);
};
+#ifdef TARGET_UNIX
+extern "C" INT32 QCALLTYPE WaitHandle_CorWaitOnePrioritizedNative(HANDLE handle, INT32 timeoutMs);
+#endif
#endif
diff --git a/src/coreclr/vm/corelib.cpp b/src/coreclr/vm/corelib.cpp
index 03a51c6168e013..f3f00bce3f9924 100644
--- a/src/coreclr/vm/corelib.cpp
+++ b/src/coreclr/vm/corelib.cpp
@@ -6,18 +6,8 @@
//
// This file defines tables for references between VM and corelib.
//
-// When compiling crossgen, this file is compiled with the FEATURE_XXX define settings matching the target.
-// It allows us to strip features (e.g. refection only load) from crossgen without stripping them from the target.
-//
-
-#ifdef CROSSGEN_CORELIB
-// Use minimal set of headers for crossgen
-#include "windows.h"
-#include "corinfo.h"
-#else
#include "common.h"
#include "ecall.h"
-#endif // CROSSGEN_CORELIB
//
// Headers for all ECall entrypoints
@@ -89,98 +79,6 @@
#include "tailcallhelp.h"
-
-
-#ifdef CROSSGEN_CORELIB
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Duplicate definitions of constants and datastructures required to define the tables
-//
-
-#define NumItems(s) (sizeof(s) / sizeof(s[0]))
-
-#define GetEEFuncEntryPoint(pfn) 0x1001
-
-enum {
- FCFuncFlag_EndOfArray = 0x01,
- FCFuncFlag_HasSignature = 0x02,
- FCFuncFlag_Unreferenced = 0x04, // Suppress unused fcall check
- FCFuncFlag_QCall = 0x08, // QCall - CoreLib to VM transition implemented as PInvoke
-};
-
-struct ECClass
-{
- LPCSTR m_szClassName;
- LPCSTR m_szNameSpace;
- const LPVOID * m_pECFunc;
-};
-
-struct HardCodedMetaSig
-{
- const BYTE* m_pMetaSig; // metasig prefixed with INT8 length:
- // length > 0 - resolved, lenght < 0 - has unresolved type references
-};
-
-enum BinderClassID
-{
-#define TYPEINFO(e,ns,c,s,g,ia,ip,if,im,gv) CLASS__ ## e,
-#include "cortypeinfo.h"
-#undef TYPEINFO
-
-#define DEFINE_CLASS(i,n,s) CLASS__ ## i,
-#include "corelib.h"
-
- CLASS__CORELIB_COUNT,
-
- CLASS__VOID = CLASS__ELEMENT_TYPE_VOID,
- CLASS__BOOLEAN = CLASS__ELEMENT_TYPE_BOOLEAN,
- CLASS__CHAR = CLASS__ELEMENT_TYPE_CHAR,
- CLASS__BYTE = CLASS__ELEMENT_TYPE_U1,
- CLASS__SBYTE = CLASS__ELEMENT_TYPE_I1,
- CLASS__INT16 = CLASS__ELEMENT_TYPE_I2,
- CLASS__UINT16 = CLASS__ELEMENT_TYPE_U2,
- CLASS__INT32 = CLASS__ELEMENT_TYPE_I4,
- CLASS__UINT32 = CLASS__ELEMENT_TYPE_U4,
- CLASS__INT64 = CLASS__ELEMENT_TYPE_I8,
- CLASS__UINT64 = CLASS__ELEMENT_TYPE_U8,
- CLASS__SINGLE = CLASS__ELEMENT_TYPE_R4,
- CLASS__DOUBLE = CLASS__ELEMENT_TYPE_R8,
- CLASS__STRING = CLASS__ELEMENT_TYPE_STRING,
- CLASS__TYPED_REFERENCE = CLASS__ELEMENT_TYPE_TYPEDBYREF,
- CLASS__INTPTR = CLASS__ELEMENT_TYPE_I,
- CLASS__UINTPTR = CLASS__ELEMENT_TYPE_U,
- CLASS__OBJECT = CLASS__ELEMENT_TYPE_OBJECT
-};
-
-struct CoreLibClassDescription
-{
- LPCSTR nameSpace;
- LPCSTR name;
-};
-
-struct CoreLibMethodDescription
-{
- BinderClassID classID;
- LPCSTR name;
- const HardCodedMetaSig * sig;
-};
-
-struct CoreLibFieldDescription
-{
- BinderClassID classID;
- LPCSTR name;
-};
-
-#endif // CROSSGEN_CORELIB
-
-
-#ifdef CROSSGEN_CORELIB
-// When compiling crossgen this namespace creates the second version of the tables than matches the target
-namespace CrossGenCoreLib {
-#endif
-
-
///////////////////////////////////////////////////////////////////////////////
//
// Hardcoded Meta-Sig
@@ -373,10 +271,6 @@ const USHORT c_nCoreLibFieldDescriptions = NumItems(c_rgCoreLibFieldDescriptions
// When compiling crossgen, we only need the target version of the ecall tables
-
-#define QCFuncElement(name,impl) \
- FCFuncFlag_QCall + FCFuncFlags(CORINFO_INTRINSIC_Illegal, ECall::InvalidDynamicFCallId), (LPVOID)(impl), (LPVOID)name,
-
#define FCFuncFlags(intrinsicID, dynamicID) \
(BYTE*)( (((BYTE)intrinsicID) << 16) + (((BYTE)dynamicID) << 24) )
@@ -418,9 +312,3 @@ const ECClass c_rgECClasses[] =
}; // c_rgECClasses[]
const int c_nECClasses = NumItems(c_rgECClasses);
-
-
-
-#ifdef CROSSGEN_CORELIB
-}; // namespace CrossGenCoreLib
-#endif
diff --git a/src/coreclr/vm/debugdebugger.cpp b/src/coreclr/vm/debugdebugger.cpp
index e6313d9c20be96..fa55f3ed2c2c78 100644
--- a/src/coreclr/vm/debugdebugger.cpp
+++ b/src/coreclr/vm/debugdebugger.cpp
@@ -156,7 +156,7 @@ FCIMPL0(void, DebugDebugger::Break)
}
FCIMPLEND
-BOOL QCALLTYPE DebugDebugger::Launch()
+extern "C" BOOL QCALLTYPE DebugDebugger_Launch()
{
QCALL_CONTRACT;
@@ -190,24 +190,26 @@ FCIMPL0(FC_BOOL_RET, DebugDebugger::IsDebuggerAttached)
}
FCIMPLEND
-
-/*static*/ BOOL DebugDebugger::IsLoggingHelper()
+namespace
{
- CONTRACTL
+ BOOL IsLoggingHelper()
{
- NOTHROW;
- GC_NOTRIGGER;
- MODE_ANY;
- }
- CONTRACTL_END;
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ MODE_ANY;
+ }
+ CONTRACTL_END;
-#ifdef DEBUGGING_SUPPORTED
- if (CORDebuggerAttached())
- {
- return (g_pDebugInterface->IsLoggingEnabled());
+ #ifdef DEBUGGING_SUPPORTED
+ if (CORDebuggerAttached())
+ {
+ return (g_pDebugInterface->IsLoggingEnabled());
+ }
+ #endif // DEBUGGING_SUPPORTED
+ return FALSE;
}
-#endif // DEBUGGING_SUPPORTED
- return FALSE;
}
@@ -216,7 +218,7 @@ FCIMPLEND
// appending a newline to anything.
// It will also call OutputDebugString() which will send a native debug event. The message
// string there will be a composite of the two managed string parameters and may include a newline.
-void QCALLTYPE DebugDebugger::Log(INT32 Level, PCWSTR pwzModule, PCWSTR pwzMessage)
+extern "C" void QCALLTYPE DebugDebugger_Log(INT32 Level, PCWSTR pwzModule, PCWSTR pwzMessage)
{
CONTRACTL
{
@@ -1160,14 +1162,14 @@ void DebugStackTrace::DebugStackTraceElement::InitPass2()
_ASSERTE(!ThreadStore::HoldingThreadStore());
- bool bRes = false;
+ bool bRes = false;
#ifdef DEBUGGING_SUPPORTED
// Calculate the IL offset using the debugging services
if ((this->ip != NULL) && g_pDebugInterface)
{
// To get the source line number of the actual code that threw an exception, the dwOffset needs to be
- // adjusted in certain cases when calculating the IL offset.
+ // adjusted in certain cases when calculating the IL offset.
//
// The dwOffset of the stack frame points to either:
//
diff --git a/src/coreclr/vm/debugdebugger.h b/src/coreclr/vm/debugdebugger.h
index cba432e3d8e5f2..3c9fd17cc43570 100644
--- a/src/coreclr/vm/debugdebugger.h
+++ b/src/coreclr/vm/debugdebugger.h
@@ -20,20 +20,18 @@ class DebugDebugger
{
public:
static FCDECL0(void, Break);
- static BOOL QCALLTYPE Launch();
static FCDECL0(FC_BOOL_RET, IsDebuggerAttached);
- static void QCALLTYPE Log(INT32 Level, PCWSTR pwzModule, PCWSTR pwzMessage);
// receives a custom notification object from the target and sends it to the RS via
// code:Debugger::SendCustomDebuggerNotification
static FCDECL1(void, CustomNotification, Object * dataUNSAFE);
static FCDECL0(FC_BOOL_RET, IsLogging);
-
-protected:
- static BOOL IsLoggingHelper();
};
+extern "C" BOOL QCALLTYPE DebugDebugger_Launch();
+extern "C" void QCALLTYPE DebugDebugger_Log(INT32 Level, PCWSTR pwzModule, PCWSTR pwzMessage);
+
class StackFrameHelper : public Object
{
diff --git a/src/coreclr/vm/dllimport.cpp b/src/coreclr/vm/dllimport.cpp
index 737c7fa1926afe..675b1d289d8ae1 100644
--- a/src/coreclr/vm/dllimport.cpp
+++ b/src/coreclr/vm/dllimport.cpp
@@ -33,6 +33,7 @@
#include "sigbuilder.h"
#include "sigformat.h"
#include "ecall.h"
+#include "qcall.h"
#include "fieldmarshaler.h"
#include "pinvokeoverride.h"
#include "nativelibrary.h"
@@ -4358,9 +4359,10 @@ namespace
else
{
pNMD->ndirect.m_pszLibName = libName;
- pNMD->ndirect.m_pszEntrypointName = entryPointName;
}
+ pNMD->ndirect.m_pszEntrypointName = entryPointName;
+
// Do not publish incomplete prestub flags or you will introduce a race condition.
pNMD->InterlockedSetNDirectFlags(ndirectflags | NDirectMethodDesc::kNDirectPopulated);
}
@@ -5440,18 +5442,12 @@ namespace
if (pMD->IsQCall())
{
- LPVOID pvTarget = pMD->ndirect.m_pNativeNDirectTarget;
-
- // Do not repeat the lookup if the QCall was hardbound during ngen
- if (pvTarget == NULL)
- {
- pvTarget = ECall::GetQCallImpl(pMD);
- }
- else
- {
- _ASSERTE(pvTarget == ECall::GetQCallImpl(pMD));
- }
-
+ void* pvTarget = (void*)QCallResolveDllImport(pMD->GetEntrypointName());
+#ifdef _DEBUG
+ CONSISTENCY_CHECK_MSGF(pvTarget != nullptr,
+ ("%s::%s is not registered using DllImportentry macro in qcallentrypoints.cpp",
+ pMD->m_pszDebugClassName, pMD->m_pszDebugMethodName));
+#endif
pMD->SetNDirectTarget(pvTarget);
return;
}
diff --git a/src/coreclr/vm/ecall.cpp b/src/coreclr/vm/ecall.cpp
index bb0363e8aa8f7f..439e9d9beced25 100644
--- a/src/coreclr/vm/ecall.cpp
+++ b/src/coreclr/vm/ecall.cpp
@@ -452,11 +452,6 @@ PCODE ECall::GetFCallImpl(MethodDesc * pMD, BOOL * pfSharedOrDynamicFCallImpl /*
"Read comment above this assert in vm/ecall.cpp\n",
pMD->m_pszDebugClassName, pMD->m_pszDebugMethodName));
- CONSISTENCY_CHECK_MSGF(!ret->IsQCall(),
- ("%s::%s is not registered using FCFuncElement macro in ecall.cpp",
- pMD->m_pszDebugClassName, pMD->m_pszDebugMethodName));
-
-
PCODE pImplementation = (PCODE)ret->m_pImplementation;
int iDynamicID = ret->DynamicID();
@@ -607,60 +602,6 @@ void ECall::Init()
// we depend on in FC_INNER_RETURN macros and other places
FC_NO_TAILCALL++;
}
-
-LPVOID ECall::GetQCallImpl(MethodDesc * pMD)
-{
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- PRECONDITION(pMD->IsNDirect());
- }
- CONTRACTL_END;
-
- DWORD id = ((NDirectMethodDesc *)pMD)->GetECallID();
- if (id == 0)
- {
- id = ECall::GetIDForMethod(pMD);
-
-#ifdef _DEBUG
- CONSISTENCY_CHECK_MSGF(id != 0,
- ("%s::%s is not registered in ecall.cpp",
- pMD->m_pszDebugClassName, pMD->m_pszDebugMethodName));
-#endif
-
- _ASSERTE(id != 0);
-
- // Cache the id
- ((NDirectMethodDesc *)pMD)->SetECallID(id);
- }
-
- ECFunc * cur = FindECFuncForID(id);
-
-#ifdef _DEBUG
- CONSISTENCY_CHECK_MSGF(cur != NULL,
- ("%s::%s is not registered in ecall.cpp",
- pMD->m_pszDebugClassName, pMD->m_pszDebugMethodName));
-
- CONSISTENCY_CHECK_MSGF(cur->IsQCall(),
- ("%s::%s is not registered using QCFuncElement macro in ecall.cpp",
- pMD->m_pszDebugClassName, pMD->m_pszDebugMethodName));
-
- DWORD dwAttrs = pMD->GetAttrs();
- BOOL fPublicOrProtected = IsMdPublic(dwAttrs) || IsMdFamily(dwAttrs) || IsMdFamORAssem(dwAttrs);
-
- // SuppressUnmanagedCodeSecurityAttribute on QCalls suppresses a full demand, but there's still a link demand
- // for unmanaged code permission. All QCalls should be private or internal and wrapped in a managed method
- // to suppress this link demand.
- CONSISTENCY_CHECK_MSGF(!fPublicOrProtected,
- ("%s::%s has to be private or internal.",
- pMD->m_pszDebugClassName, pMD->m_pszDebugMethodName));
-#endif
-
- return cur->m_pImplementation;
-}
-
#endif // !DACCESS_COMPILE
MethodDesc* ECall::MapTargetBackToMethod(PCODE pTarg, PCODE * ppAdjustedEntryPoint /*=NULL*/)
diff --git a/src/coreclr/vm/ecall.h b/src/coreclr/vm/ecall.h
index 9b946ad1982222..f5c8ac646b4406 100644
--- a/src/coreclr/vm/ecall.h
+++ b/src/coreclr/vm/ecall.h
@@ -37,7 +37,6 @@ enum {
FCFuncFlag_EndOfArray = 0x01,
FCFuncFlag_HasSignature = 0x02,
FCFuncFlag_Unreferenced = 0x04, // Suppress unused fcall check
- FCFuncFlag_QCall = 0x08, // QCall - CoreLib to VM transition implemented as PInvoke
};
struct ECFunc {
@@ -51,7 +50,6 @@ struct ECFunc {
bool IsEndOfArray() { LIMITED_METHOD_CONTRACT; return !!(m_dwFlags & FCFuncFlag_EndOfArray); }
bool HasSignature() { LIMITED_METHOD_CONTRACT; return !!(m_dwFlags & FCFuncFlag_HasSignature); }
bool IsUnreferenced(){ LIMITED_METHOD_CONTRACT; return !!(m_dwFlags & FCFuncFlag_Unreferenced); }
- bool IsQCall() { LIMITED_METHOD_CONTRACT; return !!(m_dwFlags & FCFuncFlag_QCall); }
CorInfoIntrinsics IntrinsicID() { LIMITED_METHOD_CONTRACT; return (CorInfoIntrinsics)((INT8)(m_dwFlags >> 16)); }
int DynamicID() { LIMITED_METHOD_CONTRACT; return (int) ((INT8)(m_dwFlags >> 24)); }
@@ -129,9 +127,6 @@ class ECall
NUM_DYNAMICALLY_ASSIGNED_FCALL_IMPLEMENTATIONS,
InvalidDynamicFCallId = -1
};
-
-
- static LPVOID GetQCallImpl(MethodDesc * pMD);
};
extern "C" FCDECL1(VOID, FCComCtor, LPVOID pV);
diff --git a/src/coreclr/vm/ecalllist.h b/src/coreclr/vm/ecalllist.h
index a8c054d5b23c44..e02bad38f9430f 100644
--- a/src/coreclr/vm/ecalllist.h
+++ b/src/coreclr/vm/ecalllist.h
@@ -24,10 +24,6 @@
#define FCIntrinsicSig(name,sig,impl,intrinsicID)
#endif
-#ifndef QCFuncElement
-#define QCFuncElement(name,impl)
-#endif
-
#ifndef FCDynamic
#define FCDynamic(name,intrinsicID,dynamicID)
#endif
@@ -77,7 +73,6 @@ FCFuncEnd()
FCFuncStart(gEnumFuncs)
FCFuncElement("InternalGetUnderlyingType", ReflectionEnum::InternalGetEnumUnderlyingType)
FCFuncElement("InternalGetCorElementType", ReflectionEnum::InternalGetCorElementType)
- QCFuncElement("GetEnumValuesAndNames", ReflectionEnum::GetEnumValuesAndNames)
FCFuncElement("InternalBoxEnum", ReflectionEnum::InternalBoxEnum)
FCFuncEnd()
@@ -111,9 +106,7 @@ FCFuncEnd()
FCFuncStart(gDiagnosticsDebugger)
FCFuncElement("BreakInternal", DebugDebugger::Break)
- QCFuncElement("LaunchInternal", DebugDebugger::Launch)
FCFuncElement("get_IsAttached", DebugDebugger::IsDebuggerAttached)
- QCFuncElement("LogInternal", DebugDebugger::Log)
FCFuncElement("IsLogging", DebugDebugger::IsLogging)
FCFuncElement("CustomNotification", DebugDebugger::CustomNotification)
FCFuncEnd()
@@ -126,10 +119,8 @@ FCFuncStart(gEnvironmentFuncs)
FCFuncElement("get_CurrentManagedThreadId", JIT_GetCurrentManagedThreadId)
FCFuncElement("get_TickCount", SystemNative::GetTickCount)
FCFuncElement("get_TickCount64", SystemNative::GetTickCount64)
- QCFuncElement("_Exit", SystemNative::Exit)
FCFuncElement("set_ExitCode", SystemNative::SetExitCode)
FCFuncElement("get_ExitCode", SystemNative::GetExitCode)
- QCFuncElement("GetProcessorCount", SystemNative::GetProcessorCount)
FCFuncElement("GetCommandLineArgsNative", SystemNative::GetCommandLineArgs)
FCFuncElementSig("FailFast", &gsig_SM_Str_RetVoid, SystemNative::FailFast)
@@ -140,7 +131,6 @@ FCFuncEnd()
FCFuncStart(gExceptionFuncs)
FCFuncElement("IsImmutableAgileException", ExceptionNative::IsImmutableAgileException)
FCFuncElement("GetMethodFromStackTrace", SystemNative::GetMethodFromStackTrace)
- QCFuncElement("GetMessageFromNativeResources", ExceptionNative::GetMessageFromNativeResources)
FCFuncElement("PrepareForForeignExceptionRaise", ExceptionNative::PrepareForForeignExceptionRaise)
FCFuncElement("GetStackTracesDeepCopy", ExceptionNative::GetStackTracesDeepCopy)
FCFuncElement("SaveStackTracesFromDeepCopy", ExceptionNative::SaveStackTracesFromDeepCopy)
@@ -168,18 +158,9 @@ FCFuncStart(gSystem_RuntimeType)
FCFuncEnd()
FCFuncStart(gCOMTypeHandleFuncs)
- QCFuncElement("CreateInstanceForAnotherGenericParameter", RuntimeTypeHandle::CreateInstanceForAnotherGenericParameter)
- QCFuncElement("GetGCHandle", RuntimeTypeHandle::GetGCHandle)
- QCFuncElement("FreeGCHandle", RuntimeTypeHandle::FreeGCHandle)
-
FCFuncElement("IsInstanceOfType", RuntimeTypeHandle::IsInstanceOfType)
FCFuncElement("GetDeclaringMethod", RuntimeTypeHandle::GetDeclaringMethod)
FCFuncElement("GetDeclaringType", RuntimeTypeHandle::GetDeclaringType)
- QCFuncElement("MakePointer", RuntimeTypeHandle::MakePointer)
- QCFuncElement("MakeByRef", RuntimeTypeHandle::MakeByRef)
- QCFuncElement("MakeSZArray", RuntimeTypeHandle::MakeSZArray)
- QCFuncElement("MakeArray", RuntimeTypeHandle::MakeArray)
- QCFuncElement("IsCollectible", RuntimeTypeHandle::IsCollectible)
FCFuncElement("GetFirstIntroducedMethod", RuntimeTypeHandle::GetFirstIntroducedMethod)
FCFuncElement("GetNextIntroducedMethod", RuntimeTypeHandle::GetNextIntroducedMethod)
FCFuncElement("GetCorElementType", RuntimeTypeHandle::GetCorElementType)
@@ -193,31 +174,20 @@ FCFuncStart(gCOMTypeHandleFuncs)
FCFuncElement("GetMethodAt", RuntimeTypeHandle::GetMethodAt)
FCFuncElement("GetFields", RuntimeTypeHandle::GetFields)
FCFuncElement("GetInterfaces", RuntimeTypeHandle::GetInterfaces)
- QCFuncElement("GetConstraints", RuntimeTypeHandle::GetConstraints)
FCFuncElement("GetAttributes", RuntimeTypeHandle::GetAttributes)
FCFuncElement("_GetMetadataImport", RuntimeTypeHandle::GetMetadataImport)
FCFuncElement("GetNumVirtuals", RuntimeTypeHandle::GetNumVirtuals)
FCFuncElement("GetNumVirtualsAndStaticVirtuals", RuntimeTypeHandle::GetNumVirtualsAndStaticVirtuals)
- QCFuncElement("VerifyInterfaceIsImplemented", RuntimeTypeHandle::VerifyInterfaceIsImplemented)
- QCFuncElement("GetInterfaceMethodImplementation", RuntimeTypeHandle::GetInterfaceMethodImplementation)
FCFuncElement("IsValueType", RuntimeTypeHandle::IsValueType)
FCFuncElement("IsInterface", RuntimeTypeHandle::IsInterface)
FCFuncElement("IsByRefLike", RuntimeTypeHandle::IsByRefLike)
- QCFuncElement("_IsVisible", RuntimeTypeHandle::IsVisible)
- QCFuncElement("ConstructName", RuntimeTypeHandle::ConstructName)
FCFuncElement("CanCastTo", RuntimeTypeHandle::CanCastTo)
- QCFuncElement("GetTypeByName", RuntimeTypeHandle::GetTypeByName)
- QCFuncElement("GetTypeByNameUsingCARules", RuntimeTypeHandle::GetTypeByNameUsingCARules)
- QCFuncElement("GetInstantiation", RuntimeTypeHandle::GetInstantiation)
- QCFuncElement("Instantiate", RuntimeTypeHandle::Instantiate)
- QCFuncElement("GetGenericTypeDefinition", RuntimeTypeHandle::GetGenericTypeDefinition)
FCFuncElement("HasInstantiation", RuntimeTypeHandle::HasInstantiation)
FCFuncElement("GetGenericVariableIndex", RuntimeTypeHandle::GetGenericVariableIndex)
FCFuncElement("IsGenericVariable", RuntimeTypeHandle::IsGenericVariable)
FCFuncElement("IsGenericTypeDefinition", RuntimeTypeHandle::IsGenericTypeDefinition)
FCFuncElement("ContainsGenericVariables", RuntimeTypeHandle::ContainsGenericVariables)
FCFuncElement("SatisfiesConstraints", RuntimeTypeHandle::SatisfiesConstraints)
- QCFuncElement("GetActivationInfo", RuntimeTypeHandle::GetActivationInfo)
#ifdef FEATURE_COMINTEROP
FCFuncElement("AllocateComObject", RuntimeTypeHandle::AllocateComObject)
#endif // FEATURE_COMINTEROP
@@ -261,11 +231,8 @@ FCFuncStart(gSignatureNative)
FCFuncEnd()
FCFuncStart(gRuntimeMethodHandle)
- QCFuncElement("ConstructInstantiation", RuntimeMethodHandle::ConstructInstantiation)
FCFuncElement("_GetCurrentMethod", RuntimeMethodHandle::GetCurrentMethod)
FCFuncElement("InvokeMethod", RuntimeMethodHandle::InvokeMethod)
- QCFuncElement("GetFunctionPointer", RuntimeMethodHandle::GetFunctionPointer)
- QCFuncElement("GetIsCollectible", RuntimeMethodHandle::GetIsCollectible)
FCFuncElement("GetImplAttributes", RuntimeMethodHandle::GetImplAttributes)
FCFuncElement("GetAttributes", RuntimeMethodHandle::GetAttributes)
FCFuncElement("GetDeclaringType", RuntimeMethodHandle::GetDeclaringType)
@@ -274,20 +241,15 @@ FCFuncStart(gRuntimeMethodHandle)
FCFuncElement("GetName", RuntimeMethodHandle::GetName)
FCFuncElement("_GetUtf8Name", RuntimeMethodHandle::GetUtf8Name)
FCFuncElement("MatchesNameHash", RuntimeMethodHandle::MatchesNameHash)
- QCFuncElement("GetMethodInstantiation", RuntimeMethodHandle::GetMethodInstantiation)
FCFuncElement("HasMethodInstantiation", RuntimeMethodHandle::HasMethodInstantiation)
FCFuncElement("IsGenericMethodDefinition", RuntimeMethodHandle::IsGenericMethodDefinition)
FCFuncElement("GetGenericParameterCount", RuntimeMethodHandle::GetGenericParameterCount)
FCFuncElement("IsTypicalMethodDefinition", RuntimeMethodHandle::IsTypicalMethodDefinition)
- QCFuncElement("GetTypicalMethodDefinition", RuntimeMethodHandle::GetTypicalMethodDefinition)
- QCFuncElement("StripMethodInstantiation", RuntimeMethodHandle::StripMethodInstantiation)
FCFuncElement("GetStubIfNeeded", RuntimeMethodHandle::GetStubIfNeeded)
FCFuncElement("GetMethodFromCanonical", RuntimeMethodHandle::GetMethodFromCanonical)
FCFuncElement("IsDynamicMethod", RuntimeMethodHandle::IsDynamicMethod)
FCFuncElement("GetMethodBody", RuntimeMethodHandle::GetMethodBody)
- QCFuncElement("IsCAVisibleFromDecoratedType", RuntimeMethodHandle::IsCAVisibleFromDecoratedType)
FCFuncElement("IsConstructor", RuntimeMethodHandle::IsConstructor)
- QCFuncElement("Destroy", RuntimeMethodHandle::Destroy)
FCFuncElement("GetResolver", RuntimeMethodHandle::GetResolver)
FCFuncElement("GetLoaderAllocator", RuntimeMethodHandle::GetLoaderAllocator)
FCFuncEnd()
@@ -310,33 +272,13 @@ FCFuncEnd()
FCFuncStart(gCOMModuleFuncs)
- QCFuncElement("GetType", COMModule::GetType)
- QCFuncElement("GetScopeName", COMModule::GetScopeName)
FCFuncElement("GetTypes", COMModule::GetTypes)
- QCFuncElement("GetFullyQualifiedName", COMModule::GetFullyQualifiedName)
-FCFuncEnd()
-
-FCFuncStart(gCOMModuleBuilderFuncs)
- QCFuncElement("GetStringConstant", COMModule::GetStringConstant)
- QCFuncElement("GetTypeRef", COMModule::GetTypeRef)
- QCFuncElement("GetTokenFromTypeSpec", COMModule::GetTokenFromTypeSpec)
- QCFuncElement("GetMemberRef", COMModule::GetMemberRef)
- QCFuncElement("GetMemberRefOfMethodInfo", COMModule::GetMemberRefOfMethodInfo)
- QCFuncElement("GetMemberRefOfFieldInfo", COMModule::GetMemberRefOfFieldInfo)
- QCFuncElement("GetMemberRefFromSignature", COMModule::GetMemberRefFromSignature)
- QCFuncElement("GetArrayMethodToken", COMModule::GetArrayMethodToken)
- QCFuncElement("SetFieldRVAContent", COMModule::SetFieldRVAContent)
FCFuncEnd()
FCFuncStart(gCOMModuleHandleFuncs)
FCFuncElement("GetToken", ModuleHandle::GetToken)
- QCFuncElement("GetModuleType", ModuleHandle::GetModuleType)
FCFuncElement("GetDynamicMethod", ModuleHandle::GetDynamicMethod)
FCFuncElement("_GetMetadataImport", ModuleHandle::GetMetadataImport)
- QCFuncElement("ResolveType", ModuleHandle::ResolveType)
- QCFuncElement("ResolveMethod", ModuleHandle::ResolveMethod)
- QCFuncElement("ResolveField", ModuleHandle::ResolveField)
- QCFuncElement("GetPEKind", ModuleHandle::GetPEKind)
FCFuncElement("GetMDStreamVersion", ModuleHandle::GetMDStreamVersion)
FCFuncEnd()
@@ -350,107 +292,21 @@ FCFuncStart(gCOMCustomAttributeFuncs)
FCFuncElement("_GetPropertyOrFieldData", COMCustomAttribute::GetPropertyOrFieldData)
FCFuncEnd()
-FCFuncStart(gCOMClassWriter)
- QCFuncElement("DefineGenericParam", COMDynamicWrite::DefineGenericParam)
- QCFuncElement("DefineType", COMDynamicWrite::DefineType)
- QCFuncElement("SetParentType", COMDynamicWrite::SetParentType)
- QCFuncElement("AddInterfaceImpl", COMDynamicWrite::AddInterfaceImpl)
- QCFuncElement("DefineMethod", COMDynamicWrite::DefineMethod)
- QCFuncElement("DefineMethodSpec", COMDynamicWrite::DefineMethodSpec)
- QCFuncElement("SetMethodIL", COMDynamicWrite::SetMethodIL)
- QCFuncElement("TermCreateClass", COMDynamicWrite::TermCreateClass)
- QCFuncElement("DefineField", COMDynamicWrite::DefineField)
- QCFuncElement("DefineProperty", COMDynamicWrite::DefineProperty)
- QCFuncElement("DefineEvent", COMDynamicWrite::DefineEvent)
- QCFuncElement("DefineMethodSemantics", COMDynamicWrite::DefineMethodSemantics)
- QCFuncElement("SetMethodImpl", COMDynamicWrite::SetMethodImpl)
- QCFuncElement("DefineMethodImpl", COMDynamicWrite::DefineMethodImpl)
- QCFuncElement("GetTokenFromSig", COMDynamicWrite::GetTokenFromSig)
- QCFuncElement("SetFieldLayoutOffset", COMDynamicWrite::SetFieldLayoutOffset)
- QCFuncElement("SetClassLayout", COMDynamicWrite::SetClassLayout)
- QCFuncElement("SetParamInfo", COMDynamicWrite::SetParamInfo)
- QCFuncElement("SetPInvokeData", COMDynamicWrite::SetPInvokeData)
- QCFuncElement("SetConstantValue", COMDynamicWrite::SetConstantValue)
- QCFuncElement("DefineCustomAttribute", COMDynamicWrite::DefineCustomAttribute)
-FCFuncEnd()
-
FCFuncStart(gCompatibilitySwitchFuncs)
FCFuncElement("GetValueInternal", CompatibilitySwitch::GetValue)
FCFuncEnd()
-FCFuncStart(gMdUtf8String)
- QCFuncElement("EqualsCaseInsensitive", MdUtf8String::EqualsCaseInsensitive)
- QCFuncElement("HashCaseInsensitive", MdUtf8String::HashCaseInsensitive)
-FCFuncEnd()
-
-FCFuncStart(gSafeTypeNameParserHandle)
- QCFuncElement("_ReleaseTypeNameParser", TypeName::QReleaseTypeNameParser)
-FCFuncEnd()
-
-FCFuncStart(gTypeNameParser)
- QCFuncElement("_CreateTypeNameParser", TypeName::QCreateTypeNameParser)
- QCFuncElement("_GetNames", TypeName::QGetNames)
- QCFuncElement("_GetTypeArguments", TypeName::QGetTypeArguments)
- QCFuncElement("_GetModifiers", TypeName::QGetModifiers)
- QCFuncElement("_GetAssemblyName", TypeName::QGetAssemblyName)
-FCFuncEnd()
-
FCFuncStart(gRuntimeAssemblyFuncs)
- QCFuncElement("GetFullName", AssemblyNative::GetFullName)
- QCFuncElement("GetLocation", AssemblyNative::GetLocation)
- QCFuncElement("GetResource", AssemblyNative::GetResource)
- QCFuncElement("GetCodeBase", AssemblyNative::GetCodeBase)
- QCFuncElement("GetFlags", AssemblyNative::GetFlags)
- QCFuncElement("GetHashAlgorithm", AssemblyNative::GetHashAlgorithm)
- QCFuncElement("GetLocale", AssemblyNative::GetLocale)
- QCFuncElement("GetPublicKey", AssemblyNative::GetPublicKey)
- QCFuncElement("GetSimpleName", AssemblyNative::GetSimpleName)
- QCFuncElement("GetVersion", AssemblyNative::GetVersion)
FCFuncElement("FCallIsDynamic", AssemblyNative::IsDynamic)
- QCFuncElement("InternalLoad", AssemblyNative::InternalLoad)
- QCFuncElement("GetType", AssemblyNative::GetType)
- QCFuncElement("GetForwardedType", AssemblyNative::GetForwardedType)
- QCFuncElement("GetManifestResourceInfo", AssemblyNative::GetManifestResourceInfo)
- QCFuncElement("GetModules", AssemblyNative::GetModules)
- QCFuncElement("GetModule", AssemblyNative::GetModule)
FCFuncElement("GetReferencedAssemblies", AssemblyNative::GetReferencedAssemblies)
- QCFuncElement("GetExportedTypes", AssemblyNative::GetExportedTypes)
FCFuncElement("GetManifestResourceNames", AssemblyNative::GetManifestResourceNames)
- QCFuncElement("GetEntryPoint", AssemblyNative::GetEntryPoint)
- QCFuncElement("GetImageRuntimeVersion", AssemblyNative::GetImageRuntimeVersion)
FCFuncElement("GetManifestModule", AssemblyHandle::GetManifestModule)
FCFuncElement("GetToken", AssemblyHandle::GetToken)
- QCFuncElement("GetIsCollectible", AssemblyNative::GetIsCollectible)
-FCFuncEnd()
-
-FCFuncStart(gAssemblyExtensionsFuncs)
- QCFuncElement("InternalTryGetRawMetadata", AssemblyNative::InternalTryGetRawMetadata)
-FCFuncEnd()
-
-FCFuncStart(gMetadataUpdaterFuncs)
- QCFuncElement("ApplyUpdate", AssemblyNative::ApplyUpdate)
- QCFuncElement("IsApplyUpdateSupported", AssemblyNative::IsApplyUpdateSupported)
FCFuncEnd()
FCFuncStart(gAssemblyLoadContextFuncs)
- QCFuncElement("InitializeAssemblyLoadContext", AssemblyNative::InitializeAssemblyLoadContext)
- QCFuncElement("PrepareForAssemblyLoadContextRelease", AssemblyNative::PrepareForAssemblyLoadContextRelease)
- QCFuncElement("LoadFromPath", AssemblyNative::LoadFromPath)
- QCFuncElement("LoadFromStream", AssemblyNative::LoadFromStream)
-#ifndef TARGET_UNIX
- QCFuncElement("LoadFromInMemoryModuleInternal", AssemblyNative::LoadFromInMemoryModule)
-#endif
- QCFuncElement("GetLoadContextForAssembly", AssemblyNative::GetLoadContextForAssembly)
FCFuncElement("GetLoadedAssemblies", AppDomainNative::GetLoadedAssemblies)
-#if defined(FEATURE_MULTICOREJIT)
- QCFuncElement("InternalSetProfileRoot", MultiCoreJITNative::InternalSetProfileRoot)
- QCFuncElement("InternalStartProfile", MultiCoreJITNative::InternalStartProfile)
-#endif // defined(FEATURE_MULTICOREJIT)
FCFuncElement("IsTracingEnabled", AssemblyNative::IsTracingEnabled)
- QCFuncElement("TraceResolvingHandlerInvoked", AssemblyNative::TraceResolvingHandlerInvoked)
- QCFuncElement("TraceAssemblyResolveHandlerInvoked", AssemblyNative::TraceAssemblyResolveHandlerInvoked)
- QCFuncElement("TraceAssemblyLoadFromResolveHandlerInvoked", AssemblyNative::TraceAssemblyLoadFromResolveHandlerInvoked)
- QCFuncElement("TraceSatelliteSubdirectoryPathProbed", AssemblyNative::TraceSatelliteSubdirectoryPathProbed)
FCFuncEnd()
FCFuncStart(gAssemblyNameFuncs)
@@ -459,18 +315,7 @@ FCFuncStart(gAssemblyNameFuncs)
FCFuncElement("nGetFileInformation", AssemblyNameNative::GetFileInformation)
FCFuncEnd()
-FCFuncStart(gLoaderAllocatorFuncs)
- QCFuncElement("Destroy", LoaderAllocator::Destroy)
-FCFuncEnd()
-
-FCFuncStart(gAssemblyFuncs)
- QCFuncElement("GetEntryAssemblyNative", AssemblyNative::GetEntryAssembly)
- QCFuncElement("GetExecutingAssemblyNative", AssemblyNative::GetExecutingAssembly)
- FCFuncElement("GetAssemblyCount", AssemblyNative::GetAssemblyCount)
-FCFuncEnd()
-
FCFuncStart(gAssemblyBuilderFuncs)
- QCFuncElement("CreateDynamicAssembly", AppDomainNative::CreateDynamicAssembly)
FCFuncElement("GetInMemoryAssemblyModule", AssemblyNative::GetInMemoryAssemblyModule)
FCFuncEnd()
@@ -556,15 +401,11 @@ FCFuncEnd()
FCFuncStart(gThreadFuncs)
FCFuncElement("InternalGetCurrentThread", GetThread)
- QCFuncElement("StartInternal", ThreadNative::Start)
#undef Sleep
FCFuncElement("SleepInternal", ThreadNative::Sleep)
#define Sleep(a) Dont_Use_Sleep(a)
- QCFuncElement("UninterruptibleSleep0", ThreadNative::UninterruptibleSleep0)
FCFuncElement("Initialize", ThreadNative::Initialize)
- QCFuncElement("InformThreadNameChange", ThreadNative::InformThreadNameChange)
FCFuncElement("SpinWaitInternal", ThreadNative::SpinWait)
- QCFuncElement("YieldInternal", ThreadNative::YieldThread)
FCFuncElement("GetCurrentThreadNative", ThreadNative::GetCurrentThread)
FCFuncElement("get_ManagedThreadId", ThreadNative::GetManagedThreadId)
FCFuncElement("InternalFinalize", ThreadNative::Finalize)
@@ -575,7 +416,6 @@ FCFuncStart(gThreadFuncs)
FCFuncElement("set_IsThreadPoolThread", ThreadNative::SetIsThreadpoolThread)
FCFuncElement("GetPriorityNative", ThreadNative::GetPriority)
FCFuncElement("SetPriorityNative", ThreadNative::SetPriority)
- QCFuncElement("GetCurrentOSThreadId", ThreadNative::GetCurrentOSThreadId)
FCFuncElement("GetThreadStateNative", ThreadNative::GetThreadState)
#ifdef FEATURE_COMINTEROP_APARTMENT_SUPPORT
FCFuncElement("GetApartmentStateNative", ThreadNative::GetApartmentState)
@@ -599,7 +439,6 @@ FCFuncStart(gThreadPoolFuncs)
FCFuncElement("SetMinThreadsNative", ThreadPoolNative::CorSetMinThreads)
FCFuncElement("GetMinThreadsNative", ThreadPoolNative::CorGetMinThreads)
FCFuncElement("GetThreadCount", ThreadPoolNative::GetThreadCount)
- QCFuncElement("GetCompletedWorkItemCount", ThreadPoolNative::GetCompletedWorkItemCount)
FCFuncElement("GetPendingUnmanagedWorkItemCount", ThreadPoolNative::GetPendingUnmanagedWorkItemCount)
FCFuncElement("RegisterWaitForSingleObjectNative", ThreadPoolNative::CorRegisterWaitForSingleObject)
#ifdef TARGET_WINDOWS // the IO completion thread pool is currently only available on Windows
@@ -612,14 +451,6 @@ FCFuncStart(gThreadPoolFuncs)
FCFuncElement("NotifyWorkItemProgressNative", ThreadPoolNative::NotifyRequestProgress)
FCFuncElement("GetEnableWorkerTrackingNative", ThreadPoolNative::GetEnableWorkerTracking)
FCFuncElement("ReportThreadStatusNative", ThreadPoolNative::ReportThreadStatus)
- QCFuncElement("RequestWorkerThreadNative", ThreadPoolNative::RequestWorkerThread)
- QCFuncElement("PerformRuntimeSpecificGateActivitiesNative", ThreadPoolNative::PerformGateActivities)
-FCFuncEnd()
-
-FCFuncStart(gTimerFuncs)
- QCFuncElement("CreateAppDomainTimer", AppDomainTimerNative::CreateAppDomainTimer)
- QCFuncElement("ChangeAppDomainTimer", AppDomainTimerNative::ChangeAppDomainTimer)
- QCFuncElement("DeleteAppDomainTimer", AppDomainTimerNative::DeleteAppDomainTimer)
FCFuncEnd()
FCFuncStart(gRegisteredWaitHandleFuncs)
@@ -627,22 +458,12 @@ FCFuncStart(gRegisteredWaitHandleFuncs)
FCFuncElement("WaitHandleCleanupNative", ThreadPoolNative::CorWaitHandleCleanupNative)
FCFuncEnd()
-FCFuncStart(gUnmanagedThreadPoolWorkItemFuncs)
- QCFuncElement("ExecuteUnmanagedThreadPoolWorkItem", ThreadPoolNative::ExecuteUnmanagedThreadPoolWorkItem)
-FCFuncEnd()
-
FCFuncStart(gWaitHandleFuncs)
FCFuncElement("WaitOneCore", WaitHandleNative::CorWaitOneNative)
FCFuncElement("WaitMultipleIgnoringSyncContext", WaitHandleNative::CorWaitMultipleNative)
FCFuncElement("SignalAndWaitNative", WaitHandleNative::CorSignalAndWaitOneNative)
FCFuncEnd()
-#ifdef TARGET_UNIX
-FCFuncStart(gLowLevelLifoSemaphoreFuncs)
- QCFuncElement("WaitNative", WaitHandleNative::CorWaitOnePrioritizedNative)
-FCFuncEnd()
-#endif
-
#ifdef FEATURE_COMINTEROP
FCFuncStart(gVariantFuncs)
FCFuncElement("SetFieldsObject", COMVariant::SetFieldsObject)
@@ -656,10 +477,6 @@ FCFuncStart(gOAVariantFuncs)
FCFuncEnd()
#endif // FEATURE_COMINTEROP
-FCFuncStart(gClrConfig)
- QCFuncElement("GetConfigBoolValue", ClrConfigNative::GetConfigBoolValue)
-FCFuncEnd()
-
FCFuncStart(gCastHelpers)
FCFuncElement("IsInstanceOfAny_NoCacheLookup", ::IsInstanceOfAny_NoCacheLookup)
FCFuncElement("ChkCastAny_NoCacheLookup", ::ChkCastAny_NoCacheLookup)
@@ -678,9 +495,7 @@ FCFuncStart(gArrayFuncs)
FCFuncEnd()
FCFuncStart(gBufferFuncs)
- QCFuncElement("__ZeroMemory", Buffer::Clear)
FCFuncElement("__BulkMoveWithWriteBarrier", Buffer::BulkMoveWithWriteBarrier)
- QCFuncElement("__Memmove", Buffer::MemMove)
FCFuncEnd()
FCFuncStart(gGCInterfaceFuncs)
@@ -692,19 +507,11 @@ FCFuncStart(gGCInterfaceFuncs)
FCFuncElement("_CollectionCount", GCInterface::CollectionCount)
FCFuncElement("GetMemoryInfo", GCInterface::GetMemoryInfo)
FCFuncElement("GetMemoryLoad", GCInterface::GetMemoryLoad)
- QCFuncElement("_StartNoGCRegion", GCInterface::StartNoGCRegion)
- QCFuncElement("_EndNoGCRegion", GCInterface::EndNoGCRegion)
FCFuncElement("GetSegmentSize", GCInterface::GetSegmentSize)
FCFuncElement("GetLastGCPercentTimeInGC", GCInterface::GetLastGCPercentTimeInGC)
FCFuncElement("GetGenerationSize", GCInterface::GetGenerationSize)
- QCFuncElement("_AddMemoryPressure", GCInterface::_AddMemoryPressure)
- QCFuncElement("_RemoveMemoryPressure", GCInterface::_RemoveMemoryPressure)
FCFuncElement("GetGeneration", GCInterface::GetGeneration)
- QCFuncElement("GetTotalMemory", GCInterface::GetTotalMemory)
- QCFuncElement("_Collect", GCInterface::Collect)
FCFuncElement("GetMaxGeneration", GCInterface::GetMaxGeneration)
- QCFuncElement("_WaitForPendingFinalizers", GCInterface::WaitForPendingFinalizers)
-
FCFuncElement("_SuppressFinalize", GCInterface::SuppressFinalize)
FCFuncElement("_ReRegisterForFinalize", GCInterface::ReRegisterForFinalize)
@@ -712,12 +519,6 @@ FCFuncStart(gGCInterfaceFuncs)
FCFuncElement("GetTotalAllocatedBytes", GCInterface::GetTotalAllocatedBytes)
FCFuncElement("AllocateNewArray", GCInterface::AllocateNewArray)
-
-#ifdef FEATURE_BASICFREEZE
- QCFuncElement("_RegisterFrozenSegment", GCInterface::RegisterFrozenSegment)
- QCFuncElement("_UnregisterFrozenSegment", GCInterface::UnregisterFrozenSegment)
-#endif // FEATURE_BASICFREEZE
-
FCFuncEnd()
FCFuncStart(gGCSettingsFuncs)
@@ -738,22 +539,12 @@ FCFuncStart(gInteropMarshalFuncs)
FCFuncElement("IsPinnable", MarshalNative::IsPinnable)
FCFuncElement("GetExceptionCode", ExceptionNative::GetExceptionCode)
FCFuncElement("GetExceptionPointers", ExceptionNative::GetExceptionPointers)
-#ifdef TARGET_WINDOWS
- QCFuncElement("GetHINSTANCE", COMModule::GetHINSTANCE)
-#endif // TARGET_WINDOWS
FCFuncElement("OffsetOfHelper", MarshalNative::OffsetOfHelper)
-
- QCFuncElement("InternalPrelink", MarshalNative::Prelink)
- QCFuncElement("IsBuiltInComSupportedInternal", MarshalNative::IsBuiltInComSupported)
FCFuncElement("GetExceptionForHRInternal", MarshalNative::GetExceptionForHR)
FCFuncElement("GetDelegateForFunctionPointerInternal", MarshalNative::GetDelegateForFunctionPointerInternal)
FCFuncElement("GetFunctionPointerForDelegateInternal", MarshalNative::GetFunctionPointerForDelegateInternal)
-#ifdef _DEBUG
- QCFuncElement("GetIsInCooperativeGCModeFunctionPointer", MarshalNative::GetIsInCooperativeGCModeFunctionPointer)
-#endif // _DEBUG
-
#ifdef FEATURE_COMINTEROP
FCFuncElement("GetHRForException", MarshalNative::GetHRForException)
FCFuncElement("GetObjectForIUnknownNative", MarshalNative::GetObjectForIUnknownNative)
@@ -775,26 +566,9 @@ FCFuncStart(gInteropMarshalFuncs)
FCFuncElement("GetTypedObjectForIUnknown", MarshalNative::GetTypedObjectForIUnknown)
FCFuncElement("ChangeWrapperHandleStrength", MarshalNative::ChangeWrapperHandleStrength)
FCFuncElement("CleanupUnusedObjectsInCurrentContext", MarshalNative::CleanupUnusedObjectsInCurrentContext)
- QCFuncElement("GetTypeFromCLSID", MarshalNative::GetTypeFromCLSID)
#endif // FEATURE_COMINTEROP
FCFuncEnd()
-FCFuncStart(gInteropNativeLibraryFuncs)
- QCFuncElement("LoadFromPath", NativeLibraryNative::LoadFromPath)
- QCFuncElement("LoadByName", NativeLibraryNative::LoadByName)
- QCFuncElement("FreeLib", NativeLibraryNative::FreeLib)
- QCFuncElement("GetSymbol", NativeLibraryNative::GetSymbol)
-FCFuncEnd()
-
-FCFuncStart(gTypeLoadExceptionFuncs)
- QCFuncElement("GetTypeLoadExceptionMessage", GetTypeLoadExceptionMessage)
-FCFuncEnd()
-
-FCFuncStart(gFileLoadExceptionFuncs)
- QCFuncElement("GetFileLoadExceptionMessage", GetFileLoadExceptionMessage)
- QCFuncElement("GetMessageForHR", FileLoadException_GetMessageForHR)
-FCFuncEnd()
-
FCFuncStart(gMissingMemberExceptionFuncs)
FCFuncElement("FormatSignature", MissingMemberException_FormatSignature)
FCFuncEnd()
@@ -814,7 +588,6 @@ FCFuncStart(gInterlockedFuncs)
FCFuncElementSig("ExchangeAdd", &gsig_SM_RefLong_Long_RetLong, COMInterlocked::ExchangeAdd64)
FCFuncElement("MemoryBarrier", COMInterlocked::FCMemoryBarrier)
FCFuncElement("ReadMemoryBarrier", COMInterlocked::FCMemoryBarrierLoad)
- QCFuncElement("_MemoryBarrierProcessWide", COMInterlocked::MemoryBarrierProcessWide)
FCFuncEnd()
FCFuncStart(gJitInfoFuncs)
@@ -841,7 +614,6 @@ FCFuncStart(gMonitorFuncs)
FCFuncElement("ObjPulse", ObjectNative::Pulse)
FCFuncElement("ObjPulseAll", ObjectNative::PulseAll)
FCFuncElement("IsEnteredNative", ObjectNative::IsLockHeld)
- QCFuncElement("GetLockContentionCount", ObjectNative::GetMonitorLockContentionCount)
FCFuncEnd()
FCFuncStart(gOverlappedFuncs)
@@ -854,18 +626,12 @@ FCFuncEnd()
FCFuncStart(gRuntimeHelpers)
FCFuncElement("GetObjectValue", ObjectNative::GetObjectValue)
FCIntrinsic("InitializeArray", ArrayNative::InitializeArray, CORINFO_INTRINSIC_InitializeArray)
- QCFuncElement("RunClassConstructor", ReflectionInvocation::RunClassConstructor)
- QCFuncElement("RunModuleConstructor", ReflectionInvocation::RunModuleConstructor)
- QCFuncElement("CompileMethod", ReflectionInvocation::CompileMethod)
- QCFuncElement("PrepareMethod", ReflectionInvocation::PrepareMethod)
FCFuncElement("PrepareDelegate", ReflectionInvocation::PrepareDelegate)
FCFuncElement("GetHashCode", ObjectNative::GetHashCode)
FCFuncElement("Equals", ObjectNative::Equals)
FCFuncElement("AllocateUninitializedClone", ObjectNative::AllocateUninitializedClone)
FCFuncElement("EnsureSufficientExecutionStack", ReflectionInvocation::EnsureSufficientExecutionStack)
FCFuncElement("TryEnsureSufficientExecutionStack", ReflectionInvocation::TryEnsureSufficientExecutionStack)
- QCFuncElement("GetUninitializedObject", ReflectionSerialization::GetUninitializedObject)
- QCFuncElement("AllocateTypeAssociatedMemory", RuntimeTypeHandle::AllocateTypeAssociatedMemory)
FCFuncElement("AllocTailCallArgBuffer", TailCallHelp::AllocTailCallArgBuffer)
FCFuncElement("GetTailCallInfo", TailCallHelp::GetTailCallInfo)
FCFuncEnd()
@@ -899,7 +665,6 @@ FCFuncEnd()
FCFuncStart(gInterfaceMarshalerFuncs)
FCFuncElement("ConvertToNative", StubHelpers::InterfaceMarshaler__ConvertToNative)
FCFuncElement("ConvertToManaged", StubHelpers::InterfaceMarshaler__ConvertToManaged)
- QCFuncElement("ClearNative", StubHelpers::InterfaceMarshaler__ClearNative)
FCFuncEnd()
FCFuncStart(gMngdSafeArrayMarshalerFuncs)
@@ -913,24 +678,6 @@ FCFuncEnd()
#endif // FEATURE_COMINTEROP
-#ifdef FEATURE_COMWRAPPERS
-FCFuncStart(gComWrappersFuncs)
- QCFuncElement("GetIUnknownImplInternal", ComWrappersNative::GetIUnknownImpl)
- QCFuncElement("TryGetOrCreateComInterfaceForObjectInternal", ComWrappersNative::TryGetOrCreateComInterfaceForObject)
- QCFuncElement("TryGetOrCreateObjectForComInstanceInternal", ComWrappersNative::TryGetOrCreateObjectForComInstance)
- QCFuncElement("SetGlobalInstanceRegisteredForMarshalling", GlobalComWrappersForMarshalling::SetGlobalInstanceRegisteredForMarshalling)
- QCFuncElement("SetGlobalInstanceRegisteredForTrackerSupport", GlobalComWrappersForTrackerSupport::SetGlobalInstanceRegisteredForTrackerSupport)
-FCFuncEnd()
-#endif // FEATURE_COMWRAPPERS
-
-#ifdef FEATURE_OBJCMARSHAL
-FCFuncStart(gObjCMarshalFuncs)
- QCFuncElement("TrySetGlobalMessageSendCallback", ObjCMarshalNative::TrySetGlobalMessageSendCallback)
- QCFuncElement("TryInitializeReferenceTracker", ObjCMarshalNative::TryInitializeReferenceTracker)
- QCFuncElement("CreateReferenceTrackingHandleInternal", ObjCMarshalNative::CreateReferenceTrackingHandle)
-FCFuncEnd()
-#endif // FEATURE_OBJCMARSHAL
-
FCFuncStart(gMngdRefCustomMarshalerFuncs)
FCFuncElement("CreateMarshaler", MngdRefCustomMarshaler::CreateMarshaler)
FCFuncElement("ConvertContentsToNative", MngdRefCustomMarshaler::ConvertContentsToNative)
@@ -992,44 +739,6 @@ FCFuncStart(gStreamFuncs)
FCFuncElement("HasOverriddenBeginEndWrite", StreamNative::HasOverriddenBeginEndWrite)
FCFuncEnd()
-
-#if defined(FEATURE_EVENTSOURCE_XPLAT)
-FCFuncStart(gEventLogger)
- QCFuncElement("IsEventSourceLoggingEnabled", XplatEventSourceLogger::IsEventSourceLoggingEnabled)
- QCFuncElement("LogEventSource", XplatEventSourceLogger::LogEventSource)
-FCFuncEnd()
-#endif // defined(FEATURE_EVENTSOURCE_XPLAT)
-
-#if defined(FEATURE_PERFTRACING)
-FCFuncStart(gNativeEventLogger)
- QCFuncElement("LogThreadPoolWorkerThreadStart", NativeEventLogger::LogThreadPoolWorkerThreadStart)
- QCFuncElement("LogThreadPoolWorkerThreadStop", NativeEventLogger::LogThreadPoolWorkerThreadStop)
- QCFuncElement("LogThreadPoolWorkerThreadWait", NativeEventLogger::LogThreadPoolWorkerThreadWait)
- QCFuncElement("LogThreadPoolWorkerThreadAdjustmentSample", NativeEventLogger::LogThreadPoolWorkerThreadAdjustmentSample)
- QCFuncElement("LogThreadPoolWorkerThreadAdjustmentAdjustment", NativeEventLogger::LogThreadPoolWorkerThreadAdjustmentAdjustment)
- QCFuncElement("LogThreadPoolWorkerThreadAdjustmentStats", NativeEventLogger::LogThreadPoolWorkerThreadAdjustmentStats)
- QCFuncElement("LogThreadPoolIOEnqueue", NativeEventLogger::LogThreadPoolIOEnqueue)
- QCFuncElement("LogThreadPoolIODequeue", NativeEventLogger::LogThreadPoolIODequeue)
- QCFuncElement("LogThreadPoolWorkingThreadCount", NativeEventLogger::LogThreadPoolWorkingThreadCount)
-FCFuncEnd()
-#endif // defined(FEATURE_PERFTRACING)
-
-#ifdef FEATURE_PERFTRACING
-FCFuncStart(gEventPipeInternalFuncs)
- QCFuncElement("Enable", EventPipeInternal::Enable)
- QCFuncElement("Disable", EventPipeInternal::Disable)
- QCFuncElement("GetSessionInfo", EventPipeInternal::GetSessionInfo)
- QCFuncElement("CreateProvider", EventPipeInternal::CreateProvider)
- QCFuncElement("DefineEvent", EventPipeInternal::DefineEvent)
- QCFuncElement("DeleteProvider", EventPipeInternal::DeleteProvider)
- QCFuncElement("EventActivityIdControl", EventPipeInternal::EventActivityIdControl)
- QCFuncElement("GetProvider", EventPipeInternal::GetProvider)
- QCFuncElement("WriteEventData", EventPipeInternal::WriteEventData)
- QCFuncElement("GetNextEvent", EventPipeInternal::GetNextEvent)
- QCFuncElement("GetWaitHandle", EventPipeInternal::GetWaitHandle)
-FCFuncEnd()
-#endif // FEATURE_PERFTRACING
-
FCFuncStart(gWeakReferenceFuncs)
FCFuncElement("Create", WeakReferenceNative::Create)
FCFuncElement("Finalize", WeakReferenceNative::Finalize)
@@ -1047,34 +756,6 @@ FCFuncStart(gWeakReferenceOfTFuncs)
FCFuncElement("IsTrackResurrection", WeakReferenceOfTNative::IsTrackResurrection)
FCFuncEnd()
-#ifdef TARGET_UNIX
-FCFuncStart(gPalKernel32Funcs)
- QCFuncElement("CloseHandle", CloseHandle)
- QCFuncElement("CreateEventEx", CreateEventExW)
- QCFuncElement("CreateMutexEx", CreateMutexExW)
- QCFuncElement("CreateSemaphoreEx", CreateSemaphoreExW)
- QCFuncElement("FormatMessage", FormatMessageW)
- QCFuncElement("FreeEnvironmentStringsW", FreeEnvironmentStringsW)
- QCFuncElement("GetEnvironmentStringsW", GetEnvironmentStringsW)
- QCFuncElement("GetEnvironmentVariable", GetEnvironmentVariableW)
- QCFuncElement("OpenEvent", OpenEventW)
- QCFuncElement("OpenMutex", OpenMutexW)
- QCFuncElement("OpenSemaphore", OpenSemaphoreW)
- QCFuncElement("OutputDebugString", OutputDebugStringW)
- QCFuncElement("ReleaseMutex", ReleaseMutex)
- QCFuncElement("ReleaseSemaphore", ReleaseSemaphore)
- QCFuncElement("ResetEvent", ResetEvent)
- QCFuncElement("SetEnvironmentVariable", SetEnvironmentVariableW)
- QCFuncElement("SetEvent", SetEvent)
-FCFuncEnd()
-#endif
-
-#if defined(TARGET_X86) || defined(TARGET_AMD64)
-FCFuncStart(gX86BaseFuncs)
- QCFuncElement("__cpuidex", SystemNative::X86BaseCpuId)
-FCFuncEnd()
-#endif // defined(TARGET_X86) || defined(TARGET_AMD64)
-
#ifdef FEATURE_COMINTEROP
//
@@ -1110,17 +791,11 @@ FCFuncEnd()
FCClassElement("ArgIterator", "System", gVarArgFuncs)
FCClassElement("Array", "System", gArrayFuncs)
-FCClassElement("Assembly", "System.Reflection", gAssemblyFuncs)
FCClassElement("AssemblyBuilder", "System.Reflection.Emit", gAssemblyBuilderFuncs)
-FCClassElement("AssemblyExtensions", "System.Reflection.Metadata", gAssemblyExtensionsFuncs)
FCClassElement("AssemblyLoadContext", "System.Runtime.Loader", gAssemblyLoadContextFuncs)
FCClassElement("AssemblyName", "System.Reflection", gAssemblyNameFuncs)
FCClassElement("Buffer", "System", gBufferFuncs)
-FCClassElement("CLRConfig", "System", gClrConfig)
FCClassElement("CastHelpers", "System.Runtime.CompilerServices", gCastHelpers)
-#ifdef FEATURE_COMWRAPPERS
-FCClassElement("ComWrappers", "System.Runtime.InteropServices", gComWrappersFuncs)
-#endif // FEATURE_COMWRAPPERS
FCClassElement("CompatibilitySwitch", "System.Runtime.Versioning", gCompatibilitySwitchFuncs)
FCClassElement("CustomAttribute", "System.Reflection", gCOMCustomAttributeFuncs)
FCClassElement("CustomAttributeEncodedArgument", "System.Reflection", gCustomAttributeEncodedArgument)
@@ -1129,11 +804,7 @@ FCClassElement("Delegate", "System", gDelegateFuncs)
FCClassElement("DependentHandle", "System.Runtime", gDependentHandleFuncs)
FCClassElement("Enum", "System", gEnumFuncs)
FCClassElement("Environment", "System", gEnvironmentFuncs)
-#if defined(FEATURE_PERFTRACING)
-FCClassElement("EventPipeInternal", "System.Diagnostics.Tracing", gEventPipeInternalFuncs)
-#endif // FEATURE_PERFTRACING
FCClassElement("Exception", "System", gExceptionFuncs)
-FCClassElement("FileLoadException", "System.IO", gFileLoadExceptionFuncs)
FCClassElement("GC", "System", gGCInterfaceFuncs)
FCClassElement("GCHandle", "System.Runtime.InteropServices", gGCHandleFuncs)
FCClassElement("GCSettings", "System.Runtime", gGCSettingsFuncs)
@@ -1145,19 +816,10 @@ FCClassElement("InterfaceMarshaler", "System.StubHelpers", gInterfaceMarshalerFu
#endif
FCClassElement("Interlocked", "System.Threading", gInterlockedFuncs)
FCClassElement("JitInfo", "System.Runtime", gJitInfoFuncs)
-#if TARGET_UNIX
-FCClassElement("Kernel32", "", gPalKernel32Funcs)
-#endif
-FCClassElement("LoaderAllocatorScout", "System.Reflection", gLoaderAllocatorFuncs)
-#ifdef TARGET_UNIX
-FCClassElement("LowLevelLifoSemaphore", "System.Threading", gLowLevelLifoSemaphoreFuncs)
-#endif
FCClassElement("Marshal", "System.Runtime.InteropServices", gInteropMarshalFuncs)
FCClassElement("Math", "System", gMathFuncs)
FCClassElement("MathF", "System", gMathFFuncs)
-FCClassElement("MdUtf8String", "System", gMdUtf8String)
FCClassElement("MetadataImport", "System.Reflection", gMetaDataImport)
-FCClassElement("MetadataUpdater", "System.Reflection.Metadata", gMetadataUpdaterFuncs)
FCClassElement("MissingMemberException", "System", gMissingMemberExceptionFuncs)
FCClassElement("MngdFixedArrayMarshaler", "System.StubHelpers", gMngdFixedArrayMarshalerFuncs)
FCClassElement("MngdNativeArrayMarshaler", "System.StubHelpers", gMngdNativeArrayMarshalerFuncs)
@@ -1165,13 +827,8 @@ FCClassElement("MngdRefCustomMarshaler", "System.StubHelpers", gMngdRefCustomMar
#ifdef FEATURE_COMINTEROP
FCClassElement("MngdSafeArrayMarshaler", "System.StubHelpers", gMngdSafeArrayMarshalerFuncs)
#endif // FEATURE_COMINTEROP
-FCClassElement("ModuleBuilder", "System.Reflection.Emit", gCOMModuleBuilderFuncs)
FCClassElement("ModuleHandle", "System", gCOMModuleHandleFuncs)
FCClassElement("Monitor", "System.Threading", gMonitorFuncs)
-FCClassElement("NativeLibrary", "System.Runtime.InteropServices", gInteropNativeLibraryFuncs)
-#if defined(FEATURE_PERFTRACING)
-FCClassElement("NativeRuntimeEventSource", "System.Diagnostics.Tracing", gNativeEventLogger)
-#endif //defined(FEATURE_PERFTRACING)
#ifdef FEATURE_COMINTEROP
FCClassElement("OAVariantLib", "Microsoft.Win32", gOAVariantFuncs)
#endif
@@ -1179,9 +836,6 @@ FCClassElement("Object", "System", gObjectFuncs)
#ifdef FEATURE_COMINTEROP
FCClassElement("ObjectMarshaler", "System.StubHelpers", gObjectMarshalerFuncs)
#endif
-#ifdef FEATURE_OBJCMARSHAL
-FCClassElement("ObjectiveCMarshal", "System.Runtime.InteropServices.ObjectiveC", gObjCMarshalFuncs)
-#endif // FEATURE_OBJCMARSHAL
FCClassElement("OverlappedData", "System.Threading", gOverlappedFuncs)
@@ -1194,7 +848,6 @@ FCClassElement("RuntimeMethodHandle", "System", gRuntimeMethodHandle)
FCClassElement("RuntimeModule", "System.Reflection", gCOMModuleFuncs)
FCClassElement("RuntimeType", "System", gSystem_RuntimeType)
FCClassElement("RuntimeTypeHandle", "System", gCOMTypeHandleFuncs)
-FCClassElement("SafeTypeNameParserHandle", "System", gSafeTypeNameParserHandle)
FCClassElement("Signature", "System", gSignatureNative)
FCClassElement("StackTrace", "System.Diagnostics", gDiagnosticsStackTrace)
@@ -1203,13 +856,8 @@ FCClassElement("String", "System", gStringFuncs)
FCClassElement("StubHelpers", "System.StubHelpers", gStubHelperFuncs)
FCClassElement("Thread", "System.Threading", gThreadFuncs)
FCClassElement("ThreadPool", "System.Threading", gThreadPoolFuncs)
-FCClassElement("TimerQueue", "System.Threading", gTimerFuncs)
FCClassElement("Type", "System", gSystem_Type)
-FCClassElement("TypeBuilder", "System.Reflection.Emit", gCOMClassWriter)
-FCClassElement("TypeLoadException", "System", gTypeLoadExceptionFuncs)
-FCClassElement("TypeNameParser", "System", gTypeNameParser)
FCClassElement("TypedReference", "System", gTypedReferenceFuncs)
-FCClassElement("UnmanagedThreadPoolWorkItem", "System.Threading", gUnmanagedThreadPoolWorkItemFuncs)
FCClassElement("ValueType", "System", gValueTypeFuncs)
#ifdef FEATURE_COMINTEROP
FCClassElement("Variant", "System", gVariantFuncs)
@@ -1217,19 +865,11 @@ FCClassElement("Variant", "System", gVariantFuncs)
FCClassElement("WaitHandle", "System.Threading", gWaitHandleFuncs)
FCClassElement("WeakReference", "System", gWeakReferenceFuncs)
FCClassElement("WeakReference`1", "System", gWeakReferenceOfTFuncs)
-#if defined(TARGET_X86) || defined(TARGET_AMD64)
-FCClassElement("X86Base", "System.Runtime.Intrinsics.X86", gX86BaseFuncs)
-#endif // defined(TARGET_X86) || defined(TARGET_AMD64)
-
-#if defined(FEATURE_EVENTSOURCE_XPLAT)
-FCClassElement("XplatEventLogger", "System.Diagnostics.Tracing", gEventLogger)
-#endif //defined(FEATURE_EVENTSOURCE_XPLAT)
#undef FCFuncElement
#undef FCFuncElementSig
#undef FCIntrinsic
#undef FCIntrinsicSig
-#undef QCFuncElement
#undef FCDynamic
#undef FCDynamicSig
#undef FCUnreferenced
diff --git a/src/coreclr/vm/eventpipeinternal.cpp b/src/coreclr/vm/eventpipeinternal.cpp
index 7097cb6208d34b..d759a1e0f1accc 100644
--- a/src/coreclr/vm/eventpipeinternal.cpp
+++ b/src/coreclr/vm/eventpipeinternal.cpp
@@ -11,7 +11,7 @@
#ifdef FEATURE_PERFTRACING
-UINT64 QCALLTYPE EventPipeInternal::Enable(
+extern "C" UINT64 QCALLTYPE EventPipeInternal_Enable(
__in_z LPCWSTR outputFile,
EventPipeSerializationFormat format,
UINT32 circularBufferSizeInMB,
@@ -51,7 +51,7 @@ UINT64 QCALLTYPE EventPipeInternal::Enable(
return sessionID;
}
-void QCALLTYPE EventPipeInternal::Disable(UINT64 sessionID)
+extern "C" void QCALLTYPE EventPipeInternal_Disable(UINT64 sessionID)
{
QCALL_CONTRACT;
@@ -60,7 +60,7 @@ void QCALLTYPE EventPipeInternal::Disable(UINT64 sessionID)
END_QCALL;
}
-bool QCALLTYPE EventPipeInternal::GetSessionInfo(UINT64 sessionID, EventPipeSessionInfo *pSessionInfo)
+extern "C" bool QCALLTYPE EventPipeInternal_GetSessionInfo(UINT64 sessionID, EventPipeSessionInfo *pSessionInfo)
{
QCALL_CONTRACT;
@@ -83,7 +83,7 @@ bool QCALLTYPE EventPipeInternal::GetSessionInfo(UINT64 sessionID, EventPipeSess
return retVal;
}
-INT_PTR QCALLTYPE EventPipeInternal::CreateProvider(
+extern "C" INT_PTR QCALLTYPE EventPipeInternal_CreateProvider(
__in_z LPCWSTR providerName,
EventPipeCallback pCallbackFunc)
{
@@ -100,7 +100,7 @@ INT_PTR QCALLTYPE EventPipeInternal::CreateProvider(
return reinterpret_cast(pProvider);
}
-INT_PTR QCALLTYPE EventPipeInternal::DefineEvent(
+extern "C" INT_PTR QCALLTYPE EventPipeInternal_DefineEvent(
INT_PTR provHandle,
UINT32 eventID,
__int64 keywords,
@@ -125,7 +125,7 @@ INT_PTR QCALLTYPE EventPipeInternal::DefineEvent(
return reinterpret_cast(pEvent);
}
-INT_PTR QCALLTYPE EventPipeInternal::GetProvider(__in_z LPCWSTR providerName)
+extern "C" INT_PTR QCALLTYPE EventPipeInternal_GetProvider(__in_z LPCWSTR providerName)
{
QCALL_CONTRACT;
@@ -140,7 +140,7 @@ INT_PTR QCALLTYPE EventPipeInternal::GetProvider(__in_z LPCWSTR providerName)
return reinterpret_cast(pProvider);
}
-void QCALLTYPE EventPipeInternal::DeleteProvider(INT_PTR provHandle)
+extern "C" void QCALLTYPE EventPipeInternal_DeleteProvider(INT_PTR provHandle)
{
QCALL_CONTRACT;
BEGIN_QCALL;
@@ -154,7 +154,7 @@ void QCALLTYPE EventPipeInternal::DeleteProvider(INT_PTR provHandle)
END_QCALL;
}
-int QCALLTYPE EventPipeInternal::EventActivityIdControl(uint32_t controlCode, GUID *pActivityId)
+extern "C" int QCALLTYPE EventPipeInternal_EventActivityIdControl(uint32_t controlCode, GUID *pActivityId)
{
QCALL_CONTRACT;
@@ -212,7 +212,7 @@ int QCALLTYPE EventPipeInternal::EventActivityIdControl(uint32_t controlCode, GU
return retVal;
}
-void QCALLTYPE EventPipeInternal::WriteEventData(
+extern "C" void QCALLTYPE EventPipeInternal_WriteEventData(
INT_PTR eventHandle,
EventData *pEventData,
UINT32 eventDataCount,
@@ -229,7 +229,7 @@ void QCALLTYPE EventPipeInternal::WriteEventData(
END_QCALL;
}
-bool QCALLTYPE EventPipeInternal::GetNextEvent(UINT64 sessionID, EventPipeEventInstanceData *pInstance)
+extern "C" bool QCALLTYPE EventPipeInternal_GetNextEvent(UINT64 sessionID, EventPipeEventInstanceData *pInstance)
{
QCALL_CONTRACT;
@@ -255,7 +255,7 @@ bool QCALLTYPE EventPipeInternal::GetNextEvent(UINT64 sessionID, EventPipeEventI
return pNextInstance != NULL;
}
-HANDLE QCALLTYPE EventPipeInternal::GetWaitHandle(UINT64 sessionID)
+extern "C" HANDLE QCALLTYPE EventPipeInternal_GetWaitHandle(UINT64 sessionID)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/eventpipeinternal.h b/src/coreclr/vm/eventpipeinternal.h
index acb52754a15e5e..33fdc0e64cd238 100644
--- a/src/coreclr/vm/eventpipeinternal.h
+++ b/src/coreclr/vm/eventpipeinternal.h
@@ -8,93 +8,87 @@
// TODO: Maybe we should move the other types that are used on PInvoke here?
-class EventPipeInternal
+enum class ActivityControlCode
{
-private:
- enum class ActivityControlCode
- {
- EVENT_ACTIVITY_CONTROL_GET_ID = 1,
- EVENT_ACTIVITY_CONTROL_SET_ID = 2,
- EVENT_ACTIVITY_CONTROL_CREATE_ID = 3,
- EVENT_ACTIVITY_CONTROL_GET_SET_ID = 4,
- EVENT_ACTIVITY_CONTROL_CREATE_SET_ID = 5
- };
-
- struct EventPipeEventInstanceData
- {
- void *ProviderID;
- unsigned int EventID;
- unsigned int ThreadID;
- LARGE_INTEGER TimeStamp;
- GUID ActivityId;
- GUID RelatedActivityId;
- const BYTE *Payload;
- unsigned int PayloadLength;
- };
-
- struct EventPipeSessionInfo
- {
- FILETIME StartTimeAsUTCFileTime;
- LARGE_INTEGER StartTimeStamp;
- LARGE_INTEGER TimeStampFrequency;
- };
-
-public:
- //!
- //! Sets the sampling rate and enables the event pipe for the specified configuration.
- //!
- static UINT64 QCALLTYPE Enable(
- __in_z LPCWSTR outputFile,
- EventPipeSerializationFormat format,
- UINT32 circularBufferSizeInMB,
- /* COR_PRF_EVENTPIPE_PROVIDER_CONFIG */ LPCVOID pProviders,
- UINT32 numProviders);
-
- //!
- //! Disables the specified session Id.
- //!
- static void QCALLTYPE Disable(UINT64 sessionID);
-
- static bool QCALLTYPE GetSessionInfo(UINT64 sessionID, EventPipeSessionInfo *pSessionInfo);
-
- static INT_PTR QCALLTYPE CreateProvider(
- __in_z LPCWSTR providerName,
- EventPipeCallback pCallbackFunc);
-
- static INT_PTR QCALLTYPE DefineEvent(
- INT_PTR provHandle,
- UINT32 eventID,
- __int64 keywords,
- UINT32 eventVersion,
- UINT32 level,
- void *pMetadata,
- UINT32 metadataLength);
-
- static INT_PTR QCALLTYPE GetProvider(
- __in_z LPCWSTR providerName);
-
- static void QCALLTYPE DeleteProvider(
- INT_PTR provHandle);
-
- static int QCALLTYPE EventActivityIdControl(
- uint32_t controlCode,
- GUID *pActivityId);
-
- static void QCALLTYPE WriteEventData(
- INT_PTR eventHandle,
- EventData *pEventData,
- UINT32 eventDataCount,
- LPCGUID pActivityId, LPCGUID pRelatedActivityId);
-
- static bool QCALLTYPE GetNextEvent(
- UINT64 sessionID,
- EventPipeEventInstanceData *pInstance);
-
- static HANDLE QCALLTYPE GetWaitHandle(
- UINT64 sessionID);
+ EVENT_ACTIVITY_CONTROL_GET_ID = 1,
+ EVENT_ACTIVITY_CONTROL_SET_ID = 2,
+ EVENT_ACTIVITY_CONTROL_CREATE_ID = 3,
+ EVENT_ACTIVITY_CONTROL_GET_SET_ID = 4,
+ EVENT_ACTIVITY_CONTROL_CREATE_SET_ID = 5
+};
+
+struct EventPipeEventInstanceData
+{
+ void *ProviderID;
+ unsigned int EventID;
+ unsigned int ThreadID;
+ LARGE_INTEGER TimeStamp;
+ GUID ActivityId;
+ GUID RelatedActivityId;
+ const BYTE *Payload;
+ unsigned int PayloadLength;
+};
+struct EventPipeSessionInfo
+{
+ FILETIME StartTimeAsUTCFileTime;
+ LARGE_INTEGER StartTimeStamp;
+ LARGE_INTEGER TimeStampFrequency;
};
+//!
+//! Sets the sampling rate and enables the event pipe for the specified configuration.
+//!
+extern "C" UINT64 QCALLTYPE EventPipeInternal_Enable(
+ __in_z LPCWSTR outputFile,
+ EventPipeSerializationFormat format,
+ UINT32 circularBufferSizeInMB,
+ /* COR_PRF_EVENTPIPE_PROVIDER_CONFIG */ LPCVOID pProviders,
+ UINT32 numProviders);
+
+//!
+//! Disables the specified session Id.
+//!
+extern "C" void QCALLTYPE EventPipeInternal_Disable(UINT64 sessionID);
+
+extern "C" bool QCALLTYPE EventPipeInternal_GetSessionInfo(UINT64 sessionID, EventPipeSessionInfo *pSessionInfo);
+
+extern "C" INT_PTR QCALLTYPE EventPipeInternal_CreateProvider(
+ __in_z LPCWSTR providerName,
+ EventPipeCallback pCallbackFunc);
+
+extern "C" INT_PTR QCALLTYPE EventPipeInternal_DefineEvent(
+ INT_PTR provHandle,
+ UINT32 eventID,
+ __int64 keywords,
+ UINT32 eventVersion,
+ UINT32 level,
+ void *pMetadata,
+ UINT32 metadataLength);
+
+extern "C" INT_PTR QCALLTYPE EventPipeInternal_GetProvider(
+ __in_z LPCWSTR providerName);
+
+extern "C" void QCALLTYPE EventPipeInternal_DeleteProvider(
+ INT_PTR provHandle);
+
+extern "C" int QCALLTYPE EventPipeInternal_EventActivityIdControl(
+ uint32_t controlCode,
+ GUID *pActivityId);
+
+extern "C" void QCALLTYPE EventPipeInternal_WriteEventData(
+ INT_PTR eventHandle,
+ EventData *pEventData,
+ UINT32 eventDataCount,
+ LPCGUID pActivityId, LPCGUID pRelatedActivityId);
+
+extern "C" bool QCALLTYPE EventPipeInternal_GetNextEvent(
+ UINT64 sessionID,
+ EventPipeEventInstanceData *pInstance);
+
+extern "C" HANDLE QCALLTYPE EventPipeInternal_GetWaitHandle(
+ UINT64 sessionID);
+
#endif // FEATURE_PERFTRACING
#endif // __EVENTPIPEINTERNAL_H__
diff --git a/src/coreclr/vm/excep.cpp b/src/coreclr/vm/excep.cpp
index d3b340eb3e9f7f..2467c359fb7210 100644
--- a/src/coreclr/vm/excep.cpp
+++ b/src/coreclr/vm/excep.cpp
@@ -5782,7 +5782,7 @@ static BOOL GetManagedFormatStringForResourceID(CCompRC::ResourceCategory eCateg
//==========================================================================
// Private helper for TypeLoadException.
//==========================================================================
-void QCALLTYPE GetTypeLoadExceptionMessage(UINT32 resId, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE GetTypeLoadExceptionMessage(UINT32 resId, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -5801,7 +5801,7 @@ void QCALLTYPE GetTypeLoadExceptionMessage(UINT32 resId, QCall::StringHandleOnSt
// Private helper for FileLoadException and FileNotFoundException.
//==========================================================================
-void QCALLTYPE GetFileLoadExceptionMessage(UINT32 hr, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE GetFileLoadExceptionMessage(UINT32 hr, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -5817,7 +5817,7 @@ void QCALLTYPE GetFileLoadExceptionMessage(UINT32 hr, QCall::StringHandleOnStack
//==========================================================================
// Private helper for FileLoadException and FileNotFoundException.
//==========================================================================
-void QCALLTYPE FileLoadException_GetMessageForHR(UINT32 hresult, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE FileLoadException_GetMessageForHR(UINT32 hresult, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/interoplibinterface.h b/src/coreclr/vm/interoplibinterface.h
index 367b419e2a3342..ad5c3c05302b53 100644
--- a/src/coreclr/vm/interoplibinterface.h
+++ b/src/coreclr/vm/interoplibinterface.h
@@ -25,29 +25,6 @@ class ComWrappersNative
{
public:
static const INT64 InvalidWrapperId = 0;
-
-public: // Native QCalls for the abstract ComWrappers managed type.
- static void QCALLTYPE GetIUnknownImpl(
- _Out_ void** fpQueryInterface,
- _Out_ void** fpAddRef,
- _Out_ void** fpRelease);
-
- static BOOL QCALLTYPE TryGetOrCreateComInterfaceForObject(
- _In_ QCall::ObjectHandleOnStack comWrappersImpl,
- _In_ INT64 wrapperId,
- _In_ QCall::ObjectHandleOnStack instance,
- _In_ INT32 flags,
- _Outptr_ void** wrapperRaw);
-
- static BOOL QCALLTYPE TryGetOrCreateObjectForComInstance(
- _In_ QCall::ObjectHandleOnStack comWrappersImpl,
- _In_ INT64 wrapperId,
- _In_ void* externalComObject,
- _In_opt_ void* innerMaybe,
- _In_ INT32 flags,
- _In_ QCall::ObjectHandleOnStack wrapperMaybe,
- _Inout_ QCall::ObjectHandleOnStack retValue);
-
public: // Lifetime management for COM Wrappers
static void DestroyManagedObjectComWrapper(_In_ void* wrapper);
static void DestroyExternalComObjectContext(_In_ void* context);
@@ -65,15 +42,38 @@ class ComWrappersNative
static void OnFullGCFinished();
static void AfterRefCountedHandleCallbacks();
};
+// Native QCalls for the abstract ComWrappers managed type.
+extern "C" void QCALLTYPE ComWrappers_GetIUnknownImpl(
+ _Out_ void** fpQueryInterface,
+ _Out_ void** fpAddRef,
+ _Out_ void** fpRelease);
+
+extern "C" BOOL QCALLTYPE ComWrappers_TryGetOrCreateComInterfaceForObject(
+ _In_ QCall::ObjectHandleOnStack comWrappersImpl,
+ _In_ INT64 wrapperId,
+ _In_ QCall::ObjectHandleOnStack instance,
+ _In_ INT32 flags,
+ _Outptr_ void** wrapperRaw);
+
+extern "C" BOOL QCALLTYPE ComWrappers_TryGetOrCreateObjectForComInstance(
+ _In_ QCall::ObjectHandleOnStack comWrappersImpl,
+ _In_ INT64 wrapperId,
+ _In_ void* externalComObject,
+ _In_opt_ void* innerMaybe,
+ _In_ INT32 flags,
+ _In_ QCall::ObjectHandleOnStack wrapperMaybe,
+ _Inout_ QCall::ObjectHandleOnStack retValue);
+// Native QCall for the ComWrappers managed type to indicate a global instance
+// is registered for marshalling. This should be set if the private static member
+// representing the global instance for marshalling on ComWrappers is non-null.
+extern "C" void QCALLTYPE ComWrappers_SetGlobalInstanceRegisteredForMarshalling(_In_ INT64 id);
+// Native QCall for the ComWrappers managed type to indicate a global instance
+// is registered for tracker support. This should be set if the private static member
+// representing the global instance for tracker support on ComWrappers is non-null.
+extern "C" void QCALLTYPE ComWrappers_SetGlobalInstanceRegisteredForTrackerSupport(_In_ INT64 id);
class GlobalComWrappersForMarshalling
{
-public:
- // Native QCall for the ComWrappers managed type to indicate a global instance
- // is registered for marshalling. This should be set if the private static member
- // representing the global instance for marshalling on ComWrappers is non-null.
- static void QCALLTYPE SetGlobalInstanceRegisteredForMarshalling(_In_ INT64 id);
-
public: // Functions operating on a registered global instance for marshalling
static bool IsRegisteredInstance(_In_ INT64 id);
@@ -87,14 +87,9 @@ class GlobalComWrappersForMarshalling
_Out_ OBJECTREF* objRef);
};
+
class GlobalComWrappersForTrackerSupport
{
-public:
- // Native QCall for the ComWrappers managed type to indicate a global instance
- // is registered for tracker support. This should be set if the private static member
- // representing the global instance for tracker support on ComWrappers is non-null.
- static void QCALLTYPE SetGlobalInstanceRegisteredForTrackerSupport(_In_ INT64 id);
-
public: // Functions operating on a registered global instance for tracker support
static bool IsRegisteredInstance(_In_ INT64 id);
@@ -129,21 +124,6 @@ class ObjCMarshalNative
Last = MessageSendFunction_MsgSendSuperStret,
};
-public: // static
- static BOOL QCALLTYPE TryInitializeReferenceTracker(
- _In_ BeginEndCallback beginEndCallback,
- _In_ IsReferencedCallback isReferencedCallback,
- _In_ EnteredFinalizationCallback trackedObjectEnteredFinalization);
-
- static void* QCALLTYPE CreateReferenceTrackingHandle(
- _In_ QCall::ObjectHandleOnStack obj,
- _Out_ int* memInSizeT,
- _Outptr_ void** mem);
-
- static BOOL QCALLTYPE TrySetGlobalMessageSendCallback(
- _In_ MessageSendFunction msgSendFunction,
- _In_ void* fptr);
-
public: // Instance inspection
static bool IsTrackedReference(_In_ OBJECTREF object, _Out_ bool* isReferenced);
@@ -164,6 +144,20 @@ class ObjCMarshalNative
static void OnEnteredFinalizerQueue(_In_ OBJECTREF object);
};
+
+extern "C" BOOL QCALLTYPE ObjCMarshal_TryInitializeReferenceTracker(
+ _In_ ObjCMarshalNative::BeginEndCallback beginEndCallback,
+ _In_ ObjCMarshalNative::IsReferencedCallback isReferencedCallback,
+ _In_ ObjCMarshalNative::EnteredFinalizationCallback trackedObjectEnteredFinalization);
+
+extern "C" void* QCALLTYPE ObjCMarshal_CreateReferenceTrackingHandle(
+ _In_ QCall::ObjectHandleOnStack obj,
+ _Out_ int* memInSizeT,
+ _Outptr_ void** mem);
+
+extern "C" BOOL QCALLTYPE ObjCMarshal_TrySetGlobalMessageSendCallback(
+ _In_ ObjCMarshalNative::MessageSendFunction msgSendFunction,
+ _In_ void* fptr);
#endif // FEATURE_OBJCMARSHAL
class Interop
diff --git a/src/coreclr/vm/interoplibinterface_comwrappers.cpp b/src/coreclr/vm/interoplibinterface_comwrappers.cpp
index 288e70618a0037..5e73d97e4a7f83 100644
--- a/src/coreclr/vm/interoplibinterface_comwrappers.cpp
+++ b/src/coreclr/vm/interoplibinterface_comwrappers.cpp
@@ -1418,7 +1418,7 @@ namespace InteropLibImports
}
}
-BOOL QCALLTYPE ComWrappersNative::TryGetOrCreateComInterfaceForObject(
+extern "C" BOOL QCALLTYPE ComWrappers_TryGetOrCreateComInterfaceForObject(
_In_ QCall::ObjectHandleOnStack comWrappersImpl,
_In_ INT64 wrapperId,
_In_ QCall::ObjectHandleOnStack instance,
@@ -1449,7 +1449,7 @@ BOOL QCALLTYPE ComWrappersNative::TryGetOrCreateComInterfaceForObject(
return (success ? TRUE : FALSE);
}
-BOOL QCALLTYPE ComWrappersNative::TryGetOrCreateObjectForComInstance(
+extern "C" BOOL QCALLTYPE ComWrappers_TryGetOrCreateObjectForComInstance(
_In_ QCall::ObjectHandleOnStack comWrappersImpl,
_In_ INT64 wrapperId,
_In_ void* ext,
@@ -1505,7 +1505,7 @@ BOOL QCALLTYPE ComWrappersNative::TryGetOrCreateObjectForComInstance(
return (success ? TRUE : FALSE);
}
-void QCALLTYPE ComWrappersNative::GetIUnknownImpl(
+extern "C" void QCALLTYPE ComWrappers_GetIUnknownImpl(
_Out_ void** fpQueryInterface,
_Out_ void** fpAddRef,
_Out_ void** fpRelease)
@@ -1608,7 +1608,7 @@ void ComWrappersNative::MarkWrapperAsComActivated(_In_ IUnknown* wrapperMaybe)
_ASSERTE(SUCCEEDED(hr) || hr == E_INVALIDARG);
}
-void QCALLTYPE GlobalComWrappersForMarshalling::SetGlobalInstanceRegisteredForMarshalling(INT64 id)
+extern "C" void QCALLTYPE ComWrappers_SetGlobalInstanceRegisteredForMarshalling(INT64 id)
{
QCALL_CONTRACT_NO_GC_TRANSITION;
@@ -1701,7 +1701,7 @@ bool GlobalComWrappersForMarshalling::TryGetOrCreateObjectForComInstance(
}
}
-void QCALLTYPE GlobalComWrappersForTrackerSupport::SetGlobalInstanceRegisteredForTrackerSupport(INT64 id)
+extern "C" void QCALLTYPE ComWrappers_SetGlobalInstanceRegisteredForTrackerSupport(INT64 id)
{
QCALL_CONTRACT_NO_GC_TRANSITION;
diff --git a/src/coreclr/vm/interoplibinterface_objc.cpp b/src/coreclr/vm/interoplibinterface_objc.cpp
index 92f07759123c8b..115d8ac66fb2f5 100644
--- a/src/coreclr/vm/interoplibinterface_objc.cpp
+++ b/src/coreclr/vm/interoplibinterface_objc.cpp
@@ -23,10 +23,10 @@ namespace
ObjCMarshalNative::EnteredFinalizationCallback g_TrackedObjectEnteredFinalizationCallback;
}
-BOOL QCALLTYPE ObjCMarshalNative::TryInitializeReferenceTracker(
- _In_ BeginEndCallback beginEndCallback,
- _In_ IsReferencedCallback isReferencedCallback,
- _In_ EnteredFinalizationCallback trackedObjectEnteredFinalization)
+extern "C" BOOL QCALLTYPE ObjCMarshal_TryInitializeReferenceTracker(
+ _In_ ObjCMarshalNative::BeginEndCallback beginEndCallback,
+ _In_ ObjCMarshalNative::IsReferencedCallback isReferencedCallback,
+ _In_ ObjCMarshalNative::EnteredFinalizationCallback trackedObjectEnteredFinalization)
{
QCALL_CONTRACT;
_ASSERTE(beginEndCallback != NULL
@@ -57,7 +57,7 @@ BOOL QCALLTYPE ObjCMarshalNative::TryInitializeReferenceTracker(
return success;
}
-void* QCALLTYPE ObjCMarshalNative::CreateReferenceTrackingHandle(
+extern "C" void* QCALLTYPE ObjCMarshal_CreateReferenceTrackingHandle(
_In_ QCall::ObjectHandleOnStack obj,
_Out_ int* memInSizeT,
_Outptr_ void** mem)
@@ -153,8 +153,8 @@ namespace
}
}
-BOOL QCALLTYPE ObjCMarshalNative::TrySetGlobalMessageSendCallback(
- _In_ MessageSendFunction msgSendFunction,
+extern "C" BOOL QCALLTYPE ObjCMarshal_TrySetGlobalMessageSendCallback(
+ _In_ ObjCMarshalNative::MessageSendFunction msgSendFunction,
_In_ void* fptr)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/loaderallocator.cpp b/src/coreclr/vm/loaderallocator.cpp
index d92fba38536e51..5b5c9d142c89db 100644
--- a/src/coreclr/vm/loaderallocator.cpp
+++ b/src/coreclr/vm/loaderallocator.cpp
@@ -633,14 +633,8 @@ void LoaderAllocator::GCLoaderAllocators(LoaderAllocator* pOriginalLoaderAllocat
//---------------------------------------------------------------------------------------
//
//static
-BOOL QCALLTYPE LoaderAllocator::Destroy(QCall::LoaderAllocatorHandle pLoaderAllocator)
+BOOL LoaderAllocator::Destroy(QCall::LoaderAllocatorHandle pLoaderAllocator)
{
- QCALL_CONTRACT;
-
- BOOL ret = FALSE;
-
- BEGIN_QCALL;
-
if (ObjectHandleIsNull(pLoaderAllocator->GetLoaderAllocatorObjectHandle()))
{
STRESS_LOG1(LF_CLASSLOADER, LL_INFO100, "Begin LoaderAllocator::Destroy for loader allocator %p\n", reinterpret_cast(static_cast(pLoaderAllocator)));
@@ -705,13 +699,26 @@ BOOL QCALLTYPE LoaderAllocator::Destroy(QCall::LoaderAllocatorHandle pLoaderAllo
}
STRESS_LOG1(LF_CLASSLOADER, LL_INFO100, "End LoaderAllocator::Destroy for loader allocator %p\n", reinterpret_cast(static_cast(pLoaderAllocator)));
- ret = TRUE;
+ return TRUE;
}
+ return FALSE;
+} // LoaderAllocator::Destroy
+
+extern "C" BOOL QCALLTYPE LoaderAllocator_Destroy(QCall::LoaderAllocatorHandle pLoaderAllocator)
+{
+ QCALL_CONTRACT;
+
+ BOOL ret = FALSE;
+
+ BEGIN_QCALL;
+
+ ret = LoaderAllocator::Destroy(pLoaderAllocator);
+
END_QCALL;
return ret;
-} // LoaderAllocator::Destroy
+}
#define MAX_LOADERALLOCATOR_HANDLE 0x40000000
diff --git a/src/coreclr/vm/loaderallocator.hpp b/src/coreclr/vm/loaderallocator.hpp
index 19ac56c9632df1..f4e5587e24a316 100644
--- a/src/coreclr/vm/loaderallocator.hpp
+++ b/src/coreclr/vm/loaderallocator.hpp
@@ -568,7 +568,7 @@ class LoaderAllocator
return m_nGCCount;
}
- static BOOL QCALLTYPE Destroy(QCall::LoaderAllocatorHandle pLoaderAllocator);
+ static BOOL Destroy(QCall::LoaderAllocatorHandle pLoaderAllocator);
//****************************************************************************************
// Methods to retrieve a pointer to the COM+ string STRINGREF for a string constant.
@@ -661,6 +661,8 @@ class LoaderAllocator
typedef VPTR(LoaderAllocator) PTR_LoaderAllocator;
+extern "C" BOOL QCALLTYPE LoaderAllocator_Destroy(QCall::LoaderAllocatorHandle pLoaderAllocator);
+
class GlobalLoaderAllocator : public LoaderAllocator
{
friend class LoaderAllocator;
diff --git a/src/coreclr/vm/marshalnative.cpp b/src/coreclr/vm/marshalnative.cpp
index af421775118490..4056aaced2e619 100644
--- a/src/coreclr/vm/marshalnative.cpp
+++ b/src/coreclr/vm/marshalnative.cpp
@@ -45,7 +45,7 @@
// Prelink
// Does advance loading of an N/Direct library
-VOID QCALLTYPE MarshalNative::Prelink(MethodDesc * pMD)
+extern "C" VOID QCALLTYPE MarshalNative_Prelink(MethodDesc * pMD)
{
QCALL_CONTRACT;
@@ -72,7 +72,7 @@ VOID QCALLTYPE MarshalNative::Prelink(MethodDesc * pMD)
// IsBuiltInComSupported
// Built-in COM support is only checked from the native side to ensure the runtime
// is in a consistent state
-BOOL QCALLTYPE MarshalNative::IsBuiltInComSupported()
+extern "C" BOOL QCALLTYPE MarshalNative_IsBuiltInComSupported()
{
QCALL_CONTRACT;
@@ -434,11 +434,11 @@ namespace
}
}
-MarshalNative::IsInCooperativeGCMode_fn QCALLTYPE MarshalNative::GetIsInCooperativeGCModeFunctionPointer()
+extern "C" IsInCooperativeGCMode_fn QCALLTYPE MarshalNative_GetIsInCooperativeGCModeFunctionPointer()
{
QCALL_CONTRACT;
- MarshalNative::IsInCooperativeGCMode_fn ret = NULL;
+ IsInCooperativeGCMode_fn ret = NULL;
BEGIN_QCALL;
@@ -1364,7 +1364,7 @@ int MarshalNative::GetComSlotInfo(MethodTable *pMT, MethodTable **ppDefItfMT)
}
}
-void QCALLTYPE MarshalNative::GetTypeFromCLSID(REFCLSID clsid, PCWSTR wszServer, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE MarshalNative_GetTypeFromCLSID(REFCLSID clsid, PCWSTR wszServer, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/marshalnative.h b/src/coreclr/vm/marshalnative.h
index 8a3615294ffc6a..33f6fd5dc374b0 100644
--- a/src/coreclr/vm/marshalnative.h
+++ b/src/coreclr/vm/marshalnative.h
@@ -19,8 +19,6 @@
class MarshalNative
{
public:
- static VOID QCALLTYPE Prelink(MethodDesc * pMD);
- static BOOL QCALLTYPE IsBuiltInComSupported();
//====================================================================
// These methods convert between an HR and and a managed exception.
@@ -49,11 +47,6 @@ class MarshalNative
static FCDECL2(Object*, GetDelegateForFunctionPointerInternal, LPVOID FPtr, ReflectClassBaseObject* refTypeUNSAFE);
static FCDECL1(LPVOID, GetFunctionPointerForDelegateInternal, Object* refDelegateUNSAFE);
-#ifdef _DEBUG
- using IsInCooperativeGCMode_fn = BOOL(STDMETHODCALLTYPE*)(void);
- static IsInCooperativeGCMode_fn QCALLTYPE GetIsInCooperativeGCModeFunctionPointer();
-#endif
-
#ifdef FEATURE_COMINTEROP
//====================================================================
// return the IUnknown* for an Object
@@ -136,11 +129,6 @@ class MarshalNative
static FCDECL2(void, ChangeWrapperHandleStrength, Object* orefUNSAFE, CLR_BOOL fIsWeak);
- //====================================================================
- // Create type for given CLSID.
- //====================================================================
- static void QCALLTYPE GetTypeFromCLSID(REFCLSID clsid, PCWSTR wszServer, QCall::ObjectHandleOnStack retType);
-
private:
static int GetComSlotInfo(MethodTable *pMT, MethodTable **ppDefItfMT);
#endif // FEATURE_COMINTEROP
@@ -150,4 +138,19 @@ class MarshalNative
// throwing an exception if not.
void ValidatePinnedObject(OBJECTREF obj);
+extern "C" VOID QCALLTYPE MarshalNative_Prelink(MethodDesc * pMD);
+extern "C" BOOL QCALLTYPE MarshalNative_IsBuiltInComSupported();
+
+#ifdef _DEBUG
+using IsInCooperativeGCMode_fn = BOOL(STDMETHODCALLTYPE*)(void);
+extern "C" IsInCooperativeGCMode_fn QCALLTYPE MarshalNative_GetIsInCooperativeGCModeFunctionPointer();
+#endif
+
+#ifdef FEATURE_COMINTEROP
+//====================================================================
+// Create type for given CLSID.
+//====================================================================
+extern "C" void QCALLTYPE MarshalNative_GetTypeFromCLSID(REFCLSID clsid, PCWSTR wszServer, QCall::ObjectHandleOnStack retType);
+#endif
+
#endif
diff --git a/src/coreclr/vm/method.hpp b/src/coreclr/vm/method.hpp
index cdd50fc038a727..44818d14da1eed 100644
--- a/src/coreclr/vm/method.hpp
+++ b/src/coreclr/vm/method.hpp
@@ -2824,23 +2824,6 @@ class NDirectMethodDesc : public MethodDesc
return (ndirect.m_wFlags & kNativeNoMangle) != 0;
}
-
- DWORD GetECallID() const
- {
- LIMITED_METHOD_CONTRACT;
-
- _ASSERTE(IsQCall());
- return ndirect.m_dwECallID;
- }
-
- void SetECallID(DWORD dwID)
- {
- LIMITED_METHOD_CONTRACT;
-
- _ASSERTE(IsQCall());
- ndirect.m_dwECallID = dwID;
- }
-
PTR_CUTF8 GetLibNameRaw()
{
LIMITED_METHOD_DAC_CONTRACT;
diff --git a/src/coreclr/vm/multicorejit.cpp b/src/coreclr/vm/multicorejit.cpp
index e66e6e39d8f498..656c7744066b02 100644
--- a/src/coreclr/vm/multicorejit.cpp
+++ b/src/coreclr/vm/multicorejit.cpp
@@ -1551,7 +1551,7 @@ DWORD MulticoreJitManager::EncodeModuleHelper(void * pModuleContext, Module * pR
// wszProfile - profile name
// ptrNativeAssemblyBinder - the binding context
//
-void QCALLTYPE MultiCoreJITNative::InternalStartProfile(__in_z LPCWSTR wszProfile, INT_PTR ptrNativeAssemblyBinder)
+extern "C" void QCALLTYPE MultiCoreJIT_InternalStartProfile(__in_z LPCWSTR wszProfile, INT_PTR ptrNativeAssemblyBinder)
{
QCALL_CONTRACT;
@@ -1570,7 +1570,7 @@ void QCALLTYPE MultiCoreJITNative::InternalStartProfile(__in_z LPCWSTR wszProfil
}
-void QCALLTYPE MultiCoreJITNative::InternalSetProfileRoot(__in_z LPCWSTR wszProfilePath)
+extern "C" void QCALLTYPE MultiCoreJIT_InternalSetProfileRoot(__in_z LPCWSTR wszProfilePath)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/multicorejit.h b/src/coreclr/vm/multicorejit.h
index 4f2b074b714f84..7faff54d9485c7 100644
--- a/src/coreclr/vm/multicorejit.h
+++ b/src/coreclr/vm/multicorejit.h
@@ -311,14 +311,9 @@ class MulticoreJitManager
};
-// For ecall.cpp
+// For qcallentrypoints.cpp
-class MultiCoreJITNative
-{
-public:
- static void QCALLTYPE InternalSetProfileRoot(__in_z LPCWSTR directoryPath);
-
- static void QCALLTYPE InternalStartProfile(__in_z LPCWSTR wszProfile, INT_PTR ptrNativeAssemblyBinder);
-};
+extern "C" void QCALLTYPE MultiCoreJIT_InternalSetProfileRoot(__in_z LPCWSTR directoryPath);
+extern "C" void QCALLTYPE MultiCoreJIT_InternalStartProfile(__in_z LPCWSTR wszProfile, INT_PTR ptrNativeAssemblyBinder);
#endif // __MULTICORE_JIT_H__
diff --git a/src/coreclr/vm/nativeeventsource.cpp b/src/coreclr/vm/nativeeventsource.cpp
index bdc6d97e6504d9..45550259079ee0 100644
--- a/src/coreclr/vm/nativeeventsource.cpp
+++ b/src/coreclr/vm/nativeeventsource.cpp
@@ -13,7 +13,7 @@
#if defined(FEATURE_EVENTSOURCE_XPLAT)
-void QCALLTYPE XplatEventSourceLogger::LogEventSource(__in_z int eventID, __in_z LPCWSTR eventName, __in_z LPCWSTR eventSourceName, __in_z LPCWSTR payload)
+extern "C" void QCALLTYPE LogEventSource(__in_z int eventID, __in_z LPCWSTR eventName, __in_z LPCWSTR eventSourceName, __in_z LPCWSTR payload)
{
QCALL_CONTRACT;
BEGIN_QCALL;
@@ -21,7 +21,7 @@ void QCALLTYPE XplatEventSourceLogger::LogEventSource(__in_z int eventID, __in_z
END_QCALL;
}
-BOOL QCALLTYPE XplatEventSourceLogger::IsEventSourceLoggingEnabled()
+extern "C" BOOL QCALLTYPE IsEventSourceLoggingEnabled()
{
QCALL_CONTRACT;
@@ -41,10 +41,10 @@ BOOL QCALLTYPE XplatEventSourceLogger::IsEventSourceLoggingEnabled()
// These are native QCalls that call into corresponding FireEtw* events for events that want to be emitted from the managed
// side using NativeRuntimeEventSource.
// You need to add them to src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/XplatEventLogger.cs and
-// change genRuntimeEventSources.py script to not emit the body that throws NotImplementedException for the event that
+// change genRuntimeEventSources.py script to not emit the body that throws NotImplementedException for the event that
// want to be fired from managed code.
// See https://github.com/dotnet/runtime/pull/47829 for an example of how to do this.
-void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadStart(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID)
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadStart(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID)
{
QCALL_CONTRACT;
BEGIN_QCALL;
@@ -54,7 +54,7 @@ void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadStart(__in_z uint act
END_QCALL;
}
-void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadStop(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID)
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadStop(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID)
{
QCALL_CONTRACT;
BEGIN_QCALL;
@@ -64,7 +64,7 @@ void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadStop(__in_z uint acti
END_QCALL;
}
-void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadWait(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID)
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadWait(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID)
{
QCALL_CONTRACT;
BEGIN_QCALL;
@@ -74,7 +74,7 @@ void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadWait(__in_z uint acti
END_QCALL;
}
-void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadAdjustmentSample(__in_z double throughput, __in_z short clrInstanceID)
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadAdjustmentSample(__in_z double throughput, __in_z short clrInstanceID)
{
QCALL_CONTRACT;
BEGIN_QCALL;
@@ -84,17 +84,17 @@ void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadAdjustmentSample(__in
END_QCALL;
}
-void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadAdjustmentAdjustment(__in_z double averageThroughput, __in_z uint newWorkerThreadCount, __in_z uint reason, __in_z short clrInstanceID)
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadAdjustmentAdjustment(__in_z double averageThroughput, __in_z uint newWorkerThreadCount, __in_z uint reason, __in_z short clrInstanceID)
{
QCALL_CONTRACT;
BEGIN_QCALL;
FireEtwThreadPoolWorkerThreadAdjustmentAdjustment(averageThroughput, newWorkerThreadCount, reason, clrInstanceID);
-
+
END_QCALL;
}
-void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadAdjustmentStats(__in_z double duration, __in_z double throughput, __in_z double threadWave, __in_z double throughputWave, __in_z double throughputErrorEstimate, __in_z double AverageThroughputErrorEstimate, __in_z double ThroughputRatio, __in_z double confidence, __in_z double newControlSetting, __in_z short newThreadWaveMagnitude, __in_z short ClrInstanceID)
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadAdjustmentStats(__in_z double duration, __in_z double throughput, __in_z double threadWave, __in_z double throughputWave, __in_z double throughputErrorEstimate, __in_z double AverageThroughputErrorEstimate, __in_z double ThroughputRatio, __in_z double confidence, __in_z double newControlSetting, __in_z short newThreadWaveMagnitude, __in_z short ClrInstanceID)
{
QCALL_CONTRACT;
BEGIN_QCALL;
@@ -104,7 +104,7 @@ void QCALLTYPE NativeEventLogger::LogThreadPoolWorkerThreadAdjustmentStats(__in_
END_QCALL;
}
-void QCALLTYPE NativeEventLogger::LogThreadPoolIOEnqueue(__in_z void* nativeOverlapped, __in_z void* overlapped, __in_z bool multiDequeues, __in_z short ClrInstanceID)
+extern "C" void QCALLTYPE LogThreadPoolIOEnqueue(__in_z void* nativeOverlapped, __in_z void* overlapped, __in_z bool multiDequeues, __in_z short ClrInstanceID)
{
QCALL_CONTRACT;
BEGIN_QCALL;
@@ -114,7 +114,7 @@ void QCALLTYPE NativeEventLogger::LogThreadPoolIOEnqueue(__in_z void* nativeOver
END_QCALL;
}
-void QCALLTYPE NativeEventLogger::LogThreadPoolIODequeue(__in_z void* nativeOverlapped, __in_z void* overlapped, __in_z short ClrInstanceID)
+extern "C" void QCALLTYPE LogThreadPoolIODequeue(__in_z void* nativeOverlapped, __in_z void* overlapped, __in_z short ClrInstanceID)
{
QCALL_CONTRACT;
BEGIN_QCALL;
@@ -124,7 +124,7 @@ void QCALLTYPE NativeEventLogger::LogThreadPoolIODequeue(__in_z void* nativeOver
END_QCALL;
}
-void QCALLTYPE NativeEventLogger::LogThreadPoolWorkingThreadCount(__in_z uint count, __in_z short ClrInstanceID)
+extern "C" void QCALLTYPE LogThreadPoolWorkingThreadCount(__in_z uint count, __in_z short ClrInstanceID)
{
QCALL_CONTRACT;
BEGIN_QCALL;
diff --git a/src/coreclr/vm/nativeeventsource.h b/src/coreclr/vm/nativeeventsource.h
index 7d1826bba308cc..34313b04bcc6e1 100644
--- a/src/coreclr/vm/nativeeventsource.h
+++ b/src/coreclr/vm/nativeeventsource.h
@@ -15,28 +15,17 @@
#include "qcall.h"
#if defined(FEATURE_PERFTRACING)
-class XplatEventSourceLogger
-{
-public:
- static void QCALLTYPE LogEventSource(__in_z int eventID, __in_z LPCWSTR eventName, __in_z LPCWSTR eventSourceName, __in_z LPCWSTR payload);
- static BOOL QCALLTYPE IsEventSourceLoggingEnabled();
-};
-#endif //defined(FEATURE_PERFTRACING)
-
-#if defined(FEATURE_PERFTRACING)
-class NativeEventLogger
-{
-public:
- static void QCALLTYPE LogThreadPoolWorkerThreadStart(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID);
- static void QCALLTYPE LogThreadPoolWorkerThreadStop(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID);
- static void QCALLTYPE LogThreadPoolWorkerThreadWait(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID);
- static void QCALLTYPE LogThreadPoolWorkerThreadAdjustmentSample(__in_z double throughput, __in_z short clrInstanceID);
- static void QCALLTYPE LogThreadPoolWorkerThreadAdjustmentAdjustment(__in_z double averageThroughput, __in_z uint newWorkerThreadCount, __in_z uint reason, __in_z short clrInstanceID);
- static void QCALLTYPE LogThreadPoolWorkerThreadAdjustmentStats(__in_z double duration, __in_z double throughput, __in_z double threadWave, __in_z double throughputWave, __in_z double throughputErrorEstimate, __in_z double AverageThroughputErrorEstimate, __in_z double ThroughputRatio, __in_z double confidence, __in_z double newControlSetting, __in_z short newThreadWaveMagnitude, __in_z short ClrInstanceID);
- static void QCALLTYPE LogThreadPoolIOEnqueue(__in_z void* nativeOverlapped, __in_z void* overlapped, __in_z bool multiDequeues, __in_z short ClrInstanceID);
- static void QCALLTYPE LogThreadPoolIODequeue(__in_z void* nativeOverlapped, __in_z void* overlapped, __in_z short ClrInstanceID);
- static void QCALLTYPE LogThreadPoolWorkingThreadCount(__in_z uint count, __in_z short ClrInstanceID);
-};
+extern "C" void QCALLTYPE LogEventSource(__in_z int eventID, __in_z LPCWSTR eventName, __in_z LPCWSTR eventSourceName, __in_z LPCWSTR payload);
+extern "C" BOOL QCALLTYPE IsEventSourceLoggingEnabled();
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadStart(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID);
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadStop(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID);
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadWait(__in_z uint activeWorkerThreadCount, __in_z uint retiredWorkerThreadCount, __in_z short clrInstanceID);
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadAdjustmentSample(__in_z double throughput, __in_z short clrInstanceID);
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadAdjustmentAdjustment(__in_z double averageThroughput, __in_z uint newWorkerThreadCount, __in_z uint reason, __in_z short clrInstanceID);
+extern "C" void QCALLTYPE LogThreadPoolWorkerThreadAdjustmentStats(__in_z double duration, __in_z double throughput, __in_z double threadWave, __in_z double throughputWave, __in_z double throughputErrorEstimate, __in_z double AverageThroughputErrorEstimate, __in_z double ThroughputRatio, __in_z double confidence, __in_z double newControlSetting, __in_z short newThreadWaveMagnitude, __in_z short ClrInstanceID);
+extern "C" void QCALLTYPE LogThreadPoolIOEnqueue(__in_z void* nativeOverlapped, __in_z void* overlapped, __in_z bool multiDequeues, __in_z short ClrInstanceID);
+extern "C" void QCALLTYPE LogThreadPoolIODequeue(__in_z void* nativeOverlapped, __in_z void* overlapped, __in_z short ClrInstanceID);
+extern "C" void QCALLTYPE LogThreadPoolWorkingThreadCount(__in_z uint count, __in_z short ClrInstanceID);
#endif // defined(FEATURE_PERFTRACING)
#endif //_NATIVEEVENTSOURCE_H_
diff --git a/src/coreclr/vm/nativelibrarynative.cpp b/src/coreclr/vm/nativelibrarynative.cpp
index f2c26e0d468e0f..bce6ea6c036fa0 100644
--- a/src/coreclr/vm/nativelibrarynative.cpp
+++ b/src/coreclr/vm/nativelibrarynative.cpp
@@ -9,7 +9,7 @@
#include "nativelibrarynative.h"
// static
-INT_PTR QCALLTYPE NativeLibraryNative::LoadFromPath(LPCWSTR path, BOOL throwOnError)
+extern "C" INT_PTR QCALLTYPE NativeLibrary_LoadFromPath(LPCWSTR path, BOOL throwOnError)
{
QCALL_CONTRACT;
@@ -25,7 +25,7 @@ INT_PTR QCALLTYPE NativeLibraryNative::LoadFromPath(LPCWSTR path, BOOL throwOnEr
}
// static
-INT_PTR QCALLTYPE NativeLibraryNative::LoadByName(LPCWSTR name, QCall::AssemblyHandle callingAssembly,
+extern "C" INT_PTR QCALLTYPE NativeLibrary_LoadByName(LPCWSTR name, QCall::AssemblyHandle callingAssembly,
BOOL hasDllImportSearchPathFlag, DWORD dllImportSearchPathFlag,
BOOL throwOnError)
{
@@ -44,7 +44,7 @@ INT_PTR QCALLTYPE NativeLibraryNative::LoadByName(LPCWSTR name, QCall::AssemblyH
}
// static
-void QCALLTYPE NativeLibraryNative::FreeLib(INT_PTR handle)
+extern "C" void QCALLTYPE NativeLibrary_FreeLib(INT_PTR handle)
{
QCALL_CONTRACT;
@@ -56,7 +56,7 @@ void QCALLTYPE NativeLibraryNative::FreeLib(INT_PTR handle)
}
//static
-INT_PTR QCALLTYPE NativeLibraryNative::GetSymbol(INT_PTR handle, LPCWSTR symbolName, BOOL throwOnError)
+extern "C" INT_PTR QCALLTYPE NativeLibrary_GetSymbol(INT_PTR handle, LPCWSTR symbolName, BOOL throwOnError)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/nativelibrarynative.h b/src/coreclr/vm/nativelibrarynative.h
index e34ef68a74b397..6ace9ae0be58b3 100644
--- a/src/coreclr/vm/nativelibrarynative.h
+++ b/src/coreclr/vm/nativelibrarynative.h
@@ -10,16 +10,11 @@
#ifndef __NATIVELIBRARYNATIVE_H__
#define __NATIVELIBRARYNATIVE_H__
-class NativeLibraryNative
-{
-public:
- static INT_PTR QCALLTYPE LoadFromPath(LPCWSTR path, BOOL throwOnError);
- static INT_PTR QCALLTYPE LoadByName(LPCWSTR name, QCall::AssemblyHandle callingAssembly,
- BOOL hasDllImportSearchPathFlag, DWORD dllImportSearchPathFlag,
- BOOL throwOnError);
- static void QCALLTYPE FreeLib(INT_PTR handle);
- static INT_PTR QCALLTYPE GetSymbol(INT_PTR handle, LPCWSTR symbolName, BOOL throwOnError);
-
-};
+extern "C" INT_PTR QCALLTYPE NativeLibrary_LoadFromPath(LPCWSTR path, BOOL throwOnError);
+extern "C" INT_PTR QCALLTYPE NativeLibrary_LoadByName(LPCWSTR name, QCall::AssemblyHandle callingAssembly,
+ BOOL hasDllImportSearchPathFlag, DWORD dllImportSearchPathFlag,
+ BOOL throwOnError);
+extern "C" void QCALLTYPE NativeLibrary_FreeLib(INT_PTR handle);
+extern "C" INT_PTR QCALLTYPE NativeLibrary_GetSymbol(INT_PTR handle, LPCWSTR symbolName, BOOL throwOnError);
#endif // __NATIVELIBRARYNATIVE_H__
diff --git a/src/coreclr/vm/qcall.h b/src/coreclr/vm/qcall.h
index 2517f59953bb3d..ab5e4b4cb2b2ef 100644
--- a/src/coreclr/vm/qcall.h
+++ b/src/coreclr/vm/qcall.h
@@ -45,8 +45,7 @@
// class Foo {
//
// // All QCalls should have the following DllImport and SuppressUnmanagedCodeSecurity attributes
-// [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
-// [SuppressUnmanagedCodeSecurity]
+// [DllImport(JitHelpers.QCall, EntryPoint = "FooNative_Bar", CharSet = CharSet.Unicode)]
// // QCalls should always be static extern.
// private static extern bool Bar(int flags, string inString, StringHandleOnStack retString);
//
@@ -69,17 +68,10 @@
// QCall example - unmanaged part (do not replicate the comments into your actual QCall implementation):
// -----------------------------------------------------------------------------------------------------
//
-// The entrypoints of all QCalls has to be registered in tables in vm\ecall.cpp using QCFuncEntry macro,
-// For example: QCFuncElement("Bar", FooNative::Bar)
+// The entrypoints of all QCalls has to be registered in tables in vm\qcallentrypoints.cpp using the DllImportEntry macro,
+// For example: DllImportEntry(FooNative_Bar)
//
-// class FooNative {
-// public:
-// // All QCalls should be static and should be tagged with QCALLTYPE
-// static
-// BOOL QCALLTYPE Bar(int flags, LPCWSTR wszString, QCall::StringHandleOnStack retString);
-// };
-//
-// BOOL QCALLTYPE FooNative::Bar(int flags, LPCWSTR wszString, QCall::StringHandleOnStack retString)
+// extern "C" BOOL QCALLTYPE FooNative_Bar(int flags, LPCWSTR wszString, QCall::StringHandleOnStack retString)
// {
// // All QCalls should have QCALL_CONTRACT. It is alias for THROWS; GC_TRIGGERS; MODE_PREEMPTIVE.
// QCALL_CONTRACT;
@@ -343,4 +335,6 @@ class QCall
typedef void* EnregisteredTypeHandle;
+extern const void* QCallResolveDllImport(const char* name);
+
#endif //__QCall_h__
diff --git a/src/coreclr/vm/qcallentrypoints.cpp b/src/coreclr/vm/qcallentrypoints.cpp
new file mode 100644
index 00000000000000..22327cdc79c80b
--- /dev/null
+++ b/src/coreclr/vm/qcallentrypoints.cpp
@@ -0,0 +1,324 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+//
+// Describes all of the P/Invokes to the special QCall module that resolves to internal runtime methods.
+#include "common.h"
+
+//
+// Headers for all ECall entrypoints
+//
+#include "arraynative.h"
+#include "stringnative.h"
+#include "objectnative.h"
+#include "comdelegate.h"
+#include "customattribute.h"
+#include "comdynamic.h"
+#include "excep.h"
+#include "fcall.h"
+#include "clrconfignative.h"
+#include "commodule.h"
+#include "marshalnative.h"
+#include "nativelibrarynative.h"
+#include "system.h"
+#include "comutilnative.h"
+#include "comsynchronizable.h"
+#include "floatdouble.h"
+#include "floatsingle.h"
+#include "comdatetime.h"
+#include "compatibilityswitch.h"
+#include "debugdebugger.h"
+#include "assemblyname.hpp"
+#include "assemblynative.hpp"
+#include "comthreadpool.h"
+#include "comwaithandle.h"
+#include "nativeoverlapped.h"
+
+#include "proftoeeinterfaceimpl.h"
+
+#include "appdomainnative.hpp"
+#include "runtimehandles.h"
+#include "reflectioninvocation.h"
+#include "managedmdimport.hpp"
+#include "typestring.h"
+#include "comdependenthandle.h"
+#include "weakreferencenative.h"
+#include "varargsnative.h"
+#include "mlinfo.h"
+
+#ifdef FEATURE_COMINTEROP
+#include "variant.h"
+#include "oavariant.h"
+#include "mngstdinterfaces.h"
+#endif // FEATURE_COMINTEROP
+
+#include "interoplibinterface.h"
+
+#include "stubhelpers.h"
+#include "ilmarshalers.h"
+
+#ifdef FEATURE_MULTICOREJIT
+#include "multicorejit.h"
+#endif
+
+#if defined(FEATURE_EVENTSOURCE_XPLAT)
+#include "eventpipeadapter.h"
+#include "eventpipeinternal.h"
+#include "nativeeventsource.h"
+#endif //defined(FEATURE_EVENTSOURCE_XPLAT)
+
+#ifdef FEATURE_PERFTRACING
+#include "eventpipeadapter.h"
+#include "eventpipeinternal.h"
+#include "nativeeventsource.h"
+#endif //FEATURE_PERFTRACING
+
+#include "tailcallhelp.h"
+
+#include
+
+static const Entry s_QCall[] =
+{
+ DllImportEntry(Enum_GetValuesAndNames)
+ DllImportEntry(DebugDebugger_Launch)
+ DllImportEntry(DebugDebugger_Log)
+ DllImportEntry(Environment_Exit)
+ DllImportEntry(Environment_GetProcessorCount)
+ DllImportEntry(ExceptionNative_GetMessageFromNativeResources)
+ DllImportEntry(RuntimeTypeHandle_CreateInstanceForAnotherGenericParameter)
+ DllImportEntry(QCall_GetGCHandleForTypeHandle)
+ DllImportEntry(QCall_FreeGCHandleForTypeHandle)
+ DllImportEntry(RuntimeTypeHandle_MakePointer)
+ DllImportEntry(RuntimeTypeHandle_MakeByRef)
+ DllImportEntry(RuntimeTypeHandle_MakeSZArray)
+ DllImportEntry(RuntimeTypeHandle_MakeArray)
+ DllImportEntry(RuntimeTypeHandle_IsCollectible)
+ DllImportEntry(RuntimeTypeHandle_GetConstraints)
+ DllImportEntry(RuntimeTypeHandle_VerifyInterfaceIsImplemented)
+ DllImportEntry(RuntimeTypeHandle_GetInterfaceMethodImplementation)
+ DllImportEntry(RuntimeTypeHandle_IsVisible)
+ DllImportEntry(RuntimeTypeHandle_ConstructName)
+ DllImportEntry(RuntimeTypeHandle_GetTypeByName)
+ DllImportEntry(RuntimeTypeHandle_GetTypeByNameUsingCARules)
+ DllImportEntry(RuntimeTypeHandle_GetInstantiation)
+ DllImportEntry(RuntimeTypeHandle_Instantiate)
+ DllImportEntry(RuntimeTypeHandle_GetGenericTypeDefinition)
+ DllImportEntry(RuntimeTypeHandle_GetActivationInfo)
+ DllImportEntry(RuntimeTypeHandle_AllocateTypeAssociatedMemory)
+ DllImportEntry(RuntimeMethodHandle_ConstructInstantiation)
+ DllImportEntry(RuntimeMethodHandle_GetFunctionPointer)
+ DllImportEntry(RuntimeMethodHandle_GetIsCollectible)
+ DllImportEntry(RuntimeMethodHandle_GetMethodInstantiation)
+ DllImportEntry(RuntimeMethodHandle_GetTypicalMethodDefinition)
+ DllImportEntry(RuntimeMethodHandle_StripMethodInstantiation)
+ DllImportEntry(RuntimeMethodHandle_IsCAVisibleFromDecoratedType)
+ DllImportEntry(RuntimeMethodHandle_Destroy)
+ DllImportEntry(RuntimeModule_GetType)
+ DllImportEntry(RuntimeModule_GetScopeName)
+ DllImportEntry(RuntimeModule_GetFullyQualifiedName)
+ DllImportEntry(ModuleBuilder_GetStringConstant)
+ DllImportEntry(ModuleBuilder_GetTypeRef)
+ DllImportEntry(ModuleBuilder_GetTokenFromTypeSpec)
+ DllImportEntry(ModuleBuilder_GetMemberRef)
+ DllImportEntry(ModuleBuilder_GetMemberRefOfMethodInfo)
+ DllImportEntry(ModuleBuilder_GetMemberRefOfFieldInfo)
+ DllImportEntry(ModuleBuilder_GetMemberRefFromSignature)
+ DllImportEntry(ModuleBuilder_GetArrayMethodToken)
+ DllImportEntry(ModuleBuilder_SetFieldRVAContent)
+ DllImportEntry(ModuleHandle_GetModuleType)
+ DllImportEntry(ModuleHandle_ResolveType)
+ DllImportEntry(ModuleHandle_ResolveMethod)
+ DllImportEntry(ModuleHandle_ResolveField)
+ DllImportEntry(ModuleHandle_GetPEKind)
+ DllImportEntry(TypeBuilder_DefineGenericParam)
+ DllImportEntry(TypeBuilder_DefineType)
+ DllImportEntry(TypeBuilder_SetParentType)
+ DllImportEntry(TypeBuilder_AddInterfaceImpl)
+ DllImportEntry(TypeBuilder_DefineMethod)
+ DllImportEntry(TypeBuilder_DefineMethodSpec)
+ DllImportEntry(TypeBuilder_SetMethodIL)
+ DllImportEntry(TypeBuilder_TermCreateClass)
+ DllImportEntry(TypeBuilder_DefineField)
+ DllImportEntry(TypeBuilder_DefineProperty)
+ DllImportEntry(TypeBuilder_DefineEvent)
+ DllImportEntry(TypeBuilder_DefineMethodSemantics)
+ DllImportEntry(TypeBuilder_SetMethodImpl)
+ DllImportEntry(TypeBuilder_DefineMethodImpl)
+ DllImportEntry(TypeBuilder_GetTokenFromSig)
+ DllImportEntry(TypeBuilder_SetFieldLayoutOffset)
+ DllImportEntry(TypeBuilder_SetClassLayout)
+ DllImportEntry(TypeBuilder_SetParamInfo)
+ DllImportEntry(TypeBuilder_SetPInvokeData)
+ DllImportEntry(TypeBuilder_SetConstantValue)
+ DllImportEntry(TypeBuilder_DefineCustomAttribute)
+ DllImportEntry(MdUtf8String_EqualsCaseInsensitive)
+ DllImportEntry(MdUtf8String_HashCaseInsensitive)
+ DllImportEntry(TypeName_ReleaseTypeNameParser)
+ DllImportEntry(TypeName_CreateTypeNameParser)
+ DllImportEntry(TypeName_GetNames)
+ DllImportEntry(TypeName_GetTypeArguments)
+ DllImportEntry(TypeName_GetModifiers)
+ DllImportEntry(TypeName_GetAssemblyName)
+ DllImportEntry(AssemblyNative_GetFullName)
+ DllImportEntry(AssemblyNative_GetLocation)
+ DllImportEntry(AssemblyNative_GetResource)
+ DllImportEntry(AssemblyNative_GetCodeBase)
+ DllImportEntry(AssemblyNative_GetFlags)
+ DllImportEntry(AssemblyNative_GetHashAlgorithm)
+ DllImportEntry(AssemblyNative_GetLocale)
+ DllImportEntry(AssemblyNative_GetPublicKey)
+ DllImportEntry(AssemblyNative_GetSimpleName)
+ DllImportEntry(AssemblyNative_GetVersion)
+ DllImportEntry(AssemblyNative_InternalLoad)
+ DllImportEntry(AssemblyNative_GetType)
+ DllImportEntry(AssemblyNative_GetForwardedType)
+ DllImportEntry(AssemblyNative_GetManifestResourceInfo)
+ DllImportEntry(AssemblyNative_GetModules)
+ DllImportEntry(AssemblyNative_GetModule)
+ DllImportEntry(AssemblyNative_GetExportedTypes)
+ DllImportEntry(AssemblyNative_GetEntryPoint)
+ DllImportEntry(AssemblyNative_GetImageRuntimeVersion)
+ DllImportEntry(AssemblyNative_GetIsCollectible)
+ DllImportEntry(AssemblyNative_InternalTryGetRawMetadata)
+ DllImportEntry(AssemblyNative_ApplyUpdate)
+ DllImportEntry(AssemblyNative_IsApplyUpdateSupported)
+ DllImportEntry(AssemblyNative_InitializeAssemblyLoadContext)
+ DllImportEntry(AssemblyNative_PrepareForAssemblyLoadContextRelease)
+ DllImportEntry(AssemblyNative_LoadFromPath)
+ DllImportEntry(AssemblyNative_LoadFromStream)
+#ifdef TARGET_WINDOWS
+ DllImportEntry(AssemblyNative_LoadFromInMemoryModule)
+#endif
+ DllImportEntry(AssemblyNative_GetLoadContextForAssembly)
+ DllImportEntry(AssemblyNative_TraceResolvingHandlerInvoked)
+ DllImportEntry(AssemblyNative_TraceAssemblyResolveHandlerInvoked)
+ DllImportEntry(AssemblyNative_TraceAssemblyLoadFromResolveHandlerInvoked)
+ DllImportEntry(AssemblyNative_TraceSatelliteSubdirectoryPathProbed)
+ DllImportEntry(AssemblyNative_GetAssemblyCount)
+ DllImportEntry(AssemblyNative_GetEntryAssembly)
+ DllImportEntry(AssemblyNative_GetExecutingAssembly)
+#if defined(FEATURE_MULTICOREJIT)
+ DllImportEntry(MultiCoreJIT_InternalSetProfileRoot)
+ DllImportEntry(MultiCoreJIT_InternalStartProfile)
+#endif
+ DllImportEntry(LoaderAllocator_Destroy)
+ DllImportEntry(AppDomain_CreateDynamicAssembly)
+ DllImportEntry(ThreadNative_Start)
+ DllImportEntry(ThreadNative_UninterruptibleSleep0)
+ DllImportEntry(ThreadNative_InformThreadNameChange)
+ DllImportEntry(ThreadNative_YieldThread)
+ DllImportEntry(ThreadNative_GetCurrentOSThreadId)
+ DllImportEntry(ThreadPool_GetCompletedWorkItemCount)
+ DllImportEntry(ThreadPool_RequestWorkerThread)
+ DllImportEntry(ThreadPool_PerformGateActivities)
+ DllImportEntry(AppDomainTimer_Create)
+ DllImportEntry(AppDomainTimer_Change)
+ DllImportEntry(AppDomainTimer_Delete)
+#ifdef TARGET_UNIX
+ DllImportEntry(WaitHandle_CorWaitOnePrioritizedNative)
+#endif
+ DllImportEntry(ClrConfig_GetConfigBoolValue)
+ DllImportEntry(Buffer_Clear)
+ DllImportEntry(Buffer_MemMove)
+ DllImportEntry(GCInterface_StartNoGCRegion)
+ DllImportEntry(GCInterface_EndNoGCRegion)
+ DllImportEntry(GCInterface_GetTotalMemory)
+ DllImportEntry(GCInterface_Collect)
+ DllImportEntry(GCInterface_WaitForPendingFinalizers)
+ DllImportEntry(GCInterface_AddMemoryPressure)
+ DllImportEntry(GCInterface_RemoveMemoryPressure)
+#ifdef FEATURE_BASICFREEZE
+ DllImportEntry(GCInterface_RegisterFrozenSegment)
+ DllImportEntry(GCInterface_UnregisterFrozenSegment)
+#endif
+ DllImportEntry(MarshalNative_Prelink)
+ DllImportEntry(MarshalNative_IsBuiltInComSupported)
+ DllImportEntry(MarshalNative_GetHINSTANCE)
+#ifdef _DEBUG
+ DllImportEntry(MarshalNative_GetIsInCooperativeGCModeFunctionPointer)
+#endif
+#if defined(FEATURE_COMINTEROP)
+ DllImportEntry(MarshalNative_GetTypeFromCLSID)
+#endif
+ DllImportEntry(NativeLibrary_LoadFromPath)
+ DllImportEntry(NativeLibrary_LoadByName)
+ DllImportEntry(NativeLibrary_FreeLib)
+ DllImportEntry(NativeLibrary_GetSymbol)
+ DllImportEntry(GetTypeLoadExceptionMessage)
+ DllImportEntry(GetFileLoadExceptionMessage)
+ DllImportEntry(FileLoadException_GetMessageForHR)
+ DllImportEntry(Interlocked_MemoryBarrierProcessWide)
+ DllImportEntry(ObjectNative_GetMonitorLockContentionCount)
+ DllImportEntry(ReflectionInvocation_RunClassConstructor)
+ DllImportEntry(ReflectionInvocation_RunModuleConstructor)
+ DllImportEntry(ReflectionInvocation_CompileMethod)
+ DllImportEntry(ReflectionInvocation_PrepareMethod)
+ DllImportEntry(ReflectionSerialization_GetUninitializedObject)
+#if defined(FEATURE_COMWRAPPERS)
+ DllImportEntry(ComWrappers_GetIUnknownImpl)
+ DllImportEntry(ComWrappers_TryGetOrCreateComInterfaceForObject)
+ DllImportEntry(ComWrappers_TryGetOrCreateObjectForComInstance)
+ DllImportEntry(ComWrappers_SetGlobalInstanceRegisteredForMarshalling)
+ DllImportEntry(ComWrappers_SetGlobalInstanceRegisteredForTrackerSupport)
+#endif
+#if defined(FEATURE_OBJCMARSHAL)
+ DllImportEntry(ObjCMarshal_TrySetGlobalMessageSendCallback)
+ DllImportEntry(ObjCMarshal_TryInitializeReferenceTracker)
+ DllImportEntry(ObjCMarshal_CreateReferenceTrackingHandle)
+#endif
+#if defined(FEATURE_EVENTSOURCE_XPLAT)
+ DllImportEntry(IsEventSourceLoggingEnabled)
+ DllImportEntry(LogEventSource)
+#endif
+#if defined(FEATURE_PERFTRACING)
+ DllImportEntry(LogThreadPoolWorkerThreadStart)
+ DllImportEntry(LogThreadPoolWorkerThreadStop)
+ DllImportEntry(LogThreadPoolWorkerThreadWait)
+ DllImportEntry(LogThreadPoolWorkerThreadAdjustmentSample)
+ DllImportEntry(LogThreadPoolWorkerThreadAdjustmentAdjustment)
+ DllImportEntry(LogThreadPoolWorkerThreadAdjustmentStats)
+ DllImportEntry(LogThreadPoolIOEnqueue)
+ DllImportEntry(LogThreadPoolIODequeue)
+ DllImportEntry(LogThreadPoolWorkingThreadCount)
+ DllImportEntry(EventPipeInternal_Enable)
+ DllImportEntry(EventPipeInternal_Disable)
+ DllImportEntry(EventPipeInternal_GetSessionInfo)
+ DllImportEntry(EventPipeInternal_CreateProvider)
+ DllImportEntry(EventPipeInternal_DefineEvent)
+ DllImportEntry(EventPipeInternal_DeleteProvider)
+ DllImportEntry(EventPipeInternal_EventActivityIdControl)
+ DllImportEntry(EventPipeInternal_GetProvider)
+ DllImportEntry(EventPipeInternal_WriteEventData)
+ DllImportEntry(EventPipeInternal_GetNextEvent)
+ DllImportEntry(EventPipeInternal_GetWaitHandle)
+#endif
+#if defined(TARGET_UNIX)
+ DllImportEntry(CloseHandle)
+ DllImportEntry(CreateEventExW)
+ DllImportEntry(CreateMutexExW)
+ DllImportEntry(CreateSemaphoreExW)
+ DllImportEntry(FormatMessageW)
+ DllImportEntry(FreeEnvironmentStringsW)
+ DllImportEntry(GetEnvironmentStringsW)
+ DllImportEntry(GetEnvironmentVariableW)
+ DllImportEntry(OpenEventW)
+ DllImportEntry(OpenMutexW)
+ DllImportEntry(OpenSemaphoreW)
+ DllImportEntry(OutputDebugStringW)
+ DllImportEntry(ReleaseMutex)
+ DllImportEntry(ReleaseSemaphore)
+ DllImportEntry(ResetEvent)
+ DllImportEntry(SetEnvironmentVariableW)
+ DllImportEntry(SetEvent)
+#endif
+#if defined(TARGET_X86) || defined(TARGET_AMD64)
+ DllImportEntry(X86BaseCpuId)
+#endif
+#if defined(FEATURE_COMINTEROP)
+ DllImportEntry(InterfaceMarshaler__ClearNative)
+#endif
+};
+
+const void* QCallResolveDllImport(const char* name)
+{
+ return minipal_resolve_dllimport(s_QCall, lengthof(s_QCall), name);
+}
diff --git a/src/coreclr/vm/reflectioninvocation.cpp b/src/coreclr/vm/reflectioninvocation.cpp
index 08ad56c44c96a6..ebf13351d4c06f 100644
--- a/src/coreclr/vm/reflectioninvocation.cpp
+++ b/src/coreclr/vm/reflectioninvocation.cpp
@@ -338,7 +338,7 @@ FCIMPL7(void, RuntimeFieldHandle::SetValue, ReflectFieldObject *pFieldUNSAFE, Ob
}
FCIMPLEND
-void QCALLTYPE RuntimeTypeHandle::CreateInstanceForAnotherGenericParameter(
+extern "C" void QCALLTYPE RuntimeTypeHandle_CreateInstanceForAnotherGenericParameter(
QCall::TypeHandle pTypeHandle,
TypeHandle* pInstArray,
INT32 cInstArray,
@@ -1566,7 +1566,7 @@ lExit: ;
}
FCIMPLEND
-void QCALLTYPE ReflectionInvocation::CompileMethod(MethodDesc * pMD)
+extern "C" void QCALLTYPE ReflectionInvocation_CompileMethod(MethodDesc * pMD)
{
QCALL_CONTRACT;
@@ -1582,7 +1582,7 @@ void QCALLTYPE ReflectionInvocation::CompileMethod(MethodDesc * pMD)
}
// This method triggers the class constructor for a give type
-void QCALLTYPE ReflectionInvocation::RunClassConstructor(QCall::TypeHandle pType)
+extern "C" void QCALLTYPE ReflectionInvocation_RunClassConstructor(QCall::TypeHandle pType)
{
QCALL_CONTRACT;
@@ -1602,7 +1602,7 @@ void QCALLTYPE ReflectionInvocation::RunClassConstructor(QCall::TypeHandle pType
}
// This method triggers the module constructor for a give module
-void QCALLTYPE ReflectionInvocation::RunModuleConstructor(QCall::ModuleHandle pModule)
+extern "C" void QCALLTYPE ReflectionInvocation_RunModuleConstructor(QCall::ModuleHandle pModule)
{
QCALL_CONTRACT;
@@ -1636,7 +1636,7 @@ static void PrepareMethodHelper(MethodDesc * pMD)
// This method triggers a given method to be jitted. CoreCLR implementation of this method triggers jiting of the given method only.
// It does not walk a subset of callgraph to provide CER guarantees.
-void QCALLTYPE ReflectionInvocation::PrepareMethod(MethodDesc *pMD, TypeHandle *pInstantiation, UINT32 cInstantiation)
+extern "C" void QCALLTYPE ReflectionInvocation_PrepareMethod(MethodDesc *pMD, TypeHandle *pInstantiation, UINT32 cInstantiation)
{
CONTRACTL {
QCALL_CHECK;
@@ -2048,7 +2048,7 @@ void RuntimeTypeHandle::ValidateTypeAbleToBeInstantiated(
* This method will not run the type's static cctor.
* This method will not allocate an instance of the target type.
*/
-void QCALLTYPE RuntimeTypeHandle::GetActivationInfo(
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetActivationInfo(
QCall::ObjectHandleOnStack pRuntimeType,
PCODE* ppfnAllocator,
void** pvAllocatorFirstArg,
@@ -2082,7 +2082,7 @@ void QCALLTYPE RuntimeTypeHandle::GetActivationInfo(
typeHandle = ((REFLECTCLASSBASEREF)pRuntimeType.Get())->GetType();
}
- ValidateTypeAbleToBeInstantiated(typeHandle, false /* fGetUninitializedObject */);
+ RuntimeTypeHandle::ValidateTypeAbleToBeInstantiated(typeHandle, false /* fGetUninitializedObject */);
MethodTable* pMT = typeHandle.AsMethodTable();
PREFIX_ASSUME(pMT != NULL);
@@ -2219,7 +2219,7 @@ FCIMPLEND
//*************************************************************************************************
//*************************************************************************************************
//*************************************************************************************************
-void QCALLTYPE ReflectionSerialization::GetUninitializedObject(QCall::TypeHandle pType, QCall::ObjectHandleOnStack retObject)
+extern "C" void QCALLTYPE ReflectionSerialization_GetUninitializedObject(QCall::TypeHandle pType, QCall::ObjectHandleOnStack retObject)
{
QCALL_CONTRACT;
@@ -2264,7 +2264,7 @@ FCIMPL1(Object *, ReflectionEnum::InternalGetEnumUnderlyingType, ReflectClassBas
VALIDATEOBJECT(target);
TypeHandle th = target->GetType();
_ASSERTE(th.IsEnum());
-
+
OBJECTREF result = NULL;
HELPER_METHOD_FRAME_BEGIN_RET_0();
@@ -2319,7 +2319,7 @@ class TempEnumValueSorter : public CQuickSort
}
};
-void QCALLTYPE ReflectionEnum::GetEnumValuesAndNames(QCall::TypeHandle pEnumType, QCall::ObjectHandleOnStack pReturnValues, QCall::ObjectHandleOnStack pReturnNames, BOOL fGetNames)
+extern "C" void QCALLTYPE Enum_GetValuesAndNames(QCall::TypeHandle pEnumType, QCall::ObjectHandleOnStack pReturnValues, QCall::ObjectHandleOnStack pReturnNames, BOOL fGetNames)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/reflectioninvocation.h b/src/coreclr/vm/reflectioninvocation.h
index 7fd56a2bc22571..76eef427a7969f 100644
--- a/src/coreclr/vm/reflectioninvocation.h
+++ b/src/coreclr/vm/reflectioninvocation.h
@@ -45,17 +45,6 @@
class ReflectionInvocation {
public:
- static
- void QCALLTYPE CompileMethod(MethodDesc * pMD);
-
- static
- void QCALLTYPE RunClassConstructor(QCall::TypeHandle pType);
-
- static
- void QCALLTYPE RunModuleConstructor(QCall::ModuleHandle pModule);
-
- static
- void QCALLTYPE PrepareMethod(MethodDesc* pMD, TypeHandle *pInstantiation, UINT32 cInstantiation);
static FCDECL1(void, PrepareDelegate, Object* delegateUNSAFE);
static FCDECL0(void, EnsureSufficientExecutionStack);
@@ -76,21 +65,23 @@ class ReflectionInvocation {
static FCDECL3(Object*, AllocateValueType, ReflectClassBaseObject *targetType, Object *valueUNSAFE, CLR_BOOL fForceTypeChange);
};
-class ReflectionSerialization {
-public:
- static
- void QCALLTYPE GetUninitializedObject(QCall::TypeHandle pType, QCall::ObjectHandleOnStack retObject);
-};
+extern "C" void QCALLTYPE ReflectionInvocation_CompileMethod(MethodDesc * pMD);
+
+extern "C" void QCALLTYPE ReflectionInvocation_RunClassConstructor(QCall::TypeHandle pType);
+
+extern "C" void QCALLTYPE ReflectionInvocation_RunModuleConstructor(QCall::ModuleHandle pModule);
+
+extern "C" void QCALLTYPE ReflectionInvocation_PrepareMethod(MethodDesc* pMD, TypeHandle *pInstantiation, UINT32 cInstantiation);
+
+extern "C" void QCALLTYPE ReflectionSerialization_GetUninitializedObject(QCall::TypeHandle pType, QCall::ObjectHandleOnStack retObject);
class ReflectionEnum {
public:
static FCDECL1(Object *, InternalGetEnumUnderlyingType, ReflectClassBaseObject *target);
static FCDECL1(INT32, InternalGetCorElementType, Object *pRefThis);
-
- static
- void QCALLTYPE GetEnumValuesAndNames(QCall::TypeHandle pEnumType, QCall::ObjectHandleOnStack pReturnValues, QCall::ObjectHandleOnStack pReturnNames, BOOL fGetNames);
-
static FCDECL2_IV(Object*, InternalBoxEnum, ReflectClassBaseObject* pEnumType, INT64 value);
};
+extern "C" void QCALLTYPE Enum_GetValuesAndNames(QCall::TypeHandle pEnumType, QCall::ObjectHandleOnStack pReturnValues, QCall::ObjectHandleOnStack pReturnNames, BOOL fGetNames);
+
#endif // _REFLECTIONINVOCATION_H_
diff --git a/src/coreclr/vm/runtimehandles.cpp b/src/coreclr/vm/runtimehandles.cpp
index 5c436a73c90002..a0b269b38d8e1f 100644
--- a/src/coreclr/vm/runtimehandles.cpp
+++ b/src/coreclr/vm/runtimehandles.cpp
@@ -32,7 +32,7 @@
#include "castcache.h"
#include "encee.h"
-BOOL QCALLTYPE MdUtf8String::EqualsCaseInsensitive(LPCUTF8 szLhs, LPCUTF8 szRhs, INT32 stringNumBytes)
+extern "C" BOOL QCALLTYPE MdUtf8String_EqualsCaseInsensitive(LPCUTF8 szLhs, LPCUTF8 szRhs, INT32 stringNumBytes)
{
QCALL_CONTRACT;
@@ -59,7 +59,7 @@ BOOL QCALLTYPE MdUtf8String::EqualsCaseInsensitive(LPCUTF8 szLhs, LPCUTF8 szRhs,
return fStringsEqual;
}
-ULONG QCALLTYPE MdUtf8String::HashCaseInsensitive(LPCUTF8 sz, INT32 stringNumBytes)
+extern "C" ULONG QCALLTYPE MdUtf8String_HashCaseInsensitive(LPCUTF8 sz, INT32 stringNumBytes)
{
QCALL_CONTRACT;
@@ -113,7 +113,7 @@ static BOOL CheckCAVisibilityFromDecoratedType(MethodTable* pCAMT, MethodDesc* p
*AccessCheckOptions::s_pNormalAccessChecks);
}
-BOOL QCALLTYPE RuntimeMethodHandle::IsCAVisibleFromDecoratedType(
+extern "C" BOOL QCALLTYPE RuntimeMethodHandle_IsCAVisibleFromDecoratedType(
QCall::TypeHandle targetTypeHandle,
MethodDesc * pTargetCtor,
QCall::TypeHandle sourceTypeHandle,
@@ -648,7 +648,7 @@ FCIMPL3(FC_BOOL_RET, RuntimeTypeHandle::GetFields, ReflectClassBaseObject *pType
}
FCIMPLEND
-void QCALLTYPE RuntimeMethodHandle::ConstructInstantiation(MethodDesc * pMethod, DWORD format, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE RuntimeMethodHandle_ConstructInstantiation(MethodDesc * pMethod, DWORD format, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -661,7 +661,7 @@ void QCALLTYPE RuntimeMethodHandle::ConstructInstantiation(MethodDesc * pMethod,
END_QCALL;
}
-void QCALLTYPE RuntimeTypeHandle::ConstructName(QCall::TypeHandle pTypeHandle, DWORD format, QCall::StringHandleOnStack retString)
+extern "C" void QCALLTYPE RuntimeTypeHandle_ConstructName(QCall::TypeHandle pTypeHandle, DWORD format, QCall::StringHandleOnStack retString)
{
QCALL_CONTRACT;
@@ -712,7 +712,7 @@ PTRARRAYREF CopyRuntimeTypeHandles(TypeHandle * prgTH, INT32 numTypeHandles, Bin
return refReturn;
}
-void QCALLTYPE RuntimeTypeHandle::GetConstraints(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retTypeArray)
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetConstraints(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retTypeArray)
{
QCALL_CONTRACT;
@@ -881,10 +881,7 @@ FCIMPL1(FC_BOOL_RET, RuntimeTypeHandle::IsByRefLike, ReflectClassBaseObject *pTy
}
FCIMPLEND
-BOOL
-QCALLTYPE
-RuntimeTypeHandle::IsVisible(
- QCall::TypeHandle pTypeHandle)
+extern "C" BOOL QCALLTYPE RuntimeTypeHandle_IsVisible(QCall::TypeHandle pTypeHandle)
{
CONTRACTL
{
@@ -905,7 +902,7 @@ RuntimeTypeHandle::IsVisible(
END_QCALL;
return fIsExternallyVisible;
-} // RuntimeTypeHandle::IsVisible
+}
FCIMPL1(LPCUTF8, RuntimeTypeHandle::GetUtf8Name, ReflectClassBaseObject* pTypeUNSAFE) {
CONTRACTL {
@@ -980,7 +977,7 @@ FCIMPL1(INT32, RuntimeTypeHandle::GetToken, ReflectClassBaseObject *pTypeUNSAFE)
}
FCIMPLEND
-PVOID QCALLTYPE RuntimeTypeHandle::GetGCHandle(QCall::TypeHandle pTypeHandle, INT32 handleType)
+extern "C" PVOID QCALLTYPE QCall_GetGCHandleForTypeHandle(QCall::TypeHandle pTypeHandle, INT32 handleType)
{
QCALL_CONTRACT;
@@ -1000,7 +997,7 @@ PVOID QCALLTYPE RuntimeTypeHandle::GetGCHandle(QCall::TypeHandle pTypeHandle, IN
return objHandle;
}
-void QCALLTYPE RuntimeTypeHandle::FreeGCHandle(QCall::TypeHandle pTypeHandle, OBJECTHANDLE objHandle)
+extern "C" void QCALLTYPE QCall_FreeGCHandleForTypeHandle(QCall::TypeHandle pTypeHandle, OBJECTHANDLE objHandle)
{
QCALL_CONTRACT;
@@ -1015,7 +1012,7 @@ void QCALLTYPE RuntimeTypeHandle::FreeGCHandle(QCall::TypeHandle pTypeHandle, OB
END_QCALL;
}
-void QCALLTYPE RuntimeTypeHandle::VerifyInterfaceIsImplemented(QCall::TypeHandle pTypeHandle, QCall::TypeHandle pIFaceHandle)
+extern "C" void QCALLTYPE RuntimeTypeHandle_VerifyInterfaceIsImplemented(QCall::TypeHandle pTypeHandle, QCall::TypeHandle pIFaceHandle)
{
QCALL_CONTRACT;
@@ -1051,7 +1048,7 @@ void QCALLTYPE RuntimeTypeHandle::VerifyInterfaceIsImplemented(QCall::TypeHandle
END_QCALL;
}
-MethodDesc* QCALLTYPE RuntimeTypeHandle::GetInterfaceMethodImplementation(QCall::TypeHandle pTypeHandle, QCall::TypeHandle pOwner, MethodDesc * pMD)
+extern "C" MethodDesc* QCALLTYPE RuntimeTypeHandle_GetInterfaceMethodImplementation(QCall::TypeHandle pTypeHandle, QCall::TypeHandle pOwner, MethodDesc * pMD)
{
QCALL_CONTRACT;
@@ -1281,7 +1278,7 @@ FCIMPL2(FC_BOOL_RET, RuntimeTypeHandle::CanCastTo, ReflectClassBaseObject *pType
}
FCIMPLEND
-void QCALLTYPE RuntimeTypeHandle::GetTypeByNameUsingCARules(LPCWSTR pwzClassName, QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetTypeByNameUsingCARules(LPCWSTR pwzClassName, QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
@@ -1302,11 +1299,11 @@ void QCALLTYPE RuntimeTypeHandle::GetTypeByNameUsingCARules(LPCWSTR pwzClassName
return;
}
-void QCALLTYPE RuntimeTypeHandle::GetTypeByName(LPCWSTR pwzClassName, BOOL bThrowOnError, BOOL bIgnoreCase,
- QCall::StackCrawlMarkHandle pStackMark,
- QCall::ObjectHandleOnStack pAssemblyLoadContext,
- QCall::ObjectHandleOnStack retType,
- QCall::ObjectHandleOnStack keepAlive)
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetTypeByName(LPCWSTR pwzClassName, BOOL bThrowOnError, BOOL bIgnoreCase,
+ QCall::StackCrawlMarkHandle pStackMark,
+ QCall::ObjectHandleOnStack pAssemblyLoadContext,
+ QCall::ObjectHandleOnStack retType,
+ QCall::ObjectHandleOnStack keepAlive)
{
QCALL_CONTRACT;
@@ -1390,7 +1387,7 @@ FCIMPL6(FC_BOOL_RET, RuntimeTypeHandle::SatisfiesConstraints, PTR_ReflectClassBa
}
FCIMPLEND
-void QCALLTYPE RuntimeTypeHandle::GetInstantiation(QCall::TypeHandle pType, QCall::ObjectHandleOnStack retTypes, BOOL fAsRuntimeTypeArray)
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetInstantiation(QCall::TypeHandle pType, QCall::ObjectHandleOnStack retTypes, BOOL fAsRuntimeTypeArray)
{
QCALL_CONTRACT;
@@ -1405,7 +1402,7 @@ void QCALLTYPE RuntimeTypeHandle::GetInstantiation(QCall::TypeHandle pType, QCal
return;
}
-void QCALLTYPE RuntimeTypeHandle::MakeArray(QCall::TypeHandle pTypeHandle, INT32 rank, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE RuntimeTypeHandle_MakeArray(QCall::TypeHandle pTypeHandle, INT32 rank, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
@@ -1420,7 +1417,7 @@ void QCALLTYPE RuntimeTypeHandle::MakeArray(QCall::TypeHandle pTypeHandle, INT32
return;
}
-void QCALLTYPE RuntimeTypeHandle::MakeSZArray(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE RuntimeTypeHandle_MakeSZArray(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
@@ -1435,7 +1432,7 @@ void QCALLTYPE RuntimeTypeHandle::MakeSZArray(QCall::TypeHandle pTypeHandle, QCa
return;
}
-void QCALLTYPE RuntimeTypeHandle::MakePointer(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE RuntimeTypeHandle_MakePointer(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
@@ -1450,7 +1447,7 @@ void QCALLTYPE RuntimeTypeHandle::MakePointer(QCall::TypeHandle pTypeHandle, QCa
return;
}
-void QCALLTYPE RuntimeTypeHandle::MakeByRef(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE RuntimeTypeHandle_MakeByRef(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
@@ -1465,7 +1462,7 @@ void QCALLTYPE RuntimeTypeHandle::MakeByRef(QCall::TypeHandle pTypeHandle, QCall
return;
}
-BOOL QCALLTYPE RuntimeTypeHandle::IsCollectible(QCall::TypeHandle pTypeHandle)
+extern "C" BOOL QCALLTYPE RuntimeTypeHandle_IsCollectible(QCall::TypeHandle pTypeHandle)
{
QCALL_CONTRACT;
@@ -1478,7 +1475,7 @@ BOOL QCALLTYPE RuntimeTypeHandle::IsCollectible(QCall::TypeHandle pTypeHandle)
return retVal;
}
-void QCALLTYPE RuntimeTypeHandle::Instantiate(QCall::TypeHandle pTypeHandle, TypeHandle * pInstArray, INT32 cInstArray, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE RuntimeTypeHandle_Instantiate(QCall::TypeHandle pTypeHandle, TypeHandle * pInstArray, INT32 cInstArray, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
@@ -1493,7 +1490,7 @@ void QCALLTYPE RuntimeTypeHandle::Instantiate(QCall::TypeHandle pTypeHandle, Typ
return;
}
-void QCALLTYPE RuntimeTypeHandle::GetGenericTypeDefinition(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetGenericTypeDefinition(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
@@ -1610,7 +1607,7 @@ FCIMPL1(IMDInternalImport*, RuntimeTypeHandle::GetMetadataImport, ReflectClassBa
}
FCIMPLEND
-PVOID QCALLTYPE RuntimeTypeHandle::AllocateTypeAssociatedMemory(QCall::TypeHandle type, UINT32 size)
+extern "C" void* QCALLTYPE RuntimeTypeHandle_AllocateTypeAssociatedMemory(QCall::TypeHandle type, uint32_t size)
{
QCALL_CONTRACT;
@@ -1637,7 +1634,7 @@ PVOID QCALLTYPE RuntimeTypeHandle::AllocateTypeAssociatedMemory(QCall::TypeHandl
//***********************************************************************************
//***********************************************************************************
-void * QCALLTYPE RuntimeMethodHandle::GetFunctionPointer(MethodDesc * pMethod)
+extern "C" void * QCALLTYPE RuntimeMethodHandle_GetFunctionPointer(MethodDesc * pMethod)
{
QCALL_CONTRACT;
@@ -1655,7 +1652,7 @@ void * QCALLTYPE RuntimeMethodHandle::GetFunctionPointer(MethodDesc * pMethod)
return funcPtr;
}
-BOOL QCALLTYPE RuntimeMethodHandle::GetIsCollectible(MethodDesc * pMethod)
+extern "C" BOOL QCALLTYPE RuntimeMethodHandle_GetIsCollectible(MethodDesc * pMethod)
{
QCALL_CONTRACT;
@@ -2069,7 +2066,7 @@ FCIMPL2(FC_BOOL_RET, SignatureNative::CompareSig, SignatureNative* pLhsUNSAFE, S
}
FCIMPLEND
-void QCALLTYPE RuntimeMethodHandle::GetMethodInstantiation(MethodDesc * pMethod, QCall::ObjectHandleOnStack retTypes, BOOL fAsRuntimeTypeArray)
+extern "C" void QCALLTYPE RuntimeMethodHandle_GetMethodInstantiation(MethodDesc * pMethod, QCall::ObjectHandleOnStack retTypes, BOOL fAsRuntimeTypeArray)
{
QCALL_CONTRACT;
@@ -2131,7 +2128,7 @@ FCIMPL1(Object*, RuntimeMethodHandle::GetResolver, MethodDesc * pMethod)
}
FCIMPLEND
-void QCALLTYPE RuntimeMethodHandle::Destroy(MethodDesc * pMethod)
+extern "C" void QCALLTYPE RuntimeMethodHandle_Destroy(MethodDesc * pMethod)
{
QCALL_CONTRACT;
@@ -2172,7 +2169,7 @@ FCIMPL1(FC_BOOL_RET, RuntimeMethodHandle::IsTypicalMethodDefinition, ReflectMeth
}
FCIMPLEND
-void QCALLTYPE RuntimeMethodHandle::GetTypicalMethodDefinition(MethodDesc * pMethod, QCall::ObjectHandleOnStack refMethod)
+extern "C" void QCALLTYPE RuntimeMethodHandle_GetTypicalMethodDefinition(MethodDesc * pMethod, QCall::ObjectHandleOnStack refMethod)
{
QCALL_CONTRACT;
@@ -2194,7 +2191,7 @@ void QCALLTYPE RuntimeMethodHandle::GetTypicalMethodDefinition(MethodDesc * pMet
return;
}
-void QCALLTYPE RuntimeMethodHandle::StripMethodInstantiation(MethodDesc * pMethod, QCall::ObjectHandleOnStack refMethod)
+extern "C" void QCALLTYPE RuntimeMethodHandle_StripMethodInstantiation(MethodDesc * pMethod, QCall::ObjectHandleOnStack refMethod)
{
QCALL_CONTRACT;
@@ -2723,7 +2720,7 @@ FCIMPL1(INT32, AssemblyHandle::GetToken, AssemblyBaseObject* pAssemblyUNSAFE) {
FCIMPLEND
-void QCALLTYPE ModuleHandle::GetPEKind(QCall::ModuleHandle pModule, DWORD* pdwPEKind, DWORD* pdwMachine)
+extern "C" void QCALLTYPE ModuleHandle_GetPEKind(QCall::ModuleHandle pModule, DWORD* pdwPEKind, DWORD* pdwMachine)
{
QCALL_CONTRACT;
@@ -2746,7 +2743,7 @@ FCIMPL1(INT32, ModuleHandle::GetMDStreamVersion, ReflectModuleBaseObject * pModu
}
FCIMPLEND
-void QCALLTYPE ModuleHandle::GetModuleType(QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE ModuleHandle_GetModuleType(QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
@@ -2801,7 +2798,7 @@ FCIMPL1(IMDInternalImport*, ModuleHandle::GetMetadataImport, ReflectModuleBaseOb
}
FCIMPLEND
-void QCALLTYPE ModuleHandle::ResolveType(QCall::ModuleHandle pModule, INT32 tkType, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount, QCall::ObjectHandleOnStack retType)
+extern "C" void QCALLTYPE ModuleHandle_ResolveType(QCall::ModuleHandle pModule, INT32 tkType, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount, QCall::ObjectHandleOnStack retType)
{
QCALL_CONTRACT;
@@ -2822,7 +2819,7 @@ void QCALLTYPE ModuleHandle::ResolveType(QCall::ModuleHandle pModule, INT32 tkTy
return;
}
-MethodDesc *QCALLTYPE ModuleHandle::ResolveMethod(QCall::ModuleHandle pModule, INT32 tkMemberRef, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount)
+extern "C" MethodDesc *QCALLTYPE ModuleHandle_ResolveMethod(QCall::ModuleHandle pModule, INT32 tkMemberRef, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount)
{
QCALL_CONTRACT;
@@ -2843,7 +2840,7 @@ MethodDesc *QCALLTYPE ModuleHandle::ResolveMethod(QCall::ModuleHandle pModule, I
return pMD;
}
-void QCALLTYPE ModuleHandle::ResolveField(QCall::ModuleHandle pModule, INT32 tkMemberRef, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount, QCall::ObjectHandleOnStack retField)
+extern "C" void QCALLTYPE ModuleHandle_ResolveField(QCall::ModuleHandle pModule, INT32 tkMemberRef, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount, QCall::ObjectHandleOnStack retField)
{
QCALL_CONTRACT;
@@ -2861,7 +2858,7 @@ void QCALLTYPE ModuleHandle::ResolveField(QCall::ModuleHandle pModule, INT32 tkM
return;
}
-void QCALLTYPE ModuleHandle::GetAssembly(QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retAssembly)
+extern "C" void QCALLTYPE ModuleHandle_GetAssembly(QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retAssembly)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/runtimehandles.h b/src/coreclr/vm/runtimehandles.h
index 284c8032bd3164..184f27a7a311fe 100644
--- a/src/coreclr/vm/runtimehandles.h
+++ b/src/coreclr/vm/runtimehandles.h
@@ -103,14 +103,9 @@ class RuntimeLocalVariableInfo : Object
CLR_BOOL _isPinned;
};
-class MdUtf8String {
-public:
- static
- BOOL QCALLTYPE EqualsCaseInsensitive(LPCUTF8 szLhs, LPCUTF8 szRhs, INT32 stringNumBytes);
+extern "C" BOOL QCALLTYPE MdUtf8String_EqualsCaseInsensitive(LPCUTF8 szLhs, LPCUTF8 szRhs, INT32 stringNumBytes);
- static
- ULONG QCALLTYPE HashCaseInsensitive(LPCUTF8 sz, INT32 stringNumBytes);
-};
+extern "C" ULONG QCALLTYPE MdUtf8String_HashCaseInsensitive(LPCUTF8 sz, INT32 stringNumBytes);
class RuntimeTypeHandle;
@@ -122,31 +117,8 @@ class RuntimeTypeHandle {
public:
// Static method on RuntimeTypeHandle
-
- static
- void QCALLTYPE GetActivationInfo(
- QCall::ObjectHandleOnStack pRuntimeType,
- PCODE* ppfnAllocator,
- void** pvAllocatorFirstArg,
- PCODE* ppfnCtor,
- BOOL* pfCtorIsPublic);
-
static FCDECL1(Object*, AllocateComObject, void* pClassFactory);
- static
- void QCALLTYPE MakeByRef(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType);
-
- static
- void QCALLTYPE MakePointer(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType);
-
- static
- void QCALLTYPE MakeSZArray(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType);
-
- static
- void QCALLTYPE MakeArray(QCall::TypeHandle pTypeHandle, INT32 rank, QCall::ObjectHandleOnStack retType);
-
- static BOOL QCALLTYPE IsCollectible(QCall::TypeHandle pTypeHandle);
-
static FCDECL1(ReflectClassBaseObject*, GetRuntimeType, void *th);
static FCDECL1_V(ReflectClassBaseObject*, GetTypeFromHandle, FCALLRuntimeTypeHandle th);
@@ -154,22 +126,6 @@ class RuntimeTypeHandle {
static FCDECL2(FC_BOOL_RET, IsEquivalentTo, ReflectClassBaseObject *rtType1UNSAFE, ReflectClassBaseObject *rtType2UNSAFE);
- static
- void QCALLTYPE PrepareMemberInfoCache(QCall::TypeHandle pMemberInfoCache);
-
- static
- void QCALLTYPE ConstructName(QCall::TypeHandle pTypeHandle, DWORD format, QCall::StringHandleOnStack retString);
-
- static
- void QCALLTYPE GetTypeByNameUsingCARules(LPCWSTR pwzClassName, QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retType);
-
- static
- void QCALLTYPE GetTypeByName(LPCWSTR pwzClassName, BOOL bThrowOnError, BOOL bIgnoreCase,
- QCall::StackCrawlMarkHandle pStackMark,
- QCall::ObjectHandleOnStack pAssemblyLoadContext,
- QCall::ObjectHandleOnStack retType,
- QCall::ObjectHandleOnStack keepAlive);
-
static FCDECL1(AssemblyBaseObject*, GetAssembly, ReflectClassBaseObject *pType);
static FCDECL1(ReflectClassBaseObject*, GetBaseType, ReflectClassBaseObject* pType);
static FCDECL1(ReflectModuleBaseObject*, GetModule, ReflectClassBaseObject* pType);
@@ -185,9 +141,6 @@ class RuntimeTypeHandle {
static FCDECL1(FC_BOOL_RET, IsInterface, ReflectClassBaseObject* pType);
static FCDECL1(FC_BOOL_RET, IsByRefLike, ReflectClassBaseObject* pType);
- static
- BOOL QCALLTYPE IsVisible(QCall::TypeHandle pTypeHandle);
-
static FCDECL2(FC_BOOL_RET, CanCastTo, ReflectClassBaseObject *pType, ReflectClassBaseObject *pTarget);
static FCDECL2(FC_BOOL_RET, IsInstanceOfType, ReflectClassBaseObject *pType, Object *object);
@@ -208,60 +161,62 @@ class RuntimeTypeHandle {
static
FCDECL1(FC_BOOL_RET, ContainsGenericVariables, PTR_ReflectClassBaseObject pType);
- static
- void QCALLTYPE GetInstantiation(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType, BOOL fAsRuntimeTypeArray);
-
- static
- void QCALLTYPE Instantiate(QCall::TypeHandle pTypeHandle, TypeHandle * pInstArray, INT32 cInstArray, QCall::ObjectHandleOnStack retType);
-
- static
- void QCALLTYPE GetGenericTypeDefinition(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType);
-
static FCDECL2(FC_BOOL_RET, CompareCanonicalHandles, PTR_ReflectClassBaseObject pLeft, PTR_ReflectClassBaseObject pRight);
static FCDECL1(PtrArray*, GetInterfaces, ReflectClassBaseObject *pType);
- static
- void QCALLTYPE GetConstraints(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retTypes);
-
- static
- PVOID QCALLTYPE GetGCHandle(QCall::TypeHandle pTypeHandle, INT32 handleType);
-
- static
- void QCALLTYPE FreeGCHandle(QCall::TypeHandle pTypeHandle, OBJECTHANDLE objHandle);
-
static FCDECL1(INT32, GetCorElementType, PTR_ReflectClassBaseObject pType);
static FCDECL1(ReflectClassBaseObject*, GetElementType, ReflectClassBaseObject* pType);
static FCDECL2(MethodDesc*, GetMethodAt, PTR_ReflectClassBaseObject pType, INT32 slot);
static FCDECL1(INT32, GetNumVirtuals, ReflectClassBaseObject *pType);
static FCDECL1(INT32, GetNumVirtualsAndStaticVirtuals, ReflectClassBaseObject *pType);
-
- static
- void QCALLTYPE VerifyInterfaceIsImplemented(QCall::TypeHandle pTypeHandle, QCall::TypeHandle pIFaceHandle);
-
- static
- MethodDesc* QCALLTYPE GetInterfaceMethodImplementation(QCall::TypeHandle pTypeHandle, QCall::TypeHandle pOwner, MethodDesc * pMD);
-
static FCDECL3(FC_BOOL_RET, GetFields, ReflectClassBaseObject *pType, INT32 **result, INT32 *pCount);
static FCDECL1(MethodDesc *, GetFirstIntroducedMethod, ReflectClassBaseObject* pType);
static FCDECL1(void, GetNextIntroducedMethod, MethodDesc **ppMethod);
- static
- void QCALLTYPE CreateInstanceForAnotherGenericParameter(QCall::TypeHandle pTypeHandle, TypeHandle *pInstArray, INT32 cInstArray, QCall::ObjectHandleOnStack pInstantiatedObject);
-
static
FCDECL1(IMDInternalImport*, GetMetadataImport, ReflectClassBaseObject * pModuleUNSAFE);
- static
- PVOID QCALLTYPE AllocateTypeAssociatedMemory(QCall::TypeHandle type, UINT32 size);
-
// Helper methods not called by managed code
static void ValidateTypeAbleToBeInstantiated(TypeHandle typeHandle, bool fGetUninitializedObject);
};
+extern "C" void QCALLTYPE RuntimeTypeHandle_CreateInstanceForAnotherGenericParameter(QCall::TypeHandle pTypeHandle, TypeHandle *pInstArray, INT32 cInstArray, QCall::ObjectHandleOnStack pInstantiatedObject);
+extern "C" void* QCALLTYPE RuntimeTypeHandle_AllocateTypeAssociatedMemory(QCall::TypeHandle type, uint32_t size);
+
+extern "C" PVOID QCALLTYPE QCall_GetGCHandleForTypeHandle(QCall::TypeHandle pTypeHandle, INT32 handleType);
+extern "C" void QCALLTYPE QCall_FreeGCHandleForTypeHandle(QCall::TypeHandle pTypeHandle, OBJECTHANDLE objHandle);
+
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetActivationInfo(
+ QCall::ObjectHandleOnStack pRuntimeType,
+ PCODE* ppfnAllocator,
+ void** pvAllocatorFirstArg,
+ PCODE* ppfnCtor,
+ BOOL* pfCtorIsPublic);
+extern "C" void QCALLTYPE RuntimeTypeHandle_MakeByRef(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType);
+extern "C" void QCALLTYPE RuntimeTypeHandle_MakePointer(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType);
+extern "C" void QCALLTYPE RuntimeTypeHandle_MakeSZArray(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType);
+extern "C" void QCALLTYPE RuntimeTypeHandle_MakeArray(QCall::TypeHandle pTypeHandle, INT32 rank, QCall::ObjectHandleOnStack retType);
+extern "C" BOOL QCALLTYPE RuntimeTypeHandle_IsCollectible(QCall::TypeHandle pTypeHandle);
+extern "C" void QCALLTYPE RuntimeTypeHandle_PrepareMemberInfoCache(QCall::TypeHandle pMemberInfoCache);
+extern "C" void QCALLTYPE RuntimeTypeHandle_ConstructName(QCall::TypeHandle pTypeHandle, DWORD format, QCall::StringHandleOnStack retString);
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetTypeByNameUsingCARules(LPCWSTR pwzClassName, QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retType);
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetTypeByName(LPCWSTR pwzClassName, BOOL bThrowOnError, BOOL bIgnoreCase,
+ QCall::StackCrawlMarkHandle pStackMark,
+ QCall::ObjectHandleOnStack pAssemblyLoadContext,
+ QCall::ObjectHandleOnStack retType,
+ QCall::ObjectHandleOnStack keepAlive);
+extern "C" BOOL QCALLTYPE RuntimeTypeHandle_IsVisible(QCall::TypeHandle pTypeHandle);
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetInstantiation(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType, BOOL fAsRuntimeTypeArray);
+extern "C" void QCALLTYPE RuntimeTypeHandle_Instantiate(QCall::TypeHandle pTypeHandle, TypeHandle * pInstArray, INT32 cInstArray, QCall::ObjectHandleOnStack retType);
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetGenericTypeDefinition(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retType);
+extern "C" void QCALLTYPE RuntimeTypeHandle_GetConstraints(QCall::TypeHandle pTypeHandle, QCall::ObjectHandleOnStack retTypes);
+extern "C" void QCALLTYPE RuntimeTypeHandle_VerifyInterfaceIsImplemented(QCall::TypeHandle pTypeHandle, QCall::TypeHandle pIFaceHandle);
+extern "C" MethodDesc* QCALLTYPE RuntimeTypeHandle_GetInterfaceMethodImplementation(QCall::TypeHandle pTypeHandle, QCall::TypeHandle pOwner, MethodDesc * pMD);
+
class RuntimeMethodHandle {
public:
@@ -296,24 +251,9 @@ class RuntimeMethodHandle {
MethodDesc *pMethod, OBJECTREF targetUNSAFE, INT32 attrs, OBJECTREF binderUNSAFE, PTRARRAYREF objsUNSAFE, OBJECTREF localeUNSAFE,
BOOL isBinderDefault, Assembly *caller, Assembly *reflectedClassAssembly, TypeHandle declaringType, SignatureNative* pSig, BOOL verifyAccess);
- static
- BOOL QCALLTYPE IsCAVisibleFromDecoratedType(
- QCall::TypeHandle targetTypeHandle,
- MethodDesc * pTargetCtor,
- QCall::TypeHandle sourceTypeHandle,
- QCall::ModuleHandle sourceModuleHandle);
-
static FCDECL4(void, SerializationInvoke, ReflectMethodObject *pMethodUNSAFE, Object* targetUNSAFE,
Object* serializationInfoUNSAFE, struct StreamingContextData * pContext);
- static
- void QCALLTYPE ConstructInstantiation(MethodDesc * pMethod, DWORD format, QCall::StringHandleOnStack retString);
-
- static
- void * QCALLTYPE GetFunctionPointer(MethodDesc * pMethod);
-
- static BOOL QCALLTYPE GetIsCollectible(MethodDesc * pMethod);
-
static FCDECL1(INT32, GetAttributes, MethodDesc *pMethod);
static FCDECL1(INT32, GetImplAttributes, ReflectMethodObject *pMethodUNSAFE);
static FCDECL1(ReflectClassBaseObject*, GetDeclaringType, MethodDesc *pMethod);
@@ -322,10 +262,6 @@ class RuntimeMethodHandle {
static FCDECL1(StringObject*, GetName, MethodDesc *pMethod);
static FCDECL1(LPCUTF8, GetUtf8Name, MethodDesc *pMethod);
static FCDECL2(FC_BOOL_RET, MatchesNameHash, MethodDesc * pMethod, ULONG hash);
-
- static
- void QCALLTYPE GetMethodInstantiation(MethodDesc * pMethod, QCall::ObjectHandleOnStack retTypes, BOOL fAsRuntimeTypeArray);
-
static
FCDECL1(FC_BOOL_RET, HasMethodInstantiation, MethodDesc *pMethod);
@@ -335,12 +271,6 @@ class RuntimeMethodHandle {
static
FCDECL1(FC_BOOL_RET, IsTypicalMethodDefinition, ReflectMethodObject *pMethodUNSAFE);
- static
- void QCALLTYPE GetTypicalMethodDefinition(MethodDesc * pMethod, QCall::ObjectHandleOnStack refMethod);
-
- static
- void QCALLTYPE StripMethodInstantiation(MethodDesc * pMethod, QCall::ObjectHandleOnStack refMethod);
-
static
FCDECL1(INT32, GetGenericParameterCount, MethodDesc * pMethod);
@@ -354,8 +284,6 @@ class RuntimeMethodHandle {
static
FCDECL1(Object*, GetResolver, MethodDesc * pMethod);
- static
- void QCALLTYPE Destroy(MethodDesc * pMethod);
static FCDECL2(RuntimeMethodBody*, GetMethodBody, ReflectMethodObject *pMethodUNSAFE, PTR_ReflectClassBaseObject pDeclaringType);
@@ -364,6 +292,20 @@ class RuntimeMethodHandle {
static FCDECL1(Object*, GetLoaderAllocator, MethodDesc *pMethod);
};
+extern "C" BOOL QCALLTYPE RuntimeMethodHandle_IsCAVisibleFromDecoratedType(
+ QCall::TypeHandle targetTypeHandle,
+ MethodDesc * pTargetCtor,
+ QCall::TypeHandle sourceTypeHandle,
+ QCall::ModuleHandle sourceModuleHandle);
+
+extern "C" void QCALLTYPE RuntimeMethodHandle_GetMethodInstantiation(MethodDesc * pMethod, QCall::ObjectHandleOnStack retTypes, BOOL fAsRuntimeTypeArray);
+
+extern "C" void QCALLTYPE RuntimeMethodHandle_ConstructInstantiation(MethodDesc * pMethod, DWORD format, QCall::StringHandleOnStack retString);
+extern "C" void * QCALLTYPE RuntimeMethodHandle_GetFunctionPointer(MethodDesc * pMethod);
+extern "C" BOOL QCALLTYPE RuntimeMethodHandle_GetIsCollectible(MethodDesc * pMethod);
+extern "C" void QCALLTYPE RuntimeMethodHandle_GetTypicalMethodDefinition(MethodDesc * pMethod, QCall::ObjectHandleOnStack refMethod);
+extern "C" void QCALLTYPE RuntimeMethodHandle_StripMethodInstantiation(MethodDesc * pMethod, QCall::ObjectHandleOnStack refMethod);
+extern "C" void QCALLTYPE RuntimeMethodHandle_Destroy(MethodDesc * pMethod);
class RuntimeFieldHandle {
public:
@@ -388,30 +330,25 @@ class ModuleHandle {
static FCDECL5(ReflectMethodObject*, GetDynamicMethod, ReflectMethodObject *pMethodUNSAFE, ReflectModuleBaseObject *pModuleUNSAFE, StringObject *name, U1Array *sig, Object *resolver);
static FCDECL1(INT32, GetToken, ReflectModuleBaseObject *pModuleUNSAFE);
- static
- void QCALLTYPE GetModuleType(QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retType);
-
static
FCDECL1(IMDInternalImport*, GetMetadataImport, ReflectModuleBaseObject * pModuleUNSAFE);
static
- void QCALLTYPE ResolveType(QCall::ModuleHandle pModule, INT32 tkType, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount, QCall::ObjectHandleOnStack retType);
+ FCDECL1(INT32, GetMDStreamVersion, ReflectModuleBaseObject * pModuleUNSAFE);
- static
- MethodDesc * QCALLTYPE ResolveMethod(QCall::ModuleHandle pModule, INT32 tkMemberRef, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount);
+};
- static
- void QCALLTYPE ResolveField(QCall::ModuleHandle pModule, INT32 tkMemberRef, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount, QCall::ObjectHandleOnStack retField);
+extern "C" void QCALLTYPE ModuleHandle_GetModuleType(QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retType);
- static
- void QCALLTYPE GetAssembly(QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retAssembly);
+extern "C" void QCALLTYPE ModuleHandle_ResolveType(QCall::ModuleHandle pModule, INT32 tkType, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount, QCall::ObjectHandleOnStack retType);
- static
- void QCALLTYPE GetPEKind(QCall::ModuleHandle pModule, DWORD* pdwPEKind, DWORD* pdwMachine);
+extern "C" MethodDesc * QCALLTYPE ModuleHandle_ResolveMethod(QCall::ModuleHandle pModule, INT32 tkMemberRef, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount);
- static
- FCDECL1(INT32, GetMDStreamVersion, ReflectModuleBaseObject * pModuleUNSAFE);
-};
+extern "C" void QCALLTYPE ModuleHandle_ResolveField(QCall::ModuleHandle pModule, INT32 tkMemberRef, TypeHandle *typeArgs, INT32 typeArgsCount, TypeHandle *methodArgs, INT32 methodArgsCount, QCall::ObjectHandleOnStack retField);
+
+extern "C" void QCALLTYPE ModuleHandle_GetAssembly(QCall::ModuleHandle pModule, QCall::ObjectHandleOnStack retAssembly);
+
+extern "C" void QCALLTYPE ModuleHandle_GetPEKind(QCall::ModuleHandle pModule, DWORD* pdwPEKind, DWORD* pdwMachine);
class AssemblyHandle {
diff --git a/src/coreclr/vm/stubhelpers.cpp b/src/coreclr/vm/stubhelpers.cpp
index 1029a9dca2145b..8e15d3aa54a834 100644
--- a/src/coreclr/vm/stubhelpers.cpp
+++ b/src/coreclr/vm/stubhelpers.cpp
@@ -461,7 +461,7 @@ FCIMPL4(Object*, StubHelpers::InterfaceMarshaler__ConvertToManaged, IUnknown **p
}
FCIMPLEND
-void QCALLTYPE StubHelpers::InterfaceMarshaler__ClearNative(IUnknown * pUnk)
+extern "C" void QCALLTYPE InterfaceMarshaler__ClearNative(IUnknown * pUnk)
{
QCALL_CONTRACT;
diff --git a/src/coreclr/vm/stubhelpers.h b/src/coreclr/vm/stubhelpers.h
index b95b4230a96835..308af895ccadc7 100644
--- a/src/coreclr/vm/stubhelpers.h
+++ b/src/coreclr/vm/stubhelpers.h
@@ -54,7 +54,6 @@ class StubHelpers
static FCDECL4(IUnknown*, InterfaceMarshaler__ConvertToNative, Object* pObjUNSAFE, MethodTable* pItfMT, MethodTable* pClsMT, DWORD dwFlags);
static FCDECL4(Object*, InterfaceMarshaler__ConvertToManaged, IUnknown **ppUnk, MethodTable *pItfMT, MethodTable *pClsMT, DWORD dwFlags);
- static void QCALLTYPE InterfaceMarshaler__ClearNative(IUnknown * pUnk);
static FCDECL1(Object *, InterfaceMarshaler__ConvertToManagedWithoutUnboxing, IUnknown *pNative);
#endif // FEATURE_COMINTEROP
@@ -107,4 +106,8 @@ class StubHelpers
static FCDECL0(void*, NextCallReturnAddress);
};
+#ifdef FEATURE_COMINTEROP
+extern "C" void QCALLTYPE InterfaceMarshaler__ClearNative(IUnknown * pUnk);
+#endif
+
#endif // __STUBHELPERS_h__
diff --git a/src/coreclr/vm/typeparse.cpp b/src/coreclr/vm/typeparse.cpp
index 258b50d86916b1..6abed5799f3009 100644
--- a/src/coreclr/vm/typeparse.cpp
+++ b/src/coreclr/vm/typeparse.cpp
@@ -110,7 +110,7 @@ SAFEHANDLE TypeName::GetSafeHandle()
}
/*static*/
-void QCALLTYPE TypeName::QCreateTypeNameParser(LPCWSTR wszTypeName, QCall::ObjectHandleOnStack pHandle, BOOL throwOnError)
+extern "C" void QCALLTYPE TypeName_CreateTypeNameParser(LPCWSTR wszTypeName, QCall::ObjectHandleOnStack pHandle, BOOL throwOnError)
{
QCALL_CONTRACT;
@@ -143,7 +143,7 @@ void QCALLTYPE TypeName::QCreateTypeNameParser(LPCWSTR wszTypeName, QCall::Objec
}
/*static*/
-void QCALLTYPE TypeName::QReleaseTypeNameParser(TypeName * pTypeName)
+extern "C" void QCALLTYPE TypeName_ReleaseTypeNameParser(TypeName * pTypeName)
{
CONTRACTL
{
@@ -160,7 +160,7 @@ void QCALLTYPE TypeName::QReleaseTypeNameParser(TypeName * pTypeName)
}
/*static*/
-void QCALLTYPE TypeName::QGetNames(TypeName * pTypeName, QCall::ObjectHandleOnStack pNames)
+extern "C" void QCALLTYPE TypeName_GetNames(TypeName * pTypeName, QCall::ObjectHandleOnStack pNames)
{
CONTRACTL
{
@@ -203,7 +203,7 @@ void QCALLTYPE TypeName::QGetNames(TypeName * pTypeName, QCall::ObjectHandleOnSt
}
/*static*/
-void QCALLTYPE TypeName::QGetTypeArguments(TypeName * pTypeName, QCall::ObjectHandleOnStack pTypeArguments)
+extern "C" void QCALLTYPE TypeName_GetTypeArguments(TypeName * pTypeName, QCall::ObjectHandleOnStack pTypeArguments)
{
CONTRACTL
{
@@ -248,7 +248,7 @@ void QCALLTYPE TypeName::QGetTypeArguments(TypeName * pTypeName, QCall::ObjectHa
}
/*static*/
-void QCALLTYPE TypeName::QGetModifiers(TypeName * pTypeName, QCall::ObjectHandleOnStack pModifiers)
+extern "C" void QCALLTYPE TypeName_GetModifiers(TypeName * pTypeName, QCall::ObjectHandleOnStack pModifiers)
{
CONTRACTL
{
@@ -292,7 +292,7 @@ void QCALLTYPE TypeName::QGetModifiers(TypeName * pTypeName, QCall::ObjectHandle
}
/*static*/
-void QCALLTYPE TypeName::QGetAssemblyName(TypeName * pTypeName, QCall::StringHandleOnStack pAssemblyName)
+extern "C" void QCALLTYPE TypeName_GetAssemblyName(TypeName * pTypeName, QCall::StringHandleOnStack pAssemblyName)
{
CONTRACTL
{
diff --git a/src/coreclr/vm/typeparse.h b/src/coreclr/vm/typeparse.h
index c7728a8a9cc14f..5a19c980ad5e1b 100644
--- a/src/coreclr/vm/typeparse.h
+++ b/src/coreclr/vm/typeparse.h
@@ -269,13 +269,6 @@ class TypeName
virtual ~TypeName();
public:
- static void QCALLTYPE QCreateTypeNameParser (LPCWSTR wszTypeName, QCall::ObjectHandleOnStack pNames, BOOL throwOnError);
- static void QCALLTYPE QReleaseTypeNameParser(TypeName * pTypeName);
- static void QCALLTYPE QGetNames (TypeName * pTypeName, QCall::ObjectHandleOnStack pNames);
- static void QCALLTYPE QGetTypeArguments (TypeName * pTypeName, QCall::ObjectHandleOnStack pTypeArguments);
- static void QCALLTYPE QGetModifiers (TypeName * pTypeName, QCall::ObjectHandleOnStack pModifiers);
- static void QCALLTYPE QGetAssemblyName (TypeName * pTypeName, QCall::StringHandleOnStack pAssemblyName);
-
//-------------------------------------------------------------------------------------------
// Retrieves a type from an assembly. It requires the caller to know which assembly
// the type is in.
@@ -333,6 +326,10 @@ class TypeName
public:
SString* GetAssembly() { WRAPPER_NO_CONTRACT; return &m_assembly; }
+ SArray& GetNames() { WRAPPER_NO_CONTRACT; return m_names; }
+ SArray& GetGenericArguments() { WRAPPER_NO_CONTRACT; return m_genericArguments; }
+ SArray& GetSignature() { WRAPPER_NO_CONTRACT; return m_signature; }
+ SAFEHANDLE GetSafeHandle();
private:
TypeName() : m_bIsGenericArgument(FALSE), m_count(0) { LIMITED_METHOD_CONTRACT; }
@@ -351,9 +348,6 @@ class TypeName
return m_names.AppendEx(m_nestNameFactory.Create());
}
- SArray& GetNames() { WRAPPER_NO_CONTRACT; return m_names; }
- SArray& GetGenericArguments() { WRAPPER_NO_CONTRACT; return m_genericArguments; }
- SArray& GetSignature() { WRAPPER_NO_CONTRACT; return m_signature; }
void SetByRef() { WRAPPER_NO_CONTRACT; m_signature.Append(ELEMENT_TYPE_BYREF); }
void SetPointer() { WRAPPER_NO_CONTRACT; m_signature.Append(ELEMENT_TYPE_PTR); }
void SetSzArray() { WRAPPER_NO_CONTRACT; m_signature.Append(ELEMENT_TYPE_SZARRAY); }
@@ -402,7 +396,6 @@ class TypeName
return GetTypeHaveAssemblyHelper(pAssembly, bThrowIfNotFound, bIgnoreCase, pKeepAlive, TRUE);
}
TypeHandle GetTypeHaveAssemblyHelper(Assembly* pAssembly, BOOL bThrowIfNotFound, BOOL bIgnoreCase, OBJECTREF *pKeepAlive, BOOL bRecurse);
- SAFEHANDLE GetSafeHandle();
private:
BOOL m_bIsGenericArgument;
@@ -414,4 +407,11 @@ class TypeName
Factory > m_nestNameFactory;
};
+extern "C" void QCALLTYPE TypeName_CreateTypeNameParser (LPCWSTR wszTypeName, QCall::ObjectHandleOnStack pNames, BOOL throwOnError);
+extern "C" void QCALLTYPE TypeName_ReleaseTypeNameParser(TypeName * pTypeName);
+extern "C" void QCALLTYPE TypeName_GetNames (TypeName * pTypeName, QCall::ObjectHandleOnStack pNames);
+extern "C" void QCALLTYPE TypeName_GetTypeArguments (TypeName * pTypeName, QCall::ObjectHandleOnStack pTypeArguments);
+extern "C" void QCALLTYPE TypeName_GetModifiers (TypeName * pTypeName, QCall::ObjectHandleOnStack pModifiers);
+extern "C" void QCALLTYPE TypeName_GetAssemblyName (TypeName * pTypeName, QCall::StringHandleOnStack pAssemblyName);
+
#endif
diff --git a/src/coreclr/vm/win32threadpool.h b/src/coreclr/vm/win32threadpool.h
index 4f3397821ded49..00d53d73a59f31 100644
--- a/src/coreclr/vm/win32threadpool.h
+++ b/src/coreclr/vm/win32threadpool.h
@@ -968,15 +968,16 @@ class ThreadpoolMgr
#endif // !TARGET_UNIX
+ static void PerformGateActivities(int cpuUtilization);
+ static bool NeedGateThreadForIOCompletions();
+
private:
static BOOL IsIoPending();
static BOOL CreateGateThread();
static void EnsureGateThreadRunning();
- static bool NeedGateThreadForIOCompletions();
static bool ShouldGateThreadKeepRunning();
static DWORD WINAPI GateThreadStart(LPVOID lpArgs);
- static void PerformGateActivities(int cpuUtilization);
static BOOL SufficientDelaySinceLastSample(unsigned int LastThreadCreationTime,
unsigned NumThreads, // total number of threads of that type (worker or CP)
double throttleRate=0.0 // the delay is increased by this percentage for each extra thread
diff --git a/src/libraries/Native/AnyOS/System.IO.Compression.Native/entrypoints.c b/src/libraries/Native/AnyOS/System.IO.Compression.Native/entrypoints.c
index f363a91eb1add3..c9cd85ca437825 100644
--- a/src/libraries/Native/AnyOS/System.IO.Compression.Native/entrypoints.c
+++ b/src/libraries/Native/AnyOS/System.IO.Compression.Native/entrypoints.c
@@ -1,7 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#include "../../AnyOS/entrypoints.h"
+#include
// Include System.IO.Compression.Native headers
#include "../zlib/pal_zlib.h"
@@ -10,8 +10,6 @@
#include "../brotli/include/brotli/port.h"
#include "../brotli/include/brotli/types.h"
-#include "../../AnyOS/entrypoints.h"
-
static const Entry s_compressionNative[] =
{
DllImportEntry(BrotliDecoderCreateInstance)
@@ -40,5 +38,5 @@ EXTERN_C const void* CompressionResolveDllImport(const char* name);
EXTERN_C const void* CompressionResolveDllImport(const char* name)
{
- return ResolveDllImport(s_compressionNative, lengthof(s_compressionNative), name);
+ return minipal_resolve_dllimport(s_compressionNative, lengthof(s_compressionNative), name);
}
diff --git a/src/libraries/Native/Unix/CMakeLists.txt b/src/libraries/Native/Unix/CMakeLists.txt
index 1b0fbe036d3b65..e2939a6de899b6 100644
--- a/src/libraries/Native/Unix/CMakeLists.txt
+++ b/src/libraries/Native/Unix/CMakeLists.txt
@@ -15,6 +15,8 @@ project(CoreFX C)
include(../../../../eng/native/configurepaths.cmake)
include(${CLR_ENG_NATIVE_DIR}/configurecompiler.cmake)
+include_directories(${CLR_SRC_NATIVE_DIR})
+
set(CMAKE_MACOSX_RPATH ON)
if(CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON)
diff --git a/src/libraries/Native/Unix/System.Globalization.Native/entrypoints.c b/src/libraries/Native/Unix/System.Globalization.Native/entrypoints.c
index f8ec0e22be77dd..70db3145cd48b3 100644
--- a/src/libraries/Native/Unix/System.Globalization.Native/entrypoints.c
+++ b/src/libraries/Native/Unix/System.Globalization.Native/entrypoints.c
@@ -1,7 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#include "../../AnyOS/entrypoints.h"
+#include
typedef uint16_t UChar;
@@ -64,5 +64,5 @@ EXTERN_C const void* GlobalizationResolveDllImport(const char* name);
EXTERN_C const void* GlobalizationResolveDllImport(const char* name)
{
- return ResolveDllImport(s_globalizationNative, lengthof(s_globalizationNative), name);
+ return minipal_resolve_dllimport(s_globalizationNative, lengthof(s_globalizationNative), name);
}
diff --git a/src/libraries/Native/Unix/System.Native/CMakeLists.txt b/src/libraries/Native/Unix/System.Native/CMakeLists.txt
index 0adbefe8c1c0e1..8fea908f798014 100644
--- a/src/libraries/Native/Unix/System.Native/CMakeLists.txt
+++ b/src/libraries/Native/Unix/System.Native/CMakeLists.txt
@@ -8,8 +8,6 @@ if (CLR_CMAKE_TARGET_OSX)
add_definitions(-D_DARWIN_C_SOURCE)
endif ()
-include_directories("${CLR_SRC_NATIVE_DIR}")
-
set(NATIVE_SOURCES
pal_errno.c
pal_interfaceaddresses.c
diff --git a/src/libraries/Native/Unix/System.Native/entrypoints.c b/src/libraries/Native/Unix/System.Native/entrypoints.c
index e21cfb69884b18..2440e3fcd41a31 100644
--- a/src/libraries/Native/Unix/System.Native/entrypoints.c
+++ b/src/libraries/Native/Unix/System.Native/entrypoints.c
@@ -1,7 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#include "../../AnyOS/entrypoints.h"
+#include
// Include System.Native headers
#include "pal_autoreleasepool.h"
@@ -269,5 +269,5 @@ EXTERN_C const void* SystemResolveDllImport(const char* name);
EXTERN_C const void* SystemResolveDllImport(const char* name)
{
- return ResolveDllImport(s_sysNative, lengthof(s_sysNative), name);
+ return minipal_resolve_dllimport(s_sysNative, lengthof(s_sysNative), name);
}
diff --git a/src/libraries/Native/Unix/System.Net.Security.Native/entrypoints.c b/src/libraries/Native/Unix/System.Net.Security.Native/entrypoints.c
index 56d2bde8ce6e0f..6c442722734e5f 100644
--- a/src/libraries/Native/Unix/System.Net.Security.Native/entrypoints.c
+++ b/src/libraries/Native/Unix/System.Net.Security.Native/entrypoints.c
@@ -1,7 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#include "../../AnyOS/entrypoints.h"
+#include
// Include System.Net.Security.Native headers
#include "pal_gssapi.h"
@@ -33,5 +33,5 @@ EXTERN_C const void* SecurityResolveDllImport(const char* name);
EXTERN_C const void* SecurityResolveDllImport(const char* name)
{
- return ResolveDllImport(s_securityNative, lengthof(s_securityNative), name);
+ return minipal_resolve_dllimport(s_securityNative, lengthof(s_securityNative), name);
}
diff --git a/src/libraries/Native/Unix/System.Security.Cryptography.Native.Apple/entrypoints.c b/src/libraries/Native/Unix/System.Security.Cryptography.Native.Apple/entrypoints.c
index db75e90b3a4365..c6df8a210029bc 100644
--- a/src/libraries/Native/Unix/System.Security.Cryptography.Native.Apple/entrypoints.c
+++ b/src/libraries/Native/Unix/System.Security.Cryptography.Native.Apple/entrypoints.c
@@ -1,7 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#include "../../AnyOS/entrypoints.h"
+#include
// Include System.Security.Cryptography.Native.Apple headers
#include "pal_digest.h"
@@ -131,5 +131,5 @@ EXTERN_C const void* CryptoAppleResolveDllImport(const char* name);
EXTERN_C const void* CryptoAppleResolveDllImport(const char* name)
{
- return ResolveDllImport(s_cryptoAppleNative, lengthof(s_cryptoAppleNative), name);
+ return minipal_resolve_dllimport(s_cryptoAppleNative, lengthof(s_cryptoAppleNative), name);
}
diff --git a/src/libraries/Native/Unix/System.Security.Cryptography.Native/entrypoints.c b/src/libraries/Native/Unix/System.Security.Cryptography.Native/entrypoints.c
index 102ccd91e8b44b..2a00d550854597 100644
--- a/src/libraries/Native/Unix/System.Security.Cryptography.Native/entrypoints.c
+++ b/src/libraries/Native/Unix/System.Security.Cryptography.Native/entrypoints.c
@@ -1,7 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#include "../../AnyOS/entrypoints.h"
+#include
// Include System.Security.Cryptography.Native headers
#include "openssl.h"
@@ -336,5 +336,5 @@ EXTERN_C const void* CryptoResolveDllImport(const char* name);
EXTERN_C const void* CryptoResolveDllImport(const char* name)
{
- return ResolveDllImport(s_cryptoNative, lengthof(s_cryptoNative), name);
+ return minipal_resolve_dllimport(s_cryptoNative, lengthof(s_cryptoNative), name);
}
diff --git a/src/libraries/Native/Windows/CMakeLists.txt b/src/libraries/Native/Windows/CMakeLists.txt
index 6a3f58e8420f5e..8c92fc70c30624 100644
--- a/src/libraries/Native/Windows/CMakeLists.txt
+++ b/src/libraries/Native/Windows/CMakeLists.txt
@@ -1,6 +1,8 @@
cmake_minimum_required(VERSION 3.16)
cmake_policy(SET CMP0091 NEW)
+include(../../../../eng/native/configurepaths.cmake)
+
# C Compiler flags
SET (CMAKE_C_FLAGS_INIT "/W3 /FC")
SET (CMAKE_C_FLAGS_DEBUG_INIT "/Od /Zi")
@@ -125,6 +127,8 @@ endif ()
# as other asserts should still be included.
add_compile_definitions($<$:NDEBUG>)
+include_directories(${CLR_SRC_NATIVE_DIR})
+
# we only need to build System.Globalization.Native when building static libs.
if(STATIC_LIBS_ONLY)
add_subdirectory(../Unix/System.Globalization.Native System.Globalization.Native)
diff --git a/src/mono/mono/metadata/CMakeLists.txt b/src/mono/mono/metadata/CMakeLists.txt
index 72fe5b1e60fbbd..c661ad04fbd08e 100644
--- a/src/mono/mono/metadata/CMakeLists.txt
+++ b/src/mono/mono/metadata/CMakeLists.txt
@@ -180,7 +180,6 @@ set(metadata_common_sources
native-library.h
native-library.c
native-library-qcall.c
- qcall-def.h
loaded-images-internals.h
loaded-images.c
abi-details.h
diff --git a/src/mono/mono/metadata/native-library-qcall.c b/src/mono/mono/metadata/native-library-qcall.c
index 232b2df120b793..519d37daecf943 100644
--- a/src/mono/mono/metadata/native-library-qcall.c
+++ b/src/mono/mono/metadata/native-library-qcall.c
@@ -1,118 +1,13 @@
-#include "config.h"
-#include "mono/metadata/assembly-internals.h"
-#include "mono/metadata/class-internals.h"
-#include "mono/metadata/icall-decl.h"
-#include "mono/metadata/loader-internals.h"
-#include "mono/metadata/loader.h"
-#include "mono/metadata/object-internals.h"
-#include "mono/metadata/reflection-internals.h"
-#include "mono/utils/checked-build.h"
-#include "mono/utils/mono-compiler.h"
-#include "mono/utils/mono-logger-internals.h"
-#include "mono/utils/mono-path.h"
+#include
#include "mono/metadata/native-library.h"
-enum {
- func_flag_end_of_array = 0x01,
- func_flag_has_signature = 0x02,
- func_flag_unreferenced = 0x04, // Suppress unused fcall check
- func_flag_qcall = 0x08, // QCall - mscorlib.dll to mscorwks.dll transition implemented as PInvoke
-};
-
-static const MonoQCallDef c_qcalls[] =
+static Entry mono_qcalls[] =
{
-#ifndef DISABLE_QCALLS
- #define FCClassElement(name,namespace,funcs) {name, namespace, funcs},
- #include "mono/metadata/qcall-def.h"
- #undef FCClassElement
-#endif
+ DllImportEntry(NULL) // This NULL entry can be removed when a QCall is added to Mono (and added to this array)
};
-const int c_nECClasses = sizeof (c_qcalls) / sizeof (c_qcalls[0]);
-
-static gboolean is_end_of_array (MonoQCallFunc *func) { return !!((int)func->flags & func_flag_end_of_array); }
-static gboolean has_signature (MonoQCallFunc *func) { return !!((int)func->flags & func_flag_has_signature); }
-static gboolean is_unreferenced (MonoQCallFunc *func) { return !!((int)func->flags & func_flag_unreferenced); }
-static gboolean is_qcall (MonoQCallFunc *func) { return !!((int)func->flags & func_flag_qcall); }
-//CorInfoIntrinsics IntrinsicID(ECFunc *func) { return (CorInfoIntrinsics)((INT8)(func->m_dwFlags >> 16)); }
-//int DynamicID(ECFunc *func) { return (int) ((int8)(func->m_dwFlags >> 24)); }
-
-static MonoQCallFunc *
-next_in_array (MonoQCallFunc *func)
-{
- return (MonoQCallFunc *)((char *)func +sizeof (MonoQCallFunc));
- //(HasSignature(func) ? sizeof(ECFunc) : offsetof(ECFunc, func->m_pMethodSig)));
-}
-
-static int
-find_impls_index_for_class (MonoMethod *method)
-{
- const char *namespace_name = m_class_get_name_space (method->klass);
- const char *name = m_class_get_name (method->klass);
-
- if (name == NULL)
- return -1;
-
- unsigned low = 0;
- unsigned high = c_nECClasses;
-
-#ifdef DEBUG
- static bool checkedSort = FALSE;
- if (!checkedSort) {
- checkedSort = TRUE;
- for (unsigned i = 1; i < high; i++) {
- int cmp = strcmp (c_qcalls[i].class_name, c_qcalls[i-1].class_name);
- if (cmp == 0)
- cmp = strcmp (c_qcalls[i].namespace_name, c_qcalls[i-1].namespace_name);
- g_assert (cmp > 0);
- }
- }
-#endif // DEBUG
- while (high > low) {
- unsigned mid = (high + low) / 2;
- int cmp = strcmp (name, c_qcalls[mid].class_name);
- if (cmp == 0)
- cmp = strcmp (namespace_name, c_qcalls[mid].namespace_name);
-
- if (cmp == 0) {
- return mid;
- }
- if (cmp > 0)
- low = mid + 1;
- else
- high = mid;
- }
- return -1;
-}
-
-static int
-find_index_for_method (MonoMethod *method, const void **impls)
-{
- const char *method_name = method->name;
- for (MonoQCallFunc *cur = (MonoQCallFunc *)impls; !is_end_of_array (cur); cur = next_in_array (cur))
- {
- if (strcmp (cur->method_name, method_name) != 0)
- continue;
- return (int)((const void**)cur - impls);
- }
-
- return -1;
-}
-
gpointer
-mono_lookup_pinvoke_qcall_internal (MonoMethod *method, MonoLookupPInvokeStatus *status_out)
+mono_lookup_pinvoke_qcall_internal (const char *name)
{
- int pos_class = find_impls_index_for_class (method);
- if (pos_class < 0) {
- mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_QCALL,
- "Couldn't find class: '%s' in namespace '%s'.", m_class_get_name (method->klass), m_class_get_name_space (method->klass));
- return NULL;
- }
- int pos_method = find_index_for_method (method, c_qcalls[pos_class].functions);
- if (pos_method < 0) {
- mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_QCALL,
- "Couldn't find method: '%s' in class '%s' in namespace '%s'.", method->name, m_class_get_name (method->klass), m_class_get_name_space (method->klass));
- return NULL;
- }
- return (gpointer)c_qcalls[pos_class].functions[pos_method+1];
+ return (gpointer)minipal_resolve_dllimport(mono_qcalls, lengthof(mono_qcalls), name);
}
diff --git a/src/mono/mono/metadata/native-library.c b/src/mono/mono/metadata/native-library.c
index e5d4503684f8be..e32515ae8dcd14 100644
--- a/src/mono/mono/metadata/native-library.c
+++ b/src/mono/mono/metadata/native-library.c
@@ -1004,7 +1004,7 @@ lookup_pinvoke_call_impl (MonoMethod *method, MonoLookupPInvokeStatus *status_ou
/* If qcalls are disabled, we fall back to the normal pinvoke code for them */
#ifndef DISABLE_QCALLS
if (strcmp (new_scope, "QCall") == 0) {
- piinfo->addr = mono_lookup_pinvoke_qcall_internal (method, status_out);
+ piinfo->addr = mono_lookup_pinvoke_qcall_internal (new_import);
if (!piinfo->addr) {
mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_DLLIMPORT,
"Unable to find qcall for '%s'.",
diff --git a/src/mono/mono/metadata/native-library.h b/src/mono/mono/metadata/native-library.h
index 4ce9ce70a8d7df..60259949b24101 100644
--- a/src/mono/mono/metadata/native-library.h
+++ b/src/mono/mono/metadata/native-library.h
@@ -30,20 +30,7 @@ typedef struct MonoLookupPInvokeStatus {
} MonoLookupPInvokeStatus;
gpointer
-mono_lookup_pinvoke_qcall_internal (MonoMethod *method, MonoLookupPInvokeStatus *error);
-
-typedef struct MonoQCallDef
-{
- const char *class_name;
- const char *namespace_name;
- const void **functions;
-} MonoQCallDef;
-
-typedef struct MonoQCallFunc {
- intptr_t flags; //legal values (0x01 - end of array mareker, 0x08 - qcall)
- void *implementation;
- const char *method_name;
-} MonoQCallFunc;
+mono_lookup_pinvoke_qcall_internal (const char *name);
void
mono_loader_install_pinvoke_override (PInvokeOverrideFn override_fn);
diff --git a/src/mono/mono/metadata/qcall-def.h b/src/mono/mono/metadata/qcall-def.h
deleted file mode 100644
index 7341edddef2929..00000000000000
--- a/src/mono/mono/metadata/qcall-def.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * \file
- * This file contains the default set of the mono qcalls.
- * Each type that has qcall methods must be declared here
- * with the FCClassElement macro as follows:
- *
- * FCClassElement(class_name, namespace, symbol_name)
- * where symbol_name is an array of MonoQCallFunc.
- *
- * FCClassElements have to be sorted by name then namespace,
- * but that the functions in each one can be in any order, but
- * have to end with a func_flag_end_of_array (0x01) entry.
- **/
-
-FCClassElement("", "", NULL)
diff --git a/src/libraries/Native/AnyOS/entrypoints.h b/src/native/common/entrypoints.h
similarity index 85%
rename from src/libraries/Native/AnyOS/entrypoints.h
rename to src/native/common/entrypoints.h
index ce7a7e2c5a2bfb..79cd2b509bf792 100644
--- a/src/libraries/Native/AnyOS/entrypoints.h
+++ b/src/native/common/entrypoints.h
@@ -20,7 +20,7 @@ typedef struct
#define DllImportEntry(impl) \
{#impl, (void*)impl},
-static const void* ResolveDllImport(const Entry* resolutionTable, size_t tableLength, const char* name)
+static const void* minipal_resolve_dllimport(const Entry* resolutionTable, size_t tableLength, const char* name)
{
for (size_t i = 0; i < tableLength; i++)
{