Dato il fileLLVM/clang outputing per MIPS, ma non funziona in SPIM ....
#include <stdio.h>
int main() {
printf("hello world\n");
return 0;
}
posso usare i comandi
clang -emit-llvm hello.c -c -o hello.bc
llc hello.bc -march=mipsel -relocation-model=static -o hello.s
per produrre un bel po 'di quello che sembra Sfortunatamente, quando si tenta di eseguirlo nel mio fidato simulatore SPIM per MIPS, scopro che SPIM si trova in quasi tutte le linee. Non solo le righe '.Section .mdebug.abi32' ma anche qualsiasi riga del modulo '.cfi *' - e ancora più confusamente (perché sembra MIPS per me ...) la riga 'lui $ 2,% hi (__gnu_local_gp)" viene contestato.
sto cercando alcune informazioni sui diversi sapori di MIPS che SPIM e LLVM affrontare, o qualcuno per dare un esempio di un simulatore di MIPS posso fare funzionare che accetta la MIPS codice che LLVM sta producendo.
.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
Un altro percorso, se si sta eseguendo Linux, sarebbe utilizzare l'emulatore della modalità utente Linux QEMU per Mips. Questo è quello che uso per la mia catena di strumenti ELLCC basata su clang. (Http://ellcc.org) –