在 xv6 中,系统调用的返回值的类型是uint64
,但是出错却返回 -1
如: https://github.com/mit-pdos/xv6-riscv/blob/riscv/kernel/sysproc.c#LL38-L49C2
而用户态文件夹下定义的系统调用声明却又返回 int
,如: https://github.com/mit-pdos/xv6-riscv/blob/riscv/user/user.h#L4-L24
想请教一下大家,这是何解?
![]() | 1 Madcrow 2023-03-05 01:51:33 +08:00 via Android 数都是同一个 64 位数,只是你把它看作 uint 还是 int |
![]() | 2 Madcrow 2023-03-05 02:05:23 +08:00 via Android |
![]() | 3 qianxi0410 OP 好像只是单纯了做了下类型转换而已,-1 最后还是-1 ,那内核为何还要定义为 uint64 ,直接定义为 int 不好吗? |
![]() | 4 levelworm 2023-03-05 10:27:59 +08:00 via Android 我好像记得有个原因是 int 随着架构不同有可能不一样,但是 uintX 都是一样的。不过我也不确定。 |
![]() | 5 Madcrow 2023-03-05 11:17:38 +08:00 via Android 应该是因为返回值保存在寄存器中,寄存器在 riscv64 中是 64bit |