GNU链接器脚本中输入节的空列表中的'section'命令的效果如何?

GNU链接器脚本中输入节的空列表中的'section'命令的效果如何?,c,gcc,gnu,ld,linker-scripts,C,Gcc,Gnu,Ld,Linker Scripts,在LD链接器脚本中,部分部分有以下片段: . = (__BUFFER_LOCATION_); BUFFER . : { } > EXTERNAL_MEM 其中,缓冲区位置定义为某个地址,外部内存在内存部分中定义 在C程序中,我有一个全局缓冲区声明为: char outbuf[4096] __attribute__((section("BUFFER"))); 可以看出,链接器脚本没有提到任何名为BUFFER的输入部分,但输出部分的名称是这样的 编译程序时,我看到链接器将缓冲区放在假定的

在LD链接器脚本中,
部分
部分有以下片段:

. = (__BUFFER_LOCATION_); 
BUFFER . : { } > EXTERNAL_MEM
其中,
缓冲区位置
定义为某个地址,
外部内存
内存
部分中定义

C
程序中,我有一个全局缓冲区声明为:

char outbuf[4096] __attribute__((section("BUFFER")));
可以看出,链接器脚本没有提到任何名为
BUFFER
的输入部分,但输出部分的名称是这样的

编译程序时,我看到链接器将缓冲区放在假定的地址(
buffer\u LOCATION
)中,尽管LDF中没有定义输入部分。当我从源代码中删除
属性时,缓冲区被放置在一个完全不同的地址中

因此,我假设默认情况下,“input section description”类型的输出节命令会隐式地将输出节的名称添加到输入节列表中,除非在其他地方定义。然而,在阅读中,我找不到对这种行为的描述


是我遗漏了什么,还是它是一个“未记录的功能”?

是的,输出节将自动匹配具有相同名称的输入节,除非不同的输出节明确提及它们

这记录在(我的重点)下:

孤立节是输入文件中存在的节,链接器脚本未将这些节显式放置到输出文件中。 链接器仍将通过以下方式将这些节复制到输出文件中: 查找或创建要放置 孤立输入部分

如果孤立输入节的名称与 一个现有的输出节,则孤立的输入节将被删除 放在输出部分的末尾。

如果没有具有匹配名称的输出节,则创建新的输出 将创建节