gcInfo.gcMarkRegSetNpt(RBM_INTRET);
}
- unsigned stackAdjustBias = 0;
-
-#if defined(_TARGET_X86_)
+#if !FEATURE_EH_FUNCLETS
//-------------------------------------------------------------------------
// Create a label for tracking of region protected by the monitor in synchronized methods.
// This needs to be here, rather than above where fPossibleSyncHelperCall is set,
break;
}
}
+#endif // !FEATURE_EH_FUNCLETS
+
+ unsigned stackAdjustBias = 0;
+#if defined(_TARGET_X86_)
// Is the caller supposed to pop the arguments?
if (fCallerPop && (stackArgBytes != 0))
{
GenTreePtr fgGetCritSectOfStaticMethod();
-#if !defined(_TARGET_X86_)
+#if FEATURE_EH_FUNCLETS
void fgAddSyncMethodEnterExit();
void fgConvertSyncReturnToLeave(BasicBlock* block);
-#endif // !_TARGET_X86_
+#endif // FEATURE_EH_FUNCLETS
void fgAddReversePInvokeEnterExit();
return tree;
}
-#if !defined(_TARGET_X86_)
+#if FEATURE_EH_FUNCLETS
/*****************************************************************************
*
#endif
}
-#endif // !_TARGET_X86_
+#endif // FEATURE_EH_FUNCLETS
//------------------------------------------------------------------------
// fgAddReversePInvokeEnterExit: Add enter/exit calls for reverse PInvoke methods
}
}
-#if !defined(_TARGET_X86_)
+#if FEATURE_EH_FUNCLETS
// Add the synchronized method enter/exit calls and try/finally protection. Note
// that this must happen before the one BBJ_RETURN block is created below, so the
// BBJ_RETURN block gets placed at the top-level, not within an EH region. (Otherwise,
{
fgAddSyncMethodEnterExit();
}
-#endif // !_TARGET_X86_
+#endif // FEATURE_EH_FUNCLETS
if (oneReturn)
{
#endif
}
-#if defined(_TARGET_X86_)
+#if !FEATURE_EH_FUNCLETS
/* Is this a 'synchronized' method? */
syncEndEmitCookie = NULL;
}
-#endif // _TARGET_X86_
+#endif // !FEATURE_EH_FUNCLETS
/* Do we need to do runtime call out to check the security? */
header->syncStartOffset = INVALID_SYNC_OFFSET;
header->syncEndOffset = INVALID_SYNC_OFFSET;
+#ifndef UNIX_X86_ABI
+ // JIT is responsible for synchronization on funclet-based EH model that x86/Linux uses.
if (compiler->info.compFlags & CORINFO_FLG_SYNCH)
{
assert(compiler->syncStartEmitCookie != NULL);
// synchronized methods can't have more than 1 epilog
assert(header->epilogCount <= 1);
}
+#endif
header->revPInvokeOffset = INVALID_REV_PINVOKE_OFFSET;
INDEBUG(m_crawl.pThread->DebugLogStackWalkInfo(&m_crawl, "CONSIDER", m_uFramesProcessed));
-#if defined(_DEBUG) && defined(_TARGET_X86_) && !defined(DACCESS_COMPILE)
+#if defined(_DEBUG) && !defined(WIN64EXCEPTIONS) && !defined(DACCESS_COMPILE)
+ //
+ // VM is responsible for synchronization on non-funclet EH model.
+ //
// m_crawl.GetThisPointer() requires full unwind
// In GC's relocate phase, objects is not verifiable
if ( !(m_flags & (LIGHTUNWIND | QUICKUNWIND | ALLOW_INVALID_OBJECTS)) &&
END_GCX_ASSERT_COOP;
}
-#endif // _DEBUG && _TARGET_X86_ && !DACCESS_COMPILE
+#endif // _DEBUG && !WIN64EXCEPTIONS && !DACCESS_COMPILE
m_frameState = SFITER_FRAMELESS_METHOD;
} // StackFrameIterator::PreProcessingForManagedFrames()