|
Как прочитать стек одного режима ядра в другом режиме, arm7tdmi |
|
|
|
Feb 11 2009, 15:12
|

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

|
Возникла потребность написать обработчики исключительных ситуаций, которые помогли бы отыскать причину их возникновения. Пытаюсь реализовать это для at91sam7x. С data abort примерно всё понятно, почитав регистры Memory Controller и abort link register, получаю точное место ошибки. А prefetch abort поставил меня в тупик. Сам exception возникает довольно часто если случается такая ситуация например: вызов функции по неинициализированному или кем-то затертому указателю. И соответственно ядро пробежав немного по левым адресам спотыкается и улетает в аборт, соответствено контроллер памяти и регистр возврата содержат левые адреса, по которым невозможно вычислить откуда ноги растут. Возникла идея восстановить режим из теневого регистра статуса, почитать sp и сам стек, восстановить режим обратно, а по считанному стеку найти виноватого. Но это чистой воды хак, так как процессор переходит из режима в режим по исключительным ситуациям, а возвращаться рекоммендуют спец. командами (см. спецификацию). И вот у меня иногда это хак проходит успешно, а иногда при смене режима руками, неожиданно меняется регистр pc и программа улетает по адресам возникшим в pc. Может кто знает какие тайные тропы, как почитать стек одного режима ядра в другом режиме.
|
|
|
|
|
 |
Ответов
|
Feb 11 2009, 21:12
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(xelax @ Feb 11 2009, 17:12)  Может кто знает какие тайные тропы, как почитать стек одного режима ядра в другом режиме. Вот пример, пользуюсь все время. Выводит в UART адрес исключения, дамп регистров и дамп стека до аборта. Собственно UART не прилагаю. Там понятно из названия функций. Поддерживает только ARM режим. Для THUMB не стал заморачиватся, потому как не исползую его.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
Сообщений в этой теме
xelax Как прочитать стек одного режима ядра в другом режиме Feb 11 2009, 15:12 aaarrr Цитата(xelax @ Feb 11 2009, 18:12) Но это... Feb 11 2009, 15:53 defunct Цитата(amw @ Feb 11 2009, 23:12) Для THUM... Feb 11 2009, 23:22  xelax Цитата(defunct @ Feb 12 2009, 02:22) А в ... Feb 12 2009, 10:46   amw Цитата(xelax @ Feb 12 2009, 12:46) Под Th... Feb 12 2009, 12:09    defunct Цитата(amw @ Feb 12 2009, 14:09) Количест... Feb 13 2009, 00:01    xelax Цитата(amw @ Feb 12 2009, 15:09) Так поде... Feb 13 2009, 06:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|