我希望函数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
没有帮助。