在 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
|