关于 xv6 系统调用实现的返回值疑问

2023-03-05 01:14:04 +08:00
 qianxi0410

在 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

想请教一下大家,这是何解?

720 次点击
所在节点    操作系统
5 条回复
Madcrow
2023-03-05 01:51:33 +08:00
数都是同一个 64 位数,只是你把它看作 uint 还是 int
Madcrow
2023-03-05 02:05:23 +08:00
qianxi0410
2023-03-05 10:20:55 +08:00
好像只是单纯了做了下类型转换而已,-1 最后还是-1 ,那内核为何还要定义为 uint64 ,直接定义为 int 不好吗?
levelworm
2023-03-05 10:27:59 +08:00
我好像记得有个原因是 int 随着架构不同有可能不一样,但是 uintX 都是一样的。不过我也不确定。
Madcrow
2023-03-05 11:17:38 +08:00
应该是因为返回值保存在寄存器中,寄存器在 riscv64 中是 64bit

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/921206

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX