5 // Created by Matt Wright on 9/13/12.
6 // Copyright (c) 2012 Matt Wright. All rights reserved.
9 #include <kern/thread.h>
10 #include <kern/debug.h>
11 #include "kern_internal.h"
13 kern_return_t
pthread_start(kmod_info_t
* ki
, void *d
);
14 kern_return_t
pthread_stop(kmod_info_t
*ki
, void *d
);
16 pthread_callbacks_t pthread_kern
;
18 const struct pthread_functions_s pthread_internal_functions
= {
19 .pthread_init
= _pthread_init
,
20 .fill_procworkqueue
= _fill_procworkqueue
,
21 .get_pwq_state_kdp
= _get_pwq_state_kdp
,
22 .workqueue_exit
= _workqueue_exit
,
23 .workqueue_mark_exiting
= _workqueue_mark_exiting
,
24 .workqueue_thread_yielded
= _workqueue_thread_yielded
,
25 .workqueue_get_sched_callback
= _workqueue_get_sched_callback
,
26 .pth_proc_hashinit
= _pth_proc_hashinit
,
27 .pth_proc_hashdelete
= _pth_proc_hashdelete
,
28 .bsdthread_create
= _bsdthread_create
,
29 .bsdthread_register
= _bsdthread_register
,
30 .bsdthread_terminate
= _bsdthread_terminate
,
31 .bsdthread_ctl
= _bsdthread_ctl
,
32 .thread_selfid
= _thread_selfid
,
33 .workq_kernreturn
= _workq_kernreturn
,
34 .workq_open
= _workq_open
,
36 .psynch_mutexwait
= _psynch_mutexwait
,
37 .psynch_mutexdrop
= _psynch_mutexdrop
,
38 .psynch_cvbroad
= _psynch_cvbroad
,
39 .psynch_cvsignal
= _psynch_cvsignal
,
40 .psynch_cvwait
= _psynch_cvwait
,
41 .psynch_cvclrprepost
= _psynch_cvclrprepost
,
42 .psynch_rw_longrdlock
= _psynch_rw_longrdlock
,
43 .psynch_rw_rdlock
= _psynch_rw_rdlock
,
44 .psynch_rw_unlock
= _psynch_rw_unlock
,
45 .psynch_rw_wrlock
= _psynch_rw_wrlock
,
46 .psynch_rw_yieldwrlock
= _psynch_rw_yieldwrlock
,
48 .workq_reqthreads
= _workq_reqthreads
,
49 .thread_qos_from_pthread_priority
= _thread_qos_from_pthread_priority
,
50 .pthread_priority_canonicalize2
= _pthread_priority_canonicalize
,
53 kern_return_t
pthread_start(__unused kmod_info_t
* ki
, __unused
void *d
)
55 pthread_kext_register((pthread_functions_t
)&pthread_internal_functions
, &pthread_kern
);
59 kern_return_t
pthread_stop(__unused kmod_info_t
*ki
, __unused
void *d
)
67 thread_t th
= current_thread();
68 return pthread_kern
->get_bsdthread_info(th
);