1 #include <stddef.h> 2 #include <stdbool.h> 3 #include <linux/compiler.h> 4 #include <linux/lockdep.h> 5 #include <unistd.h> 6 #include <sys/syscall.h> 7 8 static __thread struct task_struct current_obj; 9 10 /* lockdep wants these */ 11 bool debug_locks = true; 12 bool debug_locks_silent; 13 liblockdep_exit(void)14__attribute__((destructor)) static void liblockdep_exit(void) 15 { 16 debug_check_no_locks_held(); 17 } 18 __curr(void)19struct task_struct *__curr(void) 20 { 21 if (current_obj.pid == 0) { 22 /* Makes lockdep output pretty */ 23 prctl(PR_GET_NAME, current_obj.comm); 24 current_obj.pid = syscall(__NR_gettid); 25 } 26 27 return ¤t_obj; 28 } 29