GNU链接器脚本中输入节的空列表中的'section'命令的效果如何?
在LD链接器脚本中,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的输入部分,但输出部分的名称是这样的 编译程序时,我看到链接器将缓冲区放在假定的
部分
部分有以下片段:
. = (__BUFFER_LOCATION_);
BUFFER . : { } > EXTERNAL_MEM
其中,缓冲区位置
定义为某个地址,外部内存
在内存
部分中定义
在C
程序中,我有一个全局缓冲区声明为:
char outbuf[4096] __attribute__((section("BUFFER")));
可以看出,链接器脚本没有提到任何名为BUFFER
的输入部分,但输出部分的名称是这样的
编译程序时,我看到链接器将缓冲区放在假定的地址(buffer\u LOCATION
)中,尽管LDF中没有定义输入部分。当我从源代码中删除属性时,缓冲区被放置在一个完全不同的地址中
因此,我假设默认情况下,“input section description”类型的输出节命令会隐式地将输出节的名称添加到输入节列表中,除非在其他地方定义。然而,在阅读中,我找不到对这种行为的描述
是我遗漏了什么,还是它是一个“未记录的功能”?是的,输出节将自动匹配具有相同名称的输入节,除非不同的输出节明确提及它们
这记录在(我的重点)下:
孤立节是输入文件中存在的节,链接器脚本未将这些节显式放置到输出文件中。
链接器仍将通过以下方式将这些节复制到输出文件中:
查找或创建要放置
孤立输入部分
如果孤立输入节的名称与
一个现有的输出节,则孤立的输入节将被删除
放在输出部分的末尾。
如果没有具有匹配名称的输出节,则创建新的输出
将创建节