首页 > 解决方案 > 在手臂皮质上使用 GCC 引发对 __aeabi_fxxx 函数的长时间调用

问题描述

我试图从 foo.c 文件中引发对 __aeabi_fmul 函数的长时间调用。我没有使用 libgcc,在链接过程中我传递了一个地址为 __aeabi_fmul 的符号文件。

在 foo.ci 中可以看到编译器将调用组装成指令:

BL address_of_aeabi_function

没关系,但我想引发一个长调用,其中函数的 32 位地址将位于 .got 部分中,编译器最终将使用 32 位寄存器执行 BL,因此进行长调用。

我可以使用以下属性对我自己的函数进行长时间调用:

float my_func(float) __attribute__((long_call));

float __aeabi_fmul(float, float) __attribute__((long_call));

不工作...

如果我在编译器标志中指定 -mlong-calls,我也可以在 __aeabi_fmul 上引发长调用但是如果我这样做,所有函数都使用长调用,这不是我想要的。

标签: cgccassemblyarm

解决方案


推荐阅读