是否有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_dummy
,arm-linux-gnueabihf-
和crt1.o
中找到。我没有尝试重新编译它,但可能有一个配置值强制整个libc编码为ARM32。
答案 0 :(得分:4)
是否有GCC配置生成只包含ARM32代码的可执行文件?我知道
-marm
开关......
您的主要问题是该代码(例如_start
)不是由编译器生成的,但它已经预编译(如缩略图代码)。
如果你想让这些功能成为非拇指代码,你必须用你自己的(非拇指)“替换”现有文件(拇指)。
(您不必覆盖现有文件,但可以指示链接器在其他目录中搜索这些文件。)
如果您没有找到预先构建的非拇指文件,则必须自己创建(可能需要做很多工作)。