ГБД: [Источник недоступен] - PullRequest
1 голос
/ 23 июня 2019

Я написал ядро ​​для микроконтроллеров armv7-m (Cortex-Mx). Ядро способно динамически загружать файлы ELF. При отладке в GDB загружаются все символы ядра, и я могу без проблем пройти один шаг по исходному коду C ++. При динамической загрузке символы приложения добавляются с помощью:

add-symbol-file app <base .text address> -s .data <base .data address> -s .bss <base .bss address>

Затем я могу установить точки останова, перейти на основную часть, используя вид сборки, и распечатать значение таких символов, как argc / argv. Все выглядит правильно.

За исключением вида источника, он просто показывает [Источник недоступен]. Я проверял, что приложение скомпилировано с -O0 -ggdb . Пути в приложении ELF верны. Перепутался с GDB набор каталогов без удачи.

Каков механизм разрешения источника в GDB? Если символы загружены, полный ELF доступен с отладочной информацией, а источники остаются в том же месте, что и компиляция, что еще может быть не так?

gdb-multiarch GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git

arm-none-eabi-gcc (Инструменты GNU для встроенных процессоров Arm 7-2018-q3-обновление) 7.3.1 20180622 (выпуск) [ARM / embedded-7-branch edition 261907]

Спасибо!

1 Ответ

0 голосов
/ 01 июля 2019

Я смог это исправить, переместив определенный раздел выше .text в скрипт компоновщика. Не знаю, почему это что-то изменило ... Я полагал, что это должно изменить выравнивание раздела ниже, но ни один из моих экспериментов не удался.

  /* These MUST be before .text segment for proper symbolic debugging... */
  .dynstr         : { *(.dynstr) } > FLASH
  .hash           : { *(.hash) } > FLASH
  .dynsym         : { *(.dynsym) } > FLASH

Любое объяснение того, почему это может быть, очень ценится. Может быть, из-за некоторых внутренних предположений ГБД?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...