0

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

4

0 回答 0