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

2023 年 3 月 5 日
 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

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

2184 次点击
所在节点    操作系统
5 条回复
Madcrow
2023 年 3 月 5 日
数都是同一个 64 位数,只是你把它看作 uint 还是 int
Madcrow
2023 年 3 月 5 日
qianxi0410
2023 年 3 月 5 日
好像只是单纯了做了下类型转换而已,-1 最后还是-1 ,那内核为何还要定义为 uint64 ,直接定义为 int 不好吗?
levelworm
2023 年 3 月 5 日
我好像记得有个原因是 int 随着架构不同有可能不一样,但是 uintX 都是一样的。不过我也不确定。
Madcrow
2023 年 3 月 5 日
应该是因为返回值保存在寄存器中,寄存器在 riscv64 中是 64bit

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

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

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

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

© 2021 V2EX