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