如何只编译ARM32二进制文件(没有拇指)

时间:2017-09-18 10:21:34

标签: linux gcc assembly arm thumb

是否有GCC配置会生成仅包含ARM32代码的可执行文件? 我知道<div class = "wrapper"> <div class = "container"> <div class="row"> <div class="col-xs-6"> </div> <div class="col-xs-6"> </div> </div> </div> </div> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">开关告诉编译器不要生成Thumb代码,但它只适用于程序的用户代码,而初始化例程(例如-marm,{{ 1}},...)仍然包含Thumb指令。 我在Linux x86-64系统上使用Linaro交叉编译器工具链(_start)。

编辑:

重新编译工具链时,我自己找到了(可能的)解决方案。编码为Thumb的初始化例程是glibc的一部分,可以在对象文件frame_dummyarm-linux-gnueabihf-crt1.o中找到。我没有尝试重新编译它,但可能有一个配置值强制整个libc编码为ARM32。

1 个答案:

答案 0 :(得分:4)

  

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

您的主要问题是该代码(例如_start)不是由编译器生成的,但它已经预编译(如缩略图代码)。

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

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

如果您没有找到预先构建的非拇指文件,则必须自己创建(可能需要做很多工作)。