void DACRaiseException(TADDR *args, UINT argCount)
{
+ // The compiler doesn't like try/catch and constract macros together
+ WRAPPER_NO_CONTRACT;
+
struct Param
{
TADDR *args;
void DACNotifyExceptionHelper(TADDR *args, UINT argCount)
{
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ SO_INTOLERANT;
+ MODE_ANY;
+ }
+ CONTRACTL_END;
+
_ASSERTE(argCount <= MAX_CLR_NOTIFICATION_ARGS);
if (IsDebuggerPresent() && !CORDebuggerAttached())
void InitializeClrNotifications()
{
- g_clrNotificationCrst.Init(CrstClrNotification);
+ g_clrNotificationCrst.Init(CrstClrNotification, CRST_UNSAFE_ANYMODE);
g_clrNotificationArguments[0] = NULL;
}
// called from the runtime
void DACNotify::DoJITNotification(MethodDesc *MethodDescPtr)
{
- WRAPPER_NO_CONTRACT;
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ SO_INTOLERANT;
+ MODE_PREEMPTIVE;
+ }
+ CONTRACTL_END;
+
TADDR Args[2] = { JIT_NOTIFICATION, (TADDR) MethodDescPtr };
DACNotifyExceptionHelper(Args, 2);
}
void DACNotify::DoJITDiscardNotification(MethodDesc *MethodDescPtr)
{
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ SO_INTOLERANT;
+ MODE_PREEMPTIVE;
+ }
+ CONTRACTL_END;
+
TADDR Args[2] = { JIT_DISCARD_NOTIFICATION, (TADDR) MethodDescPtr };
DACNotifyExceptionHelper(Args, 2);
}
void DACNotify::DoModuleLoadNotification(Module *ModulePtr)
{
- WRAPPER_NO_CONTRACT;
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ SO_INTOLERANT;
+ MODE_PREEMPTIVE;
+ }
+ CONTRACTL_END;
+
if ((g_dacNotificationFlags & CLRDATA_NOTIFY_ON_MODULE_LOAD) != 0)
{
TADDR Args[2] = { MODULE_LOAD_NOTIFICATION, (TADDR) ModulePtr};
void DACNotify::DoModuleUnloadNotification(Module *ModulePtr)
{
- WRAPPER_NO_CONTRACT;
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ SO_INTOLERANT;
+ MODE_PREEMPTIVE;
+ }
+ CONTRACTL_END;
+
if ((g_dacNotificationFlags & CLRDATA_NOTIFY_ON_MODULE_UNLOAD) != 0)
{
TADDR Args[2] = { MODULE_UNLOAD_NOTIFICATION, (TADDR) ModulePtr};
void DACNotify::DoExceptionNotification(Thread* ThreadPtr)
{
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ SO_INTOLERANT;
+ MODE_PREEMPTIVE;
+ }
+ CONTRACTL_END;
+
if ((g_dacNotificationFlags & CLRDATA_NOTIFY_ON_EXCEPTION) != 0)
{
TADDR Args[2] = { EXCEPTION_NOTIFICATION, (TADDR) ThreadPtr};
void DACNotify::DoGCNotification(const GcEvtArgs& args)
{
- WRAPPER_NO_CONTRACT;
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ SO_INTOLERANT;
+ MODE_PREEMPTIVE;
+ }
+ CONTRACTL_END;
+
if (args.typ == GC_MARK_END)
{
TADDR Args[3] = { GC_NOTIFICATION, (TADDR) args.typ, args.condemnedGeneration };
void DACNotify::DoExceptionCatcherEnterNotification(MethodDesc *MethodDescPtr, DWORD nativeOffset)
{
- WRAPPER_NO_CONTRACT;
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ SO_INTOLERANT;
+ MODE_COOPERATIVE;
+ }
+ CONTRACTL_END;
+
if ((g_dacNotificationFlags & CLRDATA_NOTIFY_ON_EXCEPTION_CATCH_ENTER) != 0)
{
TADDR Args[3] = { CATCH_ENTER_NOTIFICATION, (TADDR) MethodDescPtr, (TADDR)nativeOffset };