@@ -1320,11 +1320,11 @@ HCIMPLEND
1320
1320
1321
1321
/* ************************************************************/
1322
1322
1323
- #if defined(TARGET_X86) && defined(FEATURE_EH_FUNCLETS)
1323
+ #if defined(TARGET_X86)
1324
1324
EXTERN_C FCDECL1 (void , IL_Throw, Object* obj);
1325
- EXTERN_C HCIMPL2 (void , IL_Throw_x86, Object* obj, TransitionBlock* transitionBlock)
1325
+ EXTERN_C FCIMPL2 (void , IL_Throw_x86, Object* obj, TransitionBlock* transitionBlock)
1326
1326
#else
1327
- HCIMPL1 (void , IL_Throw, Object* obj)
1327
+ FCIMPL1 (void , IL_Throw, Object* obj)
1328
1328
#endif
1329
1329
{
1330
1330
FCALL_CONTRACT;
@@ -1336,8 +1336,6 @@ HCIMPL1(void, IL_Throw, Object* obj)
1336
1336
1337
1337
OBJECTREF oref = ObjectToOBJECTREF (obj);
1338
1338
1339
- #ifdef FEATURE_EH_FUNCLETS
1340
-
1341
1339
Thread *pThread = GetThread ();
1342
1340
1343
1341
SoftwareExceptionFrame exceptionFrame;
@@ -1350,6 +1348,7 @@ HCIMPL1(void, IL_Throw, Object* obj)
1350
1348
1351
1349
FC_CAN_TRIGGER_GC ();
1352
1350
1351
+ #ifdef FEATURE_EH_FUNCLETS
1353
1352
if (oref == 0 )
1354
1353
DispatchManagedException (kNullReferenceException );
1355
1354
else
@@ -1377,15 +1376,12 @@ HCIMPL1(void, IL_Throw, Object* obj)
1377
1376
}
1378
1377
1379
1378
DispatchManagedException (oref, exceptionFrame.GetContext ());
1380
- FC_CAN_TRIGGER_GC_END ();
1381
- UNREACHABLE ();
1382
- #endif // FEATURE_EH_FUNCLETS
1383
-
1384
- HELPER_METHOD_FRAME_BEGIN_ATTRIB_NOPOLL (Frame::FRAME_ATTR_EXCEPTION); // Set up a frame
1379
+ #else // FEATURE_EH_FUNCLETS
1380
+ INSTALL_MANAGED_EXCEPTION_DISPATCHER;
1381
+ INSTALL_UNWIND_AND_CONTINUE_HANDLER;
1385
1382
1386
1383
#if defined(_DEBUG) && defined(TARGET_X86)
1387
- __helperframe.EnsureInit (NULL );
1388
- g_ExceptionEIP = (LPVOID)__helperframe.GetReturnAddress ();
1384
+ g_ExceptionEIP = transitionBlock->m_ReturnAddress ;
1389
1385
#endif // defined(_DEBUG) && defined(TARGET_X86)
1390
1386
1391
1387
if (oref == 0 )
@@ -1416,24 +1412,28 @@ HCIMPL1(void, IL_Throw, Object* obj)
1416
1412
1417
1413
RaiseTheExceptionInternalOnly (oref, FALSE );
1418
1414
1419
- HELPER_METHOD_FRAME_END ();
1415
+ UNINSTALL_UNWIND_AND_CONTINUE_HANDLER;
1416
+ UNINSTALL_MANAGED_EXCEPTION_DISPATCHER;
1417
+ #endif // FEATURE_EH_FUNCLETS
1418
+
1419
+ FC_CAN_TRIGGER_GC_END ();
1420
+ UNREACHABLE ();
1420
1421
}
1421
- HCIMPLEND
1422
+ FCIMPLEND
1422
1423
1423
1424
/* ************************************************************/
1424
1425
1425
- #if defined(TARGET_X86) && defined(FEATURE_EH_FUNCLETS)
1426
+ #if defined(TARGET_X86)
1426
1427
EXTERN_C FCDECL0 (void , IL_Rethrow);
1427
- EXTERN_C HCIMPL1 (void , IL_Rethrow_x86, TransitionBlock* transitionBlock)
1428
+ EXTERN_C FCIMPL1 (void , IL_Rethrow_x86, TransitionBlock* transitionBlock)
1428
1429
#else
1429
- HCIMPL0 (void , IL_Rethrow)
1430
+ FCIMPL0 (void , IL_Rethrow)
1430
1431
#endif
1431
1432
{
1432
1433
FCALL_CONTRACT;
1433
1434
1434
1435
FC_GC_POLL_NOT_NEEDED (); // throws always open up for GC
1435
1436
1436
- #ifdef FEATURE_EH_FUNCLETS
1437
1437
Thread *pThread = GetThread ();
1438
1438
1439
1439
SoftwareExceptionFrame exceptionFrame;
@@ -1444,12 +1444,13 @@ HCIMPL0(void, IL_Rethrow)
1444
1444
#endif
1445
1445
exceptionFrame.InitAndLink (pThread);
1446
1446
1447
+ FC_CAN_TRIGGER_GC ();
1448
+
1449
+ #ifdef FEATURE_EH_FUNCLETS
1447
1450
ExInfo *pActiveExInfo = (ExInfo*)pThread->GetExceptionState ()->GetCurrentExceptionTracker ();
1448
1451
1449
1452
ExInfo exInfo (pThread, pActiveExInfo->m_ptrs .ExceptionRecord , exceptionFrame.GetContext (), ExKind::None);
1450
1453
1451
- FC_CAN_TRIGGER_GC ();
1452
-
1453
1454
GCPROTECT_BEGIN (exInfo.m_exception );
1454
1455
PREPARE_NONVIRTUAL_CALLSITE (METHOD__EH__RH_RETHROW);
1455
1456
DECLARE_ARGHOLDER_ARRAY (args, 2 );
@@ -1462,12 +1463,9 @@ HCIMPL0(void, IL_Rethrow)
1462
1463
// Ex.RhRethrow(ref ExInfo activeExInfo, ref ExInfo exInfo)
1463
1464
CALL_MANAGED_METHOD_NORET (args)
1464
1465
GCPROTECT_END ();
1465
-
1466
- FC_CAN_TRIGGER_GC_END ();
1467
- UNREACHABLE ();
1468
- #endif
1469
-
1470
- HELPER_METHOD_FRAME_BEGIN_ATTRIB_NOPOLL (Frame::FRAME_ATTR_EXCEPTION); // Set up a frame
1466
+ #else // FEATURE_EH_FUNCLETS
1467
+ INSTALL_MANAGED_EXCEPTION_DISPATCHER;
1468
+ INSTALL_UNWIND_AND_CONTINUE_HANDLER;
1471
1469
1472
1470
OBJECTREF throwable = GetThread ()->GetThrowable ();
1473
1471
if (throwable != NULL )
@@ -1481,15 +1479,20 @@ HCIMPL0(void, IL_Rethrow)
1481
1479
RealCOMPlusThrow (kInvalidProgramException , (UINT)IDS_EE_RETHROW_NOT_ALLOWED);
1482
1480
}
1483
1481
1484
- HELPER_METHOD_FRAME_END ();
1482
+ UNINSTALL_UNWIND_AND_CONTINUE_HANDLER;
1483
+ UNINSTALL_MANAGED_EXCEPTION_DISPATCHER;
1484
+ #endif // FEATURE_EH_FUNCLETS
1485
+
1486
+ FC_CAN_TRIGGER_GC_END ();
1487
+ UNREACHABLE ();
1485
1488
}
1486
- HCIMPLEND
1489
+ FCIMPLEND
1487
1490
1488
- #if defined(TARGET_X86) && defined(FEATURE_EH_FUNCLETS)
1491
+ #if defined(TARGET_X86)
1489
1492
EXTERN_C FCDECL1 (void , IL_ThrowExact, Object* obj);
1490
- EXTERN_C HCIMPL2 (void , IL_ThrowExact_x86, Object* obj, TransitionBlock* transitionBlock)
1493
+ EXTERN_C FCIMPL2 (void , IL_ThrowExact_x86, Object* obj, TransitionBlock* transitionBlock)
1491
1494
#else
1492
- HCIMPL1 (void , IL_ThrowExact, Object* obj)
1495
+ FCIMPL1 (void , IL_ThrowExact, Object* obj)
1493
1496
#endif
1494
1497
{
1495
1498
FCALL_CONTRACT;
@@ -1502,7 +1505,6 @@ HCIMPL1(void, IL_ThrowExact, Object* obj)
1502
1505
OBJECTREF oref = ObjectToOBJECTREF (obj);
1503
1506
GetThread ()->GetExceptionState ()->SetRaisingForeignException ();
1504
1507
1505
- #ifdef FEATURE_EH_FUNCLETS
1506
1508
Thread *pThread = GetThread ();
1507
1509
1508
1510
SoftwareExceptionFrame exceptionFrame;
@@ -1514,21 +1516,27 @@ HCIMPL1(void, IL_ThrowExact, Object* obj)
1514
1516
exceptionFrame.InitAndLink (pThread);
1515
1517
1516
1518
FC_CAN_TRIGGER_GC ();
1519
+
1520
+ #ifdef FEATURE_EH_FUNCLETS
1517
1521
DispatchManagedException (oref, exceptionFrame.GetContext ());
1518
- FC_CAN_TRIGGER_GC_END ();
1519
- UNREACHABLE () ;
1520
- # else
1521
- HELPER_METHOD_FRAME_BEGIN_ATTRIB_NOPOLL (Frame::FRAME_ATTR_EXCEPTION); // Set up a frame
1522
+ # else // FEATURE_EH_FUNCLETS
1523
+ INSTALL_MANAGED_EXCEPTION_DISPATCHER ;
1524
+ INSTALL_UNWIND_AND_CONTINUE_HANDLER;
1525
+
1522
1526
#if defined(_DEBUG) && defined(TARGET_X86)
1523
- __helperframe.EnsureInit (NULL );
1524
- g_ExceptionEIP = (LPVOID)__helperframe.GetReturnAddress ();
1527
+ g_ExceptionEIP = transitionBlock->m_ReturnAddress ;
1525
1528
#endif // defined(_DEBUG) && defined(TARGET_X86)
1526
1529
1527
1530
RaiseTheExceptionInternalOnly (oref, FALSE );
1528
- HELPER_METHOD_FRAME_END ();
1529
- #endif
1531
+
1532
+ UNINSTALL_UNWIND_AND_CONTINUE_HANDLER;
1533
+ UNINSTALL_MANAGED_EXCEPTION_DISPATCHER;
1534
+ #endif // FEATURE_EH_FUNCLETS
1535
+
1536
+ FC_CAN_TRIGGER_GC_END ();
1537
+ UNREACHABLE ();
1530
1538
}
1531
- HCIMPLEND
1539
+ FCIMPLEND
1532
1540
1533
1541
#ifndef STATUS_STACK_BUFFER_OVERRUN // Not defined yet in CESDK includes
1534
1542
# define STATUS_STACK_BUFFER_OVERRUN ((NTSTATUS)0xC0000409L )
0 commit comments