gpt4 book ai didi

c++ - 从 RISC-V 裸机程序调用 printf 系统调用时使用 C++ 模拟器失败

转载 作者:行者123 更新时间:2023-11-28 04:43:17 29 4
gpt4 key购买 nike

我正在从事一个基于 Rocket-Chip 工具的项目。我制作了一个简单的裸机程序,它在 Spike 上运行良好(即使有多个内核......等等)。

问题是当我在 C++ 模拟器中运行它时,后者在第一次 printf 调用时停止。

我的问题是:是否可以从 C 模拟器调用系统调用(如 printf、putchar ..)?或者有什么方法可以从模拟中打印出程序的结果,比如获取数据内存之类的? (我为此苦苦挣扎,但没有找到它保存数据变量的位置)。

PS:程序基于riscv-tests/benchmarks系统调用已经在那里定义。

最佳答案

Is it possible to call syscalls (like printf, putchar ..) from the C Emulator?

是的,这些函数已经定义了here在代码库中

根据代码库,全局外部变量指向的数据地址,需要从该地址读取64位数据的4个索引

extern volatile uint64_t tohost;
extern volatile uint64_t fromhost;

使用此系统调用实现的printf()、putchar()

static uintptr_t syscall(uintptr_t which, uint64_t arg0, uint64_t arg1, uint64_t arg2)
{
volatile uint64_t magic_mem[8] __attribute__((aligned(64)));
magic_mem[0] = which;
magic_mem[1] = arg0;
magic_mem[2] = arg1;
magic_mem[3] = arg2;
__sync_synchronize();

tohost = (uintptr_t)magic_mem;
while (fromhost == 0)
;
fromhost = 0;

__sync_synchronize();
return magic_mem[0];
}

关于c++ - 从 RISC-V 裸机程序调用 printf 系统调用时使用 C++ 模拟器失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49771918/

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