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

时间:2017-06-20 08:07:19

标签: c armv8

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

所以我想将二进制文件构建为两种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格式化二进制文件?

我如何检查二进制格式?

感谢您的回复:)

2 个答案:

答案 0 :(得分:1)

ILP32和ILP64都是AArch64,其中只有一个限于32位地址,但指令编码是相同的。为此,您需要使用特殊的工具链。我没试过这个,但你应该谷歌为#34; AArch64 ILP32工具链"。看起来虽然没有积极维护。 如果你想要AArch32,那就是ARMv7,你需要常规的arm工具链(arm-linux-gnueabihf)。 https://wiki.linaro.org/Platform/arm64-ilp32

答案 1 :(得分:0)

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

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

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

更新(2017年9月)。这个repo现在包含一个用于Debian stable的debootstrappable arm64ilp32包。