基于Randy Howard 的an answer,为此我查看了XNU source code。文件syscalls.master 包含所有系统调用的列表。该文件描述了psynch_cvwait 的签名,如下所示:
uint32_t
psynch_cvwait(
user_addr_t cv,
uint64_t cvlsgen,
uint32_t cvugen,
user_addr_t mutex,
uint64_t mugen,
uint32_t flags,
int64_t sec,
uint32_t nsec)
这似乎与问题中引用的dtruss 输出没有太大相似之处。不过,pthread_support.c 中的实际实现更有用:
/*
* psynch_cvwait: This system call is used for psynch cvar waiters to block in kernel.
*/
int
psynch_cvwait(__unused proc_t p,
struct psynch_cvwait_args * uap,
uint32_t * retval)
这至少可以让您了解dtruss 打印的参数是什么。看起来第二个可能是一个结构,其成员由syscalls.master 文件描述。所以地址几乎没有用,实际成员显然根本不是由 dtruss 打印的。调整 dtruss 或许有可能获得该结构的成员,尽管我对此帐户还不确定,并且想知道为什么还没有人这样做。
在尝试将任何含义与 Err#316 输出相关联时,我不太幸运。即使对 316 的十进制和十六进制表示形式的整个 XNU 源代码进行 grep,我也没有发现不包含其他数字的事件。 psynch_cvwait 本身的实现中当然没有提到错误代码,但该实现确实从它调用的其他函数转发错误代码。确实需要一个内核调试器来解决这个问题并跟踪该值的实际来源。
总的来说,我现在离理解dtruss 输出只差了一小步,但还有很多工作要做。因此,我们仍然非常感谢您提供适当的参考文档以及对该错误代码来源的任何见解。