in ProfilingAPI/ReJITEnterLeaveHooks/ILRewriter.cpp [368:401]
HRESULT ImportEH(const COR_ILMETHOD_SECT_EH* pILEH, unsigned nEH)
{
assert(m_pEH == NULL);
m_nEH = nEH;
if (nEH == 0)
return S_OK;
IfNullRet(m_pEH = new EHClause[m_nEH]);
for (unsigned iEH = 0; iEH < m_nEH; iEH++)
{
// If the EH clause is in tiny form, the call to pILEH->EHClause() below will
// use this as a scratch buffer to expand the EH clause into its fat form.
COR_ILMETHOD_SECT_EH_CLAUSE_FAT scratch;
const COR_ILMETHOD_SECT_EH_CLAUSE_FAT* ehInfo;
ehInfo = (COR_ILMETHOD_SECT_EH_CLAUSE_FAT*)pILEH->EHClause(iEH, &scratch);
EHClause* clause = &(m_pEH[iEH]);
clause->m_Flags = ehInfo->GetFlags();
clause->m_pTryBegin = GetInstrFromOffset(ehInfo->GetTryOffset());
clause->m_pTryEnd = GetInstrFromOffset(ehInfo->GetTryOffset() + ehInfo->GetTryLength());
clause->m_pHandlerBegin = GetInstrFromOffset(ehInfo->GetHandlerOffset());
clause->m_pHandlerEnd = GetInstrFromOffset(ehInfo->GetHandlerOffset() + ehInfo->GetHandlerLength())->m_pPrev;
if ((clause->m_Flags & COR_ILEXCEPTION_CLAUSE_FILTER) == 0)
clause->m_ClassToken = ehInfo->GetClassToken();
else
clause->m_pFilter = GetInstrFromOffset(ehInfo->GetFilterOffset());
}
return S_OK;
}