2015-09-28 5 views
1

В the exception handling ABI for the ARM architecture он дает формат записей таблицы обработки исключений «ARM определенная компактная модель», но нет информации об элементах EHT «общей модели» за пределами того факта, что первое слово - это смещение рутины личности.C++ Обработка исключений для ARM - Формат общих таблиц обработки исключений

Есть ли документ где-нибудь, который дает формат этих записей за пределами первого слова? Я могу видеть, что есть шаблон для первых трех слов, которые происходят в каждой записи, например:

0553ff7f a908b100 ffff019c 80808000 92808080 00a48080 8000b680 80800000 ba808080 00848080 80000000 

(порядок байт в обратном порядке)

Второе слово, кажется, колеблется от нескольких значений для каждой записи , а третье слово почти всегда заканчивается ffff (в одном случае я видел, что это 10ff). Первый байт третьего слова иногда указывает длину записи (достаточно того, что это не совпадение, но недостаточно, чтобы это было правило).

Я вижу слова после первых 3 повторений регулярно между записями, но я понятия не имею, как их интерпретировать.

Документы Я посмотрел на:

+0

Я думаю, что большая часть информации находится в PDF [обработка исключений ABI для архитектуры ARM] (http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038a/IHI0038A_ehabi.pdf); * Запись в таблице имеет переменный размер. Он кодирует специфическим способом поставщика и языка действия, необходимые для распространения исключения через функцию. * Личность - это способ справиться с моделью исключения языка. Например, «C» очень просто с * добавлением C *, типичным является три инструкции и не более семи. –

ответ

0

В разделе 4.3 Обработка исключений ABI для ARM® архитектуры он говорит:

Generic - запись в таблице состоит из смещения места по отношению к функции с интерфейсом и протоколом взаимодействия во времени выполнения, определенным этим EHABI , за которым следуют данные в формате, частном для этой функции.

Таким образом, формат данных в общей записи определяется индивидуальной процедурой. Если ваша индивидуальность личности называется __gxx_personality_v0, то вы можете найти источник в libstdC++ (eh _ * .cc, особенно eh_personality.cc)

Смежные вопросы