在 LD 链接器脚本中,我在该部分中有以下片段SECTIONS
:
. = (__BUFFER_LOCATION_);
BUFFER . : { } > EXTERNAL_MEM
where__BUFFER_LOCATION_
被定义到某个地址并EXTERNAL_MEM
在MEMORY
section 中定义。
在C
程序中,我有一个全局缓冲区声明为:
char outbuf[4096] __attribute__((section("BUFFER")));
可以看出,链接描述文件没有提到任何名为 的输入节BUFFER
,但输出节是这样命名的。
编译程序时,我看到链接器将缓冲区放置在假定的地址 ( BUFFER_LOCATION
) 中,尽管 LDF 中没有定义输入部分。当我attribute
从源中删除时,缓冲区被放置在一个完全不同的地址中。
因此,我假设默认情况下,“输入节描述”类型的输出节命令会将输出节的名称隐式添加到输入节列表中,除非在其他地方定义。但是,阅读手册,我找不到这种行为的描述。
我错过了什么,还是“未记录的功能”?