gpt4 book ai didi

clang - LLVM/clang 输出到 MIPS,但在 SPIM 中不起作用

转载 作者:行者123 更新时间:2023-12-02 08:56:49 25 4
gpt4 key购买 nike

给定文件

#include <stdio.h>

int main() {
printf("hello world\n");
return 0;
}

我可以使用命令

clang -emit-llvm hello.c -c -o hello.bc
llc hello.bc -march=mipsel -relocation-model=static -o hello.s

生成一段看起来像 MIPS 代码的漂亮代码(放在下面,以避免破坏文本)不幸的是,当我尝试在我值得信赖的 MIPS SPIM 模拟器中运行它时,我发现 SPIM 对象几乎每一行它的。不仅是 '.Section .mdebug.abi32' 行,而且'.cfi*' 形式的任何行 - 甚至更令人困惑(因为它对我来说看起来像 MIPS...)'lui $2, %hi(__gnu_local_gp)"行被反对。

我正在寻找有关 SPIM 和 LLVM 处理的不同风格的 MIPS 的一些信息,或者有人给出一个我可以运行的 MIPS 模拟器的示例,该模拟器接受 LLVM 的 MIPS 代码生产。

    .Section .mdebug.abi32
.previous
.file "hello.bc"
.text
.globl main
.align 2
.type main,@function
.set nomips16 # @main
.ent main
main:
.cfi_startproc
.frame $sp,32,$ra
.mask 0x80000000,-4
.fmask 0x00000000,0
.set noreorder
.set nomacro
# BB#0: # %entry
addiu $sp, $sp, -32
$tmp2:
.cfi_def_cfa_offset 32
sw $ra, 28($sp) # 4-byte Folded Spill
$tmp3:
.cfi_offset 31, -4
lui $2, %hi(__gnu_local_gp)
addiu $2, $2, %lo(__gnu_local_gp)
sw $2, 16($sp)
sw $zero, 24($sp)
lui $2, %hi($.str)
addiu $4, $2, %lo($.str)
jal printf
nop
addiu $2, $zero, 0
lw $ra, 28($sp) # 4-byte Folded Reload
addiu $sp, $sp, 32
jr $ra
nop
.set macro
.set reorder
.end main
$tmp4:
.size main, ($tmp4)-main
.cfi_endproc

.type $.str,@object # @.str
.section .rodata.str1.1,"aMS",@progbits,1
$.str:
.asciz "hello world\n"
.size $.str, 13

最佳答案

Spim是一个简单的教学工具,不支持gnu汇编器。您可以尝试使用 OVPsim ,其中有各种真实MIPS处理器的完整模型。您可以在 OVPsim 上运行 Linux,并且应该能够在该模拟 Linux 上运行由 clang 生成的 MIPS Linux 可执行文件。

关于clang - LLVM/clang 输出到 MIPS,但在 SPIM 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17568849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com