@@ -1225,11 +1225,11 @@ HCIMPLEND
1225
1225
1226
1226
/* ************************************************************/
1227
1227
1228
- #if defined(TARGET_X86) && defined(FEATURE_EH_FUNCLETS)
1228
+ #if defined(TARGET_X86)
1229
1229
EXTERN_C FCDECL1 (void , IL_Throw, Object* obj);
1230
- EXTERN_C HCIMPL2 (void , IL_Throw_x86, Object* obj, TransitionBlock* transitionBlock)
1230
+ EXTERN_C FCIMPL2 (void , IL_Throw_x86, Object* obj, TransitionBlock* transitionBlock)
1231
1231
#else
1232
- HCIMPL1 (void , IL_Throw, Object* obj)
1232
+ FCIMPL1 (void , IL_Throw, Object* obj)
1233
1233
#endif
1234
1234
{
1235
1235
FCALL_CONTRACT;
@@ -1241,8 +1241,6 @@ HCIMPL1(void, IL_Throw, Object* obj)
1241
1241
1242
1242
OBJECTREF oref = ObjectToOBJECTREF (obj);
1243
1243
1244
- #ifdef FEATURE_EH_FUNCLETS
1245
-
1246
1244
Thread *pThread = GetThread ();
1247
1245
1248
1246
SoftwareExceptionFrame exceptionFrame;
@@ -1255,6 +1253,7 @@ HCIMPL1(void, IL_Throw, Object* obj)
1255
1253
1256
1254
FC_CAN_TRIGGER_GC ();
1257
1255
1256
+ #ifdef FEATURE_EH_FUNCLETS
1258
1257
if (oref == 0 )
1259
1258
DispatchManagedException (kNullReferenceException );
1260
1259
else
@@ -1282,15 +1281,12 @@ HCIMPL1(void, IL_Throw, Object* obj)
1282
1281
}
1283
1282
1284
1283
DispatchManagedException (oref, exceptionFrame.GetContext ());
1285
- FC_CAN_TRIGGER_GC_END ();
1286
- UNREACHABLE ();
1287
- #endif // FEATURE_EH_FUNCLETS
1288
-
1289
- HELPER_METHOD_FRAME_BEGIN_ATTRIB_NOPOLL (Frame::FRAME_ATTR_EXCEPTION); // Set up a frame
1284
+ #else // FEATURE_EH_FUNCLETS
1285
+ INSTALL_MANAGED_EXCEPTION_DISPATCHER;
1286
+ INSTALL_UNWIND_AND_CONTINUE_HANDLER;
1290
1287
1291
1288
#if defined(_DEBUG) && defined(TARGET_X86)
1292
- __helperframe.EnsureInit (NULL );
1293
- g_ExceptionEIP = (LPVOID)__helperframe.GetReturnAddress ();
1289
+ g_ExceptionEIP = transitionBlock->m_ReturnAddress ;
1294
1290
#endif // defined(_DEBUG) && defined(TARGET_X86)
1295
1291
1296
1292
if (oref == 0 )
@@ -1321,24 +1317,28 @@ HCIMPL1(void, IL_Throw, Object* obj)
1321
1317
1322
1318
RaiseTheExceptionInternalOnly (oref, FALSE );
1323
1319
1324
- HELPER_METHOD_FRAME_END ();
1320
+ UNINSTALL_UNWIND_AND_CONTINUE_HANDLER;
1321
+ UNINSTALL_MANAGED_EXCEPTION_DISPATCHER;
1322
+ #endif // FEATURE_EH_FUNCLETS
1323
+
1324
+ FC_CAN_TRIGGER_GC_END ();
1325
+ UNREACHABLE ();
1325
1326
}
1326
- HCIMPLEND
1327
+ FCIMPLEND
1327
1328
1328
1329
/* ************************************************************/
1329
1330
1330
- #if defined(TARGET_X86) && defined(FEATURE_EH_FUNCLETS)
1331
+ #if defined(TARGET_X86)
1331
1332
EXTERN_C FCDECL0 (void , IL_Rethrow);
1332
- EXTERN_C HCIMPL1 (void , IL_Rethrow_x86, TransitionBlock* transitionBlock)
1333
+ EXTERN_C FCIMPL1 (void , IL_Rethrow_x86, TransitionBlock* transitionBlock)
1333
1334
#else
1334
- HCIMPL0 (void , IL_Rethrow)
1335
+ FCIMPL0 (void , IL_Rethrow)
1335
1336
#endif
1336
1337
{
1337
1338
FCALL_CONTRACT;
1338
1339
1339
1340
FC_GC_POLL_NOT_NEEDED (); // throws always open up for GC
1340
1341
1341
- #ifdef FEATURE_EH_FUNCLETS
1342
1342
Thread *pThread = GetThread ();
1343
1343
1344
1344
SoftwareExceptionFrame exceptionFrame;
@@ -1349,12 +1349,13 @@ HCIMPL0(void, IL_Rethrow)
1349
1349
#endif
1350
1350
exceptionFrame.InitAndLink (pThread);
1351
1351
1352
+ FC_CAN_TRIGGER_GC ();
1353
+
1354
+ #ifdef FEATURE_EH_FUNCLETS
1352
1355
ExInfo *pActiveExInfo = (ExInfo*)pThread->GetExceptionState ()->GetCurrentExceptionTracker ();
1353
1356
1354
1357
ExInfo exInfo (pThread, pActiveExInfo->m_ptrs .ExceptionRecord , exceptionFrame.GetContext (), ExKind::None);
1355
1358
1356
- FC_CAN_TRIGGER_GC ();
1357
-
1358
1359
GCPROTECT_BEGIN (exInfo.m_exception );
1359
1360
PREPARE_NONVIRTUAL_CALLSITE (METHOD__EH__RH_RETHROW);
1360
1361
DECLARE_ARGHOLDER_ARRAY (args, 2 );
@@ -1367,12 +1368,9 @@ HCIMPL0(void, IL_Rethrow)
1367
1368
// Ex.RhRethrow(ref ExInfo activeExInfo, ref ExInfo exInfo)
1368
1369
CALL_MANAGED_METHOD_NORET (args)
1369
1370
GCPROTECT_END ();
1370
-
1371
- FC_CAN_TRIGGER_GC_END ();
1372
- UNREACHABLE ();
1373
- #endif
1374
-
1375
- HELPER_METHOD_FRAME_BEGIN_ATTRIB_NOPOLL (Frame::FRAME_ATTR_EXCEPTION); // Set up a frame
1371
+ #else // FEATURE_EH_FUNCLETS
1372
+ INSTALL_MANAGED_EXCEPTION_DISPATCHER;
1373
+ INSTALL_UNWIND_AND_CONTINUE_HANDLER;
1376
1374
1377
1375
OBJECTREF throwable = GetThread ()->GetThrowable ();
1378
1376
if (throwable != NULL )
@@ -1386,15 +1384,20 @@ HCIMPL0(void, IL_Rethrow)
1386
1384
RealCOMPlusThrow (kInvalidProgramException , (UINT)IDS_EE_RETHROW_NOT_ALLOWED);
1387
1385
}
1388
1386
1389
- HELPER_METHOD_FRAME_END ();
1387
+ UNINSTALL_UNWIND_AND_CONTINUE_HANDLER;
1388
+ UNINSTALL_MANAGED_EXCEPTION_DISPATCHER;
1389
+ #endif // FEATURE_EH_FUNCLETS
1390
+
1391
+ FC_CAN_TRIGGER_GC_END ();
1392
+ UNREACHABLE ();
1390
1393
}
1391
- HCIMPLEND
1394
+ FCIMPLEND
1392
1395
1393
- #if defined(TARGET_X86) && defined(FEATURE_EH_FUNCLETS)
1396
+ #if defined(TARGET_X86)
1394
1397
EXTERN_C FCDECL1 (void , IL_ThrowExact, Object* obj);
1395
- EXTERN_C HCIMPL2 (void , IL_ThrowExact_x86, Object* obj, TransitionBlock* transitionBlock)
1398
+ EXTERN_C FCIMPL2 (void , IL_ThrowExact_x86, Object* obj, TransitionBlock* transitionBlock)
1396
1399
#else
1397
- HCIMPL1 (void , IL_ThrowExact, Object* obj)
1400
+ FCIMPL1 (void , IL_ThrowExact, Object* obj)
1398
1401
#endif
1399
1402
{
1400
1403
FCALL_CONTRACT;
@@ -1407,7 +1410,6 @@ HCIMPL1(void, IL_ThrowExact, Object* obj)
1407
1410
OBJECTREF oref = ObjectToOBJECTREF (obj);
1408
1411
GetThread ()->GetExceptionState ()->SetRaisingForeignException ();
1409
1412
1410
- #ifdef FEATURE_EH_FUNCLETS
1411
1413
Thread *pThread = GetThread ();
1412
1414
1413
1415
SoftwareExceptionFrame exceptionFrame;
@@ -1419,21 +1421,27 @@ HCIMPL1(void, IL_ThrowExact, Object* obj)
1419
1421
exceptionFrame.InitAndLink (pThread);
1420
1422
1421
1423
FC_CAN_TRIGGER_GC ();
1424
+
1425
+ #ifdef FEATURE_EH_FUNCLETS
1422
1426
DispatchManagedException (oref, exceptionFrame.GetContext ());
1423
- FC_CAN_TRIGGER_GC_END ();
1424
- UNREACHABLE () ;
1425
- # else
1426
- HELPER_METHOD_FRAME_BEGIN_ATTRIB_NOPOLL (Frame::FRAME_ATTR_EXCEPTION); // Set up a frame
1427
+ # else // FEATURE_EH_FUNCLETS
1428
+ INSTALL_MANAGED_EXCEPTION_DISPATCHER ;
1429
+ INSTALL_UNWIND_AND_CONTINUE_HANDLER;
1430
+
1427
1431
#if defined(_DEBUG) && defined(TARGET_X86)
1428
- __helperframe.EnsureInit (NULL );
1429
- g_ExceptionEIP = (LPVOID)__helperframe.GetReturnAddress ();
1432
+ g_ExceptionEIP = transitionBlock->m_ReturnAddress ;
1430
1433
#endif // defined(_DEBUG) && defined(TARGET_X86)
1431
1434
1432
1435
RaiseTheExceptionInternalOnly (oref, FALSE );
1433
- HELPER_METHOD_FRAME_END ();
1434
- #endif
1436
+
1437
+ UNINSTALL_UNWIND_AND_CONTINUE_HANDLER;
1438
+ UNINSTALL_MANAGED_EXCEPTION_DISPATCHER;
1439
+ #endif // FEATURE_EH_FUNCLETS
1440
+
1441
+ FC_CAN_TRIGGER_GC_END ();
1442
+ UNREACHABLE ();
1435
1443
}
1436
- HCIMPLEND
1444
+ FCIMPLEND
1437
1445
1438
1446
#ifndef STATUS_STACK_BUFFER_OVERRUN // Not defined yet in CESDK includes
1439
1447
# define STATUS_STACK_BUFFER_OVERRUN ((NTSTATUS)0xC0000409L )
0 commit comments