SECTIONS
{
.text 0×1000 : { *(.text) _etext = . ; }
.mdata 0×2000 : AT ( ADDR (.text) + SIZEOF (.text) )
{ _data = . ; *(.data); _edata = . ; }
.bss 0×3000 :
{ _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;}
}
这段链接脚本是一个简单的Link Description Script (LDS)文件,通常用于描述如何将目标文件和库文件链接成一个可执行文件或共享库。这个脚本定义了三个不同的段(sections):.text
、.mdata
和 .bss
。
-
*.text 0×1000 : { (.text) _etext = . ; }
.text
段是程序的代码段。0×1000
是该段的起始地址。*(.text)
表示链接器需要收集所有的.text
段。_etext = . ;
是一个定义,将当前地址(.
)赋值给_etext
,通常用于标记代码段的结束。
-
.mdata 0×2000 : AT ( ADDR (.text) + SIZEOF (.text) )
.mdata
段通常用于存储已初始化的全局变量。0×2000
是该段的起始地址。AT ( ADDR (.text) + SIZEOF (.text) )
指定.mdata
段应该放在.text
段之后,并且与.text
段对齐。*(.data);
表示链接器需要收集所有的.data
段。_edata = . ;
是一个定义,将当前地址(.
)赋值给_edata
,通常用于标记数据段的结束。
-
**.bss 0×3000 : { _bstart = . ; (.bss) (COMMON) ; _bend = . ;}
.bss
段用于存储未初始化的全局变量。0×3000
是该段的起始地址。*(.bss)
表示链接器需要收集所有的.bss
段。*(COMMON)
表示链接器需要收集所有的 COMMON 段。_bstart = . ;
和_bend = . ;
是两个定义,分别将当前地址(.
)赋值给_bstart
和_bend
,通常用于标记 BSS 段的开始和结束。
总的来说,这个链接脚本定义了程序的三个主要段:代码段、数据段和 BSS 段,并指定了它们的起始地址和如何收集这些段中的内容。
标签:mdata,链接,etext,text,bss,lds,地址,arm From: https://www.cnblogs.com/zxdplay/p/17982346