Поделиться через


Структуры связанных данных раскрутки

Если установлен флаг UNW_FLAG_CHAININFO, то структура информации очистки является вторичной и общее поле обработчика исключений/связанных данных содержит первичную информацию раскрутки. Следующий код извлекает основные сведения очистки, при условии что unwindInfo — структура, имеющая установленный флаг UNW_FLAG_CHAININFO.

PRUNTIME_FUNCTION primaryUwindInfo = (PRUNTIME_FUNCTION)&(unwindInfo->UnwindCode[( unwindInfo->CountOfCodes + 1 ) & ~1]);

Связанные данные используются в двух случаях. Во-первых, они используется в несмежных сегментах кода. Используя связанные сведения, можно уменьшить размер требуемой информации раскрутки, поскольку нет необходимости дублировать массив кодов раскрутки из основной информации раскрутки.

Связанные сведения можно также использовать для группировки сохраненных данных энергозависимых регистров. Компилятор может отложить сохранение некоторых энергозависимых регистров до выхода из пролога записи функции. Они могут быть записаны перед группированным кодом посредством использования основных данных раскрутки для части функции и последующей установки связанных данных с ненулевым размером пролога. При этом коды раскрутки в связанных данных будут отражать сохраненные данных энергозависимых регистров. В этом случае все коды раскрутки являются экземплярами UWOP_SAVE_NONVOL. Группирование, сохраняющее защищенные регистры с помощью PUSH или изменяющее RSP-файлы MSBuild с помощью выделения дополнительных фиксированных стеков, не поддерживается.

Элемент UNWIND_INFO, имеющий набор UNW_FLAG_CHAININFO, может содержать запись RUNTIME_FUNCTION, чей элемент UNWIND_INFO также имеет набор UNW_FLAG_CHAININFO(множественный изолированный код). В конечном счете, указатели связанных данных раскрутки достигнут элемент UNWIND_INFO, для которого флаг UNW_FLAG_CHAININFO не установлен. Этот элемент будет являться основным элементом UNWIND_INFO, указывающим на фактическую точку входа процедуры.

См. также

Ссылки

Данные раскрутки для обработки исключений и поддержки отладчика