为啥我的系统 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