我希望函数caller
将拇指函数指针作为参数:
void fun(void) {}
void caller(void(*f)(void)) {
f();
}
void _start(void) {
caller(fun);
}
当我编译它时
arm-elf-gcc -mthumb -c -fpic test.c
然后链接
arm-elf-ld test.o
,链接器尝试fun
使用互通代码进行包装,并警告未启用互通。但我不想启用互通,因为我希望它是仅限拇指的代码。没有-fpic
,代码编译和函数指针正常工作。
如果要问为什么我必须传递拇指函数指针并提供 PIC 代码,那是因为我无法更改的 API。
编辑:Gcc 版本是 4.7.2。指定-march=armv4t -mcpu=arm7tdmi
没有帮助。