根据Randy Howard的回答,我查看了XNU 源代码。该文件包含所有系统调用的列表。该文件描述了这样的签名: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
,但还有很多工作要做。因此,仍然非常感谢您提供适当的参考文档以及对该错误代码来源的任何见解。