c - 在手臂皮质上使用 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 上引发长调用但是如果我这样做,所有函数都使用长调用,这不是我想要的。