在链接描述文件中,在定义内存部分时,可以指定某些标志:
MEMORY
{
rom (rx) : ORIGIN = 0x08000000, LENGTH = 0x100000
ram (!rx) : ORIGIN = 0x20000000, LENGTH = 0x1C000
}
查看LD的一些在线文档,它声明:
一个可选的属性列表,允许与AT& T链接器兼容,但除了检查属性列表是否有效之外不被ld使用
(请注意,上述引用来自LD的大量古老文献,大约在1994年。)
最新的binutils文档表明(至少对于GNU ld)这些标志用于为未分配的部分自动选择内存段:
attr字符串是一个可选的属性列表,用于指定是否将特定内存区域用于未在链接描述文件中显式映射的输入节。如SECTIONS中所述,如果您没有为某个输入节指定输出节,则链接器将创建一个与输入节具有相同名称的输出节。如果定义区域属性,链接器将使用它们为其创建的输出节选择内存区域。
我的问题是,这些标志是否有超出内存布局的实际效果?它们是否会影响运行时的内存保护属性?如果专门将每个部分分配给一个内存段,它们是否有用?