GCC: получение правильных адресов функций из сегмента .symtab - PullRequest
0 голосов
/ 30 марта 2019

Я написал подпрограмму дампа обратной трассировки для моей встроенной программы на Си. Но у меня проблемы с чтением сегмента .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, к которой мне нужно обратиться?

Спасибо.

...