in src/profiler/src/ILWriter.cpp [299:349]
void ILWriter::FixSEHSections(BYTE* codeBuffer, ULONG offset)
{
COR_ILMETHOD_FAT* fatMethod = (COR_ILMETHOD_FAT*)codeBuffer;
const COR_ILMETHOD_SECT* sections = fatMethod->GetSect();
while (sections)
{
if (sections->Kind() == CorILMethod_Sect_EHTable)
{
COR_ILMETHOD_SECT_EH* eh = (COR_ILMETHOD_SECT_EH*)sections;
if (eh->IsFat())
{
COR_ILMETHOD_SECT_EH_FAT* EHFat = (COR_ILMETHOD_SECT_EH_FAT*)eh;
for (UINT i = 0; i < eh->EHCount(); i++)
{
IMAGE_COR_ILMETHOD_SECT_EH_CLAUSE_FAT* clause = &EHFat->Clauses[i];
if (clause->Flags & COR_ILEXCEPTION_CLAUSE_FILTER)
{
clause->FilterOffset += offset;
}
clause->TryOffset += offset;
clause->HandlerOffset += offset;
}
}
else
{
COR_ILMETHOD_SECT_EH_SMALL* EHSmall = (COR_ILMETHOD_SECT_EH_SMALL*)eh;
for (UINT i = 0; i < eh->EHCount(); i++)
{
IMAGE_COR_ILMETHOD_SECT_EH_CLAUSE_SMALL* clause = &EHSmall->Clauses[i];
if (clause->Flags & COR_ILEXCEPTION_CLAUSE_FILTER)
{
clause->FilterOffset += offset;
}
clause->TryOffset += offset;
clause->HandlerOffset += offset;
}
}
}
sections = sections->Next();
}
}