连接器和架构

Gan*_*ian 6 embedded linker

为什么我们有不同架构的连接器?链接器的服务是解析地址.那么它如何与目标架构的指令相关?

MSa*_*ers 9

有很多很多原因,我无法详尽地列出所有这些原因.

  • 当架构不支持与位置无关的代码时,链接器需要做更多的工作.在这些情况下,甚至需要解决函数内的跳转问题.

  • 链接器需要创建特定于体系结构的头,例如ELF或PE头.

  • 链接器需要在支持它们的平台上包含资源,数据叉或类似的东西

  • 链接器需要实例化导出的C++模板

  • 链接器还需要处理尚无法解决的地址.这可以包括系统调用或动态加载的库.

  • 链接动态库时,链接器需要导出多个输入函数.不同的体系结构使用不同的方法来指示要导出的功能

  • 如果在编译时无法确定实际的调用序列,则链接器可能需要插入它们.例如,对于支持两个指令集的体系结构,只要调用者和被调用者使用的指令集不同,就需要插入"指令集开关".

  • 链接器优化可以基于与体系结构相关的细节.例如,如果4KB区域内的函数调用更快,则将调用者和被调用者放在一起是有意义的.

  • 可以完成跨目标文件的内联,但需要删除调用设置,被调用者序言,被调用者epilog和返回值处理.这些是特定于体系结构的,因此只需识别它们就已经采用了特定于架构的链接器.