为啥我的系统 ld 脚本使用像“dot = dot”这样的表达式?

Posted

技术标签:

【中文标题】为啥我的系统 ld 脚本使用像“dot = dot”这样的表达式?【英文标题】: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            :  

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于为啥我的系统 ld 脚本使用像“dot = dot”这样的表达式?的主要内容,如果未能解决你的问题,请参考以下文章

利用callgrind+gprof2dot+dot进行性能分析

利用callgrind+gprof2dot+dot进行性能分析

Format: “png“ not recognized. Use one of: canon cmap cmapx cmapx_np dot dot_json eps fig gv imap ima

Format: “png“ not recognized. Use one of: canon cmap cmapx cmapx_np dot dot_json eps fig gv imap ima

为啥它显示像 ld 返回 1 退出状态和未定义的引用 `powr(int, int)' 之类的错误

Unity 编辑器开发SceneView GUI控制