реклама на сайте
подробности

 
 
> Как прочитать стек одного режима ядра в другом режиме, arm7tdmi
xelax
сообщение Feb 11 2009, 15:12
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Возникла потребность написать обработчики исключительных ситуаций, которые помогли бы отыскать причину их возникновения.
Пытаюсь реализовать это для at91sam7x. С data abort примерно всё понятно, почитав регистры Memory Controller и abort link register, получаю точное место ошибки. А prefetch abort поставил меня в тупик. Сам exception возникает довольно часто если случается такая ситуация например: вызов функции по неинициализированному или кем-то затертому указателю. И соответственно ядро пробежав немного по левым адресам спотыкается и улетает в аборт, соответствено контроллер памяти и регистр возврата содержат левые адреса, по которым невозможно вычислить откуда ноги растут.
Возникла идея восстановить режим из теневого регистра статуса, почитать sp и сам стек, восстановить режим обратно, а по считанному стеку найти виноватого. Но это чистой воды хак, так как процессор переходит из режима в режим по исключительным ситуациям, а возвращаться рекоммендуют спец. командами (см. спецификацию). И вот у меня иногда это хак проходит успешно, а иногда при смене режима руками, неожиданно меняется регистр pc и программа улетает по адресам возникшим в pc. Может кто знает какие тайные тропы, как почитать стек одного режима ядра в другом режиме.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amw
сообщение Feb 11 2009, 21:12
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(xelax @ Feb 11 2009, 17:12) *
Может кто знает какие тайные тропы, как почитать стек одного режима ядра в другом режиме.

Вот пример, пользуюсь все время. Выводит в UART адрес исключения, дамп регистров и дамп стека до аборта. Собственно UART не прилагаю. Там понятно из названия функций.
Поддерживает только ARM режим. Для THUMB не стал заморачиватся, потому как не исползую его.
Прикрепленные файлы
Прикрепленный файл  exception_dump.zip ( 5.47 килобайт ) Кол-во скачиваний: 74
 


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Feb 12 2009, 11:32
Сообщение #3


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(amw @ Feb 11 2009, 23:12) *
Вот пример, пользуюсь все время. Выводит в UART адрес исключения, дамп регистров и дамп стека до аборта. Собственно UART не прилагаю. Там понятно из названия функций.
Поддерживает только ARM режим. Для THUMB не стал заморачиватся, потому как не исползую его.

Спасибо, как раз вчера искал внезапный DABT, очень не хватало, писать времени не было... Нашел мозгом.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 10:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01344 секунд с 7
ELECTRONIX ©2004-2016