Как сопоставить адрес ПК (ARMv5) с исходным кодом? - PullRequest
3 голосов
/ 07 сентября 2011

Я работаю на процессоре ARM9E под управлением Linux. Иногда мое приложение вылетает со следующим сообщением:

[142.410000] Ловушка выравнивания: rtspserverd (996) PC = 0x4034f61c Instr = 0xe591300c Адрес = 0x0000000d FSR 0x001

Как я могу перевести адрес ПК в фактический исходный код? Другими словами, как я могу понять это сообщение?

Ответы [ 2 ]

4 голосов
/ 07 сентября 2011

С objdump .Снимите свой исполняемый файл, затем найдите 4034f61c:.Опции -x, --disassemble и -l особенно полезны.

2 голосов
/ 08 сентября 2011

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

Например, в gccвы можете сделать

gcc -Wa,-a,-ad -c foo.c > foo.lst

, чтобы создать листинг в файле foo.lst.

-Wa, отправляет следующие параметры ассемблеру (gas).

-a указывает gas создать листинг на стандартном выводе.

-ad указывает gas пропускать директивы отладки, которые в противном случае добавили бы много беспорядка.

опция для компоновщика GNU для создания файла карты: -M или --print-map.Если вы связываетесь с gcc, вам нужно передать параметр компоновщику с параметром, начинающимся с -Wl,, например -Wl,-M.

В качестве альтернативы вы также можете запустить свое приложение в отладчике (например, gdb) и посмотрите на дамп стека после сбоя с помощью команды bt.

...