Linker 如何减少或消除手臂/拇指远端呼叫修补?

Linker 如何减少或消除手臂/拇指远端呼叫修补?,linker,embedded,arm,firmware,thumb,Linker,Embedded,Arm,Firmware,Thumb,我正在开发一款产品,它的闪存空间(用于固件存储)和内存(用于执行)都非常昂贵。因此,我希望生成的ELF尽可能小,而不会明显牺牲产品性能。代码被编译为ARM和Thumb的混合体,基本上使用Thumb模式。我一直在调整编译器/链接器选项以减小大小(优化空间、删除未使用的函数等)。我注意到的一件事是,我得到了很多(大约180个)生成的远呼叫补丁,这占用了一些空间 长话短说,有谁知道一个减少或消除这些补丁的好方法(大概是通过避免大多数/所有远端调用)?在我看来,应该有一种方法来重新组织和优化所有内容在其

我正在开发一款产品,它的闪存空间(用于固件存储)和内存(用于执行)都非常昂贵。因此,我希望生成的ELF尽可能小,而不会明显牺牲产品性能。代码被编译为ARM和Thumb的混合体,基本上使用Thumb模式。我一直在调整编译器/链接器选项以减小大小(优化空间、删除未使用的函数等)。我注意到的一件事是,我得到了很多(大约180个)生成的远呼叫补丁,这占用了一些空间

长话短说,有谁知道一个减少或消除这些补丁的好方法(大概是通过避免大多数/所有远端调用)?在我看来,应该有一种方法来重新组织和优化所有内容在其各自内存部分中的存储/链接顺序,到目前为止,调用是不必要的,或者至少是最小化的


编辑:我不再需要这个问题的答案。事实证明,在本产品中,远调用是不可避免的,因为ITCM和SRAM之间的调用需要远调用(不幸的是,它们在地址空间中彼此相距很远)。感谢您的评论和回答。

如果您使用的是RVCT链接器armlink,您可以尝试中提到的不同的节排序算法。

您能给出您正在使用的CPU以及什么类型的编译器和选项吗?例如,这是cortex-m还是旧的ARM-926?“互通”将根据CPU功能的不同而有所不同。例如,在所有CPU类型上,编译器都将针对最坏的情况。不使用该链接器,但如果我是这样的话--sort=AvgCallDepth将是赢家。谢谢你的回答!(给你一个公认的答案。)