bss段起始地址
通常在链接脚本中,可自由设定代码每个段的链接地址;
而针对bss,我们每次需进行bss清除操作,故需要提供bss的地址给汇编中;
由于bss段字节对齐一般为4字节对齐(即地址最低位为0, 4, 8, C),所以起始地址也需要4字节对齐,否则会清除数据错乱而导致程序无法运行。
比如,若bss段地址非4字节对齐:0x20000289,由于bss段数据一般为4字节对齐(也可8字节,16字节对齐,一般32位SOC而言,用4字节),故再进行清除时,汇编会根据起始地址在0x20000288开始清除操作,导致数据清除错误。
故最好让bss段起始地址4字节对齐,如下:
. = ALIGN(4);
__bss_start = .;
.bss ALIGN(4) : {*(.bss) *(COMMON)}
__bss_end = .;