如何构建 ARMv8 aarch32 二进制文件?

How can I build ARMv8 aarch32 binary?

我正在使用 Mediatek X20 开发板和 gcc-linaro-6.3.1-2017.05 版本 对于基准 aarch64aarch32.

所以我想将二进制文件构建为 2 种类型的 aarch32 abi:lp64ilp32.

来自 gcc 手册,(@[toolchain_path]/share/doc/gcc/AArch64-Options.html)

它说我可以选择 ilp32lp64 以及 -mabi 选项。

但是当我使用 -mabi=lp64-mabi=ilp32 时,gcc 会出现如下错误。

armv8l-linux-gnueabihf-gcc: error: unrecognized argument in option \u2018-mabi=lp64\u2019
armv8l-linux-gnueabihf-gcc: note: valid arguments to \u2018-mabi=\u2019 are: aapcs aapcs-linux apcs-gnu atpcs iwmmxt

如何制作 ilp32lp64 格式的二进制文件?

以及如何检查二进制文件的格式?

感谢您的回复:)

ILP32和ILP64都是AArch64,只是其中一个限制为32位地址,但指令编码是一样的。为此,您需要使用特殊的工具链。我没试过这个,但你应该 Google 换 "AArch64 ILP32 toolchain"。看起来它并没有得到积极维护。 如果你想要 AArch32,那只是 ARMv7,你需要常规的 arm 工具链 (arm-linux-gnueabihf)。 https://wiki.linaro.org/Platform/arm64-ilp32

这里现在有一个针对 Debian 稳定版的 amd64 目标 arm64ilp32 的交叉工具链: https://people.linaro.org/~wookey/ilp32/

它很新,但似乎工作正常。请注意,这仅针对 arm64ilp32。如果你还想以普通 arm64 (LP64) 为目标,那么你还需要安装存档中已有的 aarch64-linux-gnu 交叉编译器。

非常欢迎反馈。 g++ 交叉编译器尚未安装,因为没有相应的 libstdc++:arm64ilp32 可用。

更新(2017 年 9 月)。这个 repo 现在包含一个 debootstrappable arm64ilp32 软件包集,用于 Debian 稳定版。