如何仅编译 ARM32 二进制文件(无拇指)

Mat*_*ano 4 linux assembly gcc arm thumb

是否有 GCC 配置会生成仅包含 ARM32 代码的可执行文件?我知道这个-marm开关告诉编译器不产生Thumb代码,但它仅适用于用户代码的程序,而初始化程序(例如_startframe_dummy......)还含有Thumb指令。我arm-linux-gnueabihf-在 Linux x86-64 系统上使用 Linaro 交叉编译器工具链 ( )。

编辑 :

在重新编译工具链时,我自己找到了(可能的)解决方案。编码为拇指初始化例程的glibc的一部分,可以在目标文件中找到crt1.ocrti.ocrtbegin.o。我没有尝试重新编译它,但可能有一个配置值强制将整个 libc 编码为 ARM32。

Mar*_*nau 6

是否有 GCC 配置会生成仅包含 ARM32 代码的可执行文件?我知道-marm开关...

您的主要问题是该代码(例如_start)不是由编译器生成的,但它已经存在预编译(作为拇指代码)。

如果您想让这些函数成为非拇指代码,则必须用您自己的文件(非拇指)“替换”现有文件(拇指)。

(您不必覆盖现有文件,但可以指示链接器在不同目录中搜索这些文件。)

如果您没有找到预先构建的非拇指文件,您将不得不自己创建它们(这可能需要大量工作)。