2013-07-10 2 views
5

파일LLVM은/그 소리 MIPS로하고 출력하기 만 SPIM 작동하지 ....

#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에 대한 신뢰할 수있는 SPIM 시뮬레이터에서 실행하려고하면 SPIM 객체가 거의 모든 행에 표시됩니다. '. 섹션 .mdebug.abi32'뿐만 아니라 '.cfi *'형식의 줄을 - 더 혼란 스럽기 때문에 (MIPS와 비슷하기 때문에 ...) 'lui $ 2, % hi (__gnu_local_gp) "에 반대한다.

내가 SPIM와 LLVM이 대처하는 것이 MIPS의 다른 맛에 대한 몇 가지 정보를 찾고, 또는 누군가는이 MIPS 받아 내가 실행할 수있는 MIPS 시뮬레이터의 예를 제공합니다 LLVM 생산되는 코드입니다.

.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 

답변

0

LLVM의 Mips에서 조립 프린터는 가스 형식으로 조립합니다 (GNU 어셈블러와 호환 도구에 의해 소비에 적합) 방출한다. 매우 좋은 기회 SPI가있다 M은 그것을 읽을 수 없다. 그러나 SPIM이 Mips 바이너리를 읽을 수 있다면 LLVM에서 객체 파일을 내보내고 SPIM이이를 처리하도록 할 수 있습니다.

바이너리는 CPU 자체에서 이해해야하기 때문에 더 "보편적"입니다. 아아, 각각의 어셈블러는 일반적으로 이해할 수있는 고유 한 구문을 가지고 있으며 어셈블러는 서로 호환되는 경향이없고 연산자 순서, 구두점 의미, 지시문 등과 같은 기본 사항에 동의하지 않습니다.

1

스핌은 GNU 어셈블러를 지원하지 않는 간단한 교육 도구입니다. 다양한 실제 MIPS 프로세서의 완전한 모델을 가지고있는 OVPsim을 사용해보십시오. OVPsim에서 Linux를 실행할 수 있으며 시뮬레이트 된 Linux에서 clang이 제작 한 MIPS Linux 실행 파일을 실행할 수 있어야합니다.

+0

Linux를 사용하는 다른 경로는 Mips 용 QEMU Linux 사용자 모드 에뮬레이터를 사용하는 것입니다. 그것이 내가 clang 기반 ELLCC 툴 체인에 사용하는 것입니다. (http://ellcc.org) –