簡體   English   中英

如何只編譯ARM32二進制文件(沒有拇指)

[英]How to compile ARM32 only binary (no thumb)

是否有GCC配置將生成僅包含ARM32代碼的可執行文件? 我知道-marm開關告訴編譯器不要生成Thumb代碼,但它只適用於程序的用戶代碼 ,而初始化例程(例如_startframe_dummy ,...)仍然包含Thumb指令。 我在Linux x86-64系統上使用Linaro交叉編譯工具鏈( arm-linux-gnueabihf- )。

編輯:

在重新編譯工具鏈時,我自己找到了(可能的)解決方案。 編碼為Thumb的初始化例程是glibc的一部分,可以在目標文件crt1.ocrti.ocrtbegin.o 我沒有嘗試重新編譯它,但可能有一個配置值強制整個libc編碼為ARM32。

是否有GCC配置將生成僅包含ARM32代碼的可執行文件? 我知道-marm開關......

您的主要問題是代碼(例如_start )不是由編譯器生成的,但它已經預編譯(如拇指代碼)。

如果你想讓這些函數成為非拇指代碼,你必須用自己的(非拇指)“替換”現有文件(拇指)。

(您不必覆蓋現有文件,但可以指示鏈接器在其他目錄中搜索這些文件。)

如果你沒有找到預先構建的非拇指文件,你必須自己創建它們(這可能是很多工作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM