Могу ли я найти символы RAM, созданные GCOV, в отдельный сегмент - PullRequest
0 голосов
/ 02 июля 2019

Я скомпилировал свой проект с помощью компилятора gcc, используя опцию '--coverage', чтобы получить покрытие кода.

Внутри проекта я стираю большие области памяти до нуля.

С того момента, как я включил ключ --coverage, Проект больше не работает. Причина в том, что разделы gcov RAM также удаляются.

Теперь я ищу способ размещения сгенерированных разделов gcov в ОЗУ в отдельном местоположении.

Я проанализировал файл карты, но сгенерированные gcov разделы не задокументированы

Я выгрузил объектные файлы с помощью инструмента «nm» и получил символы вроде этого

201c0d80 d ___gcov0.CopyWords

Я попытался адаптировать файл компоновщика для DL компоновщика GNU, но, похоже, нет синтаксиса для определения местоположения всех символов '___gcov0' в одном сегменте.

Раздел из моего файла компоновщика

SECTIONS
{
  RAM_1 :
  {
    *___gcov0*(.bss)       // this line seems to have no effect
    ___RAM_start__ = . ;
    *(.bss)
    ___RAM_end__ = . ;
  }
}

Очистка системной оперативной памяти в моем проекте:

void clearRam(void) {
    // Clear whole RAM
    memset(&__RAM_start__, (uint8_t)0, (int32_t)&__RAM_end__ - (int32_t)&__RAM_start__);
}

Я ожидал, что было бы возможно найти ОЗУ gcov до метки RAM_start , но в макете памяти не было изменений.

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