如何 return xv6 系统调用中的结构?

How to return a struct in xv6 syscalls?

我目前正在测试 xv6 并实现了一个新的系统调用。

据我所知,xv6 中的所有系统调用 return 都是一个 int。 这是必需的吗?为什么?

因为我想return一个C结构。

这可能吗? 我需要做什么才能实现这一目标?

来自系统调用的 return 值存储在 eax 寄存器中。

source 中所示:

proc->tf->eax = syscalls[num]();

这意味着 return 值将始终是单个 32 位值。

系统调用处理程序的函数类型也定义为 returning int 且不带参数:

static int (*syscalls[])(void)

在这种情况下 return 结构的正确方法是传递一个 user-space 指针作为系统调用参数。在验证它是有效的之后,它会将结构数据存储在该指针处。请注意,由于系统调用处理程序本身不接受任何参数,因此您必须使用像 argptr 这样的参数获取器,它会为您处理有效性检查。