【问题标题】:Why my system ld script use expression like "dot = dot"?为什么我的系统 ld 脚本使用像“dot = dot”这样的表达式?
【发布时间】:2021-03-02 13:45:14
【问题描述】:

当使用ld -verbose 转储我系统的链接器脚本时,我注意到它使用了:

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

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

【问题讨论】:

    标签: linker ld linker-scripts


    【解决方案1】:

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

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

    链接器选择最佳输出节描述后,将跳过非. 符号分配。使用. = .;,链接器将停止搜索并将孤立部分放在. = .; 的正上方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2020-03-01
      • 1970-01-01
      • 2017-09-15
      相关资源
      最近更新 更多