【发布时间】:2019-01-29 12:30:21
【问题描述】:
在用于微控制器的程序中,某些区域必须位于特殊的内存段中。这些已在 C 源文件中声明为
static int Foo __attribute__((section(".ocm")));
在链接描述文件中,此部分位于适当的地址:
MEMORY {
ram_0 : ORIGIN = 0, LENGTH = 0x100000
ram_1 : ORIGIN = 0xFFFF0000, LENGTH = 0xFE00
}
SECTION {
.text : {
// here are the normal sections
} > ram_0
.ocm (NOLOAD) : {
__ocm_start = .;
*(.ocm)
__osm_end = .;
} > ram_1
}
使用该配置,所有符号都包含在地图文件中。但是变量Foo 丢失了。可以应用 NOLOAD 属性,因为该部分中没有初始化变量。这是必要的,因为 ELF 输出是经过后处理的,并且该部分必须从该处理中排除。
如何说服链接器将符号包含在映射文件的特殊部分中?
【问题讨论】: