如何将c程序编译到裸机rv32i处理器?

问题描述 投票:0回答:1

我正在开发一个 C++ RISC-V 模拟器,它模拟 rv32i ISA。我已安装工具链并正确生成文件。

我执行了这个命令:

riscv32-unknown-elf-gcc testing_program.c -march=rv32i

并阅读反汇编:

riscv32-unknown-elf-objdump -d a.out > program.dump

问题是,反汇编文件似乎只有 rv32i 指令(这是正确的),但是当我在具有反汇编功能的模拟器上使用 a.out 时,反汇编会抛出许多无法识别的指令。

程序很简单:

int main(){
    int a = 1;
    a = 1 + 2;
}

没有库,也没有包含,仅用于测试。

我不打算放反汇编文件,因为太长了,但它看起来像这样:

a.out:     formato del fichero elf32-littleriscv


Desensamblado de la sección .text:

00010094 <exit>:
   10094:   ff010113            addi    sp,sp,-16
   10098:   00000593            li  a1,0
   1009c:   00812423            sw  s0,8(sp)
   100a0:   00112623            sw  ra,12(sp)
   100a4:   00050413            mv  s0,a0
   100a8:   289000ef            jal 10b30 <__call_exitprocs>
   100ac:   d481a783            lw  a5,-696(gp) # 12558 <__stdio_exit_handler>
   100b0:   00078463            beqz    a5,100b8 <exit+0x24>
   100b4:   000780e7            jalr    a5
   100b8:   00040513            mv  a0,s0
   100bc:   595010ef            jal 11e50 <_exit>

000100c0 <register_fini>:
   100c0:   00000793            li  a5,0
   100c4:   00078863            beqz    a5,100d4 <register_fini+0x14>
   100c8:   00012537            lui a0,0x12
   100cc:   d1850513            addi    a0,a0,-744 # 11d18 <__libc_fini_array>
   100d0:   3950006f            j   10c64 <atexit>
   100d4:   00008067            ret

000100d8 <_start>:
   100d8:   00002197            auipc   gp,0x2
   100dc:   73818193            addi    gp,gp,1848 # 12810 <__global_pointer$>
   100e0:   d4818513            addi    a0,gp,-696 # 12558 <__stdio_exit_handler>
   100e4:   07018613            addi    a2,gp,112 # 12880 <__BSS_END__>
   100e8:   40a60633            sub a2,a2,a0
   100ec:   00000593            li  a1,0
c riscv riscv32
1个回答
0
投票

正如“riscv32-unknown-elf-objdump”告诉您的那样,文件“a.out”是一个ELF文件。这种格式不仅仅包括二进制机器代码,这就是您在模拟器中看到的内容。

注意:“a.out”是链接的可执行文件的历史默认名称。您可能希望在构建时使用带有

-o
选项的真实姓名。

使用“riscv32-unknown-elf-objcopy”仅提取机器代码,如下所示(未经测试,因为我没有安装该工具链):

riscv32-unknown-elf-objcopy -O binary a.out a.bin

请查阅其文档以了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.