我可以将GCOV创建的RAM符号定位到单独的段吗

时间:2019-07-02 16:12:04

标签: gcc segment gcov linker-scripts

我使用gcc编译器使用选项'--coverage'编译了Project,以获取代码覆盖率。

在项目内部,我将大面积的内存擦除为零。

从启用--coverage开关开始,项目不再起作用。原因似乎是,gcov RAM部分也被删除了。

现在,我正在寻找一种将RAM中生成的gcov节定位到单独位置的方法。

我分析了地图文件,但未记录gcov生成的部分

我使用'nm'工具转储了目标文件,并得到了这样的符号

201c0d80 d ___gcov0.CopyWords

我试图为GNU链接器DL修改链接器文件,但似乎没有语法将所有'___gcov0'符号定位到一个Segment。

链接文件中的部分

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

在我的项目中清除系统RAM:

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

我希望可以在标签 RAM_start 之前找到gcov RAM,但是内存布局没有变化。

0 个答案:

没有答案