在链接脚本中使用 ENTRY 指定入口函数,或者使用-e 选项指定入口函数,会把该函数链接到程序代码段的起始地址吗?
不会,函数被链接在哪里是链接脚本确定的,与 ENTRY 无关。
可以试一试只写一个段,比如只有 .init 段,然后用 ENTRY 来指定。
ENTRY 会影响 elf 文件的 entry_address 字段是确定的。
ENTRY其实是针对elf文件的一个概念,会指定elf文件头里的entry point,这个是elf loader加载程序的入口点,并不对应bin文件的第一条指令。bin文件里的起始内容是由SECTIONS里第一个section确定的
这之间有没有存在一些隐形的规则
我见到的得很多时候编译器是会把通过entry指定的函数链接到最前面的位置的
是通过查看反汇编,起始地址的内容就是我通过entry指定的函数
一直以来对这个标记的功能理解上有点问题
sorry。刚刚是我回答太快了,想当然了,经过我手上的两款芯片确认了。
ENTRY指定的函数入口,就位于代码段的起始位置。
@recan 真正代码段的起始,应该要看SECTION里面的text段的分布;这里才是真正的代码段开始。一般的芯片这里首先存放的都是中断向量表。


如图:
这里还得看启动汇编怎么写;像上图就跟链接脚步的对上了,ENTRY指定的就是init段的首地址。
/* Entry Point
ENTRY(SYMBOL)
/
ENTRY(Reset_Handler)
可能会有些编译器包含一些隐性的规则 会把ENTRY指定的函数放置到最前面
但是这应该不是可靠并且通用的方式,还是取决于链接脚本内部自己对各个段排布定义
ENTRY有一个确定的功能 就是如果产生的是elf文件,会将elf文件的entry point address设置为你设置的函数地址
因为ENTRY除了可以跟着函数名称 还可以用一个地址作为参数
@recan 入口点不一定在生成代码的第一行
@jhb 参考下这个英文说明
@recan 嗯 基本了解了
@jhb 有帮助的话,欢迎采纳最佳答案。