为什么我的系统 ld 脚本使用像 "dot = dot" 这样的表达式?

Why my system ld script use expression like "dot = dot"?

当使用 ld -verbose 转储系统的链接描述文件时,我注意到它使用:

  .data1          : { *(.data1) }                                                                                                                                                                                   
  _edata = .; PROVIDE (edata = .);                                                                                                                                                                                  
  . = .;                                                                                                  
  __bss_start = .;                                                                                        
  .bss            :  

为什么要把当前地址分配给当前地址?

. = .; 作为孤立部分放置的障碍。

https://sourceware.org/binutils/docs/ld/Location-Counter.html 表示“...相反,它假定所有赋值或其他语句都属于前一个输出部分,但赋值给的特殊情况除外。”

链接器选择最佳输出段描述后,它将跳过以下非. 符号分配。对于 . = .;,链接器将停止搜索并将孤立部分放在 . = .;.

的正上方