Ответ 1
На основе ответа от Рэнди Ховарда я посмотрел на исходный код 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
. Даже grepping весь исходный код XNU как для десятичного, так и шестнадцатеричного представления 316, я не обнаружил появления, которое не включало и другие цифры. Код ошибки, конечно же, не упоминается в реализации самого psynch_cvwait
, но эта реализация передает коды ошибок из других функций, которые она вызывает. На самом деле действительно нужен отладчик ядра, чтобы распутать это и проследить фактический источник этого значения.
В целом я сейчас очень маленький шаг ближе к пониманию вывода dtruss
, но с большой работой. Таким образом, правильный справочный документ и любое понимание источника этого кода ошибки будут по-прежнему очень оценены.