Cortex-M4的GNU链接描述文件中的内存部分

时间:2013-07-12 10:24:48

标签: linker-scripts

我很失望,因为我找不到有关内存分段的信息。我知道我应该将内存划分为基本部分,例如.text,.data,.bss,.stack,这些部分用于编译程序的目标文件中。我知道还有更多其他部分,有些是C和C ++的其他部分。我正在搜索有关哪些部分应包含在链接描述文件中的信息?

1 个答案:

答案 0 :(得分:2)

这取决于您的特定编译器和目标体系结构,哪些输出节将存在或可能存在。在代码中,您可以使用任意名称定义输入节。链接描述文件用于将文件或显式定义的输入节中列出的符号中的符号绑定到输出节。

找出存在哪些输出节的最佳方法是编译和链接示例应用程序,并检查生成的映射文件(如果未自动生成映射文件,则应调整链接器选项)。地图文件不适合其他工具使用,但可作为程序内容,位置,部分和原因的可读描述。注意:在该映射文件中,您还会发现一些不属于您的程序的部分名称,并且不会转换为程序执行或使用的物理位,而是辅助调试器。

如果没有将某些符号显式映射到输出节,则链接器通常只会在最后一个明确定义的节之后附加所有剩余的符号。

因此,你也可以定义某种“全能”部分,它肯定会吸引所有尚未分配的符号,然后验证输出部分是否为空。 即。

在SECTIONS块结束时,添加

SECTION
{
  <snip>

  .mustbeempty
  {
    *(.*) ;
  }
  ASSERT( SIZEOF( .mustbeempty ) = 0 ) ;
}

有关链接器脚本的更多信息可以在很多地方找到: