Я написал подпрограмму дампа обратной трассировки для моей встроенной программы на Си. Но у меня проблемы с чтением сегмента .symtab.
Когда я читаю .symtab, адреса функций близки, но неверны. Они не отключены фиксированным смещением, оно меняется. И под «выкл» я подразумеваю, что они не соответствуют фактическому адресу функции в программе на C и не соответствуют файлу карты. Я заметил, что от 0 до 0x1200 байтов отключено.
Это для встроенного проекта, поэтому у меня нет доступа к dlopen. Это для gcc 4.1.1, для процессора PowerPC 405. Это старый проект, который я поддерживаю.
Мои флаги при сборке файлов C:
-O1 -Winline -Wall -Wextra -fno-строго-псевдонимы
-fno-delete-нулевой указатель-проверок -g
Мои флаги при связывании:
-O1 -Winline -Wall -Wextra -fno-строго-псевдонимы
-fno-delete-нулевой указатель-проверок -g
-Wl, -Map, map.txt -Wl, -T -Wl, linker_script.ld
Я также пробовал -gstabs.
Перемещение не происходит - программа статически связана с уже настроенными правильными адресами ОЗУ. Чтобы загрузить его, я просто копирую его в RAM и перехожу к crt_init.
Кто-нибудь знает, почему адреса .symtab неверны из-за случайных смещений? Есть ли еще одна таблица поиска в файле .elf, к которой мне нужно обратиться?
Спасибо.