【问题标题】:How to Cross-Compile from LLVM IR to Assembly for ARM Cortex M4?如何从 LLVM IR 交叉编译到 ARM Cortex M4 的汇编?
【发布时间】:2022-07-25 04:33:46
【问题描述】:

我正在尝试使用 llc 编译器为 ARM Cortex M4 微处理器交叉编译 llvm-ir 文件以进行汇编,或者更好地生成目标文件。
为此,我必须指定哪些参数? 我试过这个命令
llc -mtriple=armv7m-eabi -mcpu=cortex-m4 file.ll -o file.s
它不会抛出任何错误,但生成的汇编代码仍然适用于 x86 机器。

特别是尝试使用随机参数进行编译,例如
llc -mtriple=randomwords -mcpu=cortex-m4 file.ll -o file.s
它很顺利,为 x86 机器生成了一个汇编代码。它会忽略我指定的内容。

【问题讨论】:

  • 旧的 llvm 版本,这曾经很好用,新版本,不是那么多。我最终为 armv7-m 目标构建了我的 llvm 工具链并修复了它

标签: arm llvm cross-compiling llc


【解决方案1】:

我找到了解决方案,或者更好地解决了这个问题。
而不是直接使用llc,首先我通过这个命令获得了二进制代码
llvm-as file.ll -o file.bc
我使用 clang 交叉编译并使用此指令获取 ARM Cortex M4 的目标文件
clang --target=arm-none-eabi -march=armv7e-m -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -nostdlib file.bc -c -o file.o
-c 仅用于编译。
也可以通过以下命令行获取汇编代码
clang -S --target=arm-none-eabi -march=armv7e-m -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -nostdlib file.bc -o file.s

【讨论】:

    【解决方案2】:

    llc(在 v9 之前不确定)似乎只关心架构。 我可以交叉编译和链接以下脚本(对于运行 Linux 的 RPI):

    #/bin/sh
    llc-9 -march=arm -float-abi=hard -O3 -filetype obj $1.ll -o $1.o
    ~/devel/musl/musl-cross-make/output/bin/arm-linux-musleabihf-gcc -mfloat-abi=hard -static $1.o -o $1
    

    llc --version 将显示可用的架构

    根据您的情况尝试以下方法(或使用更具体的架构,如果它在列表中):

    llc -march=arm -mcpu=cortex-m4 -filetype obj file.ll -o file.o
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多