Возможно ли, чтобы LD печатал значение символа по мере его продвижения? Может быть, есть глупый способ просто распечатать значение?GCC: печать значения символа во время процесса ссылки?
Вот детали, связанные с моим вопросом для контекста:
Я компиляции кода для Cortex-M7 с использованием GCC 4.9. Процессор имеет два банка вспышки. 1 МБ каждый по 0x0020.0000
и 0x0800.0000
.
В коде ЭЛТ он пытается установить относительную нагрузку ПК на адрес main
на номер R2
, а затем перейти к нему. Однако значение, сохраненное в таблице констант, неверно.
От отладчика разборки:
ldr r2, =APP_ENTRY_POINT
4A29 ldr r2, 0x002003B8
--- thumb_crt0.s -- 226 ------------------------------------
blx r2
4790 blx r2
objdump из thumb_crt0.o:
000000aa <start>:
aa: 2000 movs r0, #0
ac: 2100 movs r1, #0
ae: 4a29 ldr r2, [pc, #164] ; (154 <memory_set+0x8a>)
b0: 4790 blx r2
Слово хранится при смещении:
ldr r2, =APP_ENTRY_POINT
080007ED .word 0x080007ED
Фактический адрес главного согласно nm
:
Silverback: nm Nucleo.elf | grep main
002007ec N main
Спасибо. У меня есть файл карты. Я понимаю, что объектный файл еще не найден. Что для меня было полезно, так это то, что он подсчитал относительную нагрузку на ПК, и это привело меня к отображению неправильного значения, хранящегося в смещении. В объектном файле вы можете увидеть, что он хочет заменить это место на main. – Kenny
Существует также директивы 'ASSERT' и математическая операция, которые вы могли бы проверить переменную вместо ее печати. Тем не менее, mapfile всегда полезен. –