此 RISC-V 代码不会因免费系统调用中的某些问题而停止

This RISC-V Code that does not halt due to some problem in free syscall

提问人:denisssj 提问时间:11/4/2023 最后编辑:denisssj 更新时间:11/4/2023 访问量:21

问:

这是我在隔离与较大代码相关的问题后编写的简单 RISC-V 代码。

.globl main

# we have a0, a1, a2
main:
    addi sp, sp, -36
    sw s0, 0(sp)
    sw s1, 4(sp)
    sw s2, 8(sp)
    sw s3, 12(sp)
    sw s4, 16(sp)
    sw s5, 20(sp)
    sw s6, 24(sp)
    sw s7, 28(sp)
    sw s8, 32(sp)

    addi sp, sp, -24
    sw ra, 8(sp)
    sw a0, 12(sp)
    sw a1, 16(sp)
    sw a2, 20(sp)

    li a0, 4
    jal ra, malloc
    mv s0, a0

    lw ra, 8(sp)
    lw a0, 12(sp)
    lw a1, 16(sp)
    lw a2, 20(sp)
    addi sp, sp, 24

    # cleaning m0
    addi sp, sp, -16
    sw a0, 0(sp)
    sw a1, 4(sp)
    sw a2, 8(sp)    
    sw ra, 12(sp)
    
    mv a0, s0
    jal ra, free

    lw a0, 0(sp)
    lw a1, 4(sp)
    lw a2, 8(sp)
    lw ra, 12(sp)
    addi sp, sp, 16

    #Epilog
    lw s0, 0(sp)
    lw s1, 4(sp)
    lw s2, 8(sp)
    lw s3, 12(sp)
    lw s4, 16(sp)
    lw s5, 20(sp)
    lw s6, 24(sp)
    lw s7, 28(sp)
    lw s8, 32(sp)
    addi sp, sp, 36
    ret
    
free:
    mv a1 a0
    li a0 0x3CC
    addi a6 x0 4
    ecall
    ret


malloc:
    mv a1 a0
    li a0 0x3CC
    addi a6 x0 1
    ecall
    ret

此代码不会停止。但是,当我注释掉调用以释放代码的代码时,代码工作正常。malloc 和 free 的代码片段取自 Berkeley 的 cs61C fa2020 项目 2。我尝试使用金星模拟器运行代码。

调试 riscv32

评论


答: 暂无答案