~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/gdb/linux/tasks.py

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /scripts/gdb/linux/tasks.py (Version linux-6.12-rc7) and /scripts/gdb/linux/tasks.py (Version linux-2.6.0)


  1 #                                                 
  2 # gdb helper commands and functions for Linux     
  3 #                                                 
  4 #  task & thread tools                            
  5 #                                                 
  6 # Copyright (c) Siemens AG, 2011-2013             
  7 #                                                 
  8 # Authors:                                        
  9 #  Jan Kiszka <jan.kiszka@siemens.com>             
 10 #                                                 
 11 # This work is licensed under the terms of the    
 12 #                                                 
 13                                                   
 14 import gdb                                        
 15                                                   
 16 from linux import utils, lists                    
 17                                                   
 18                                                   
 19 task_type = utils.CachedType("struct task_stru    
 20                                                   
 21                                                   
 22 def task_lists():                                 
 23     task_ptr_type = task_type.get_type().point    
 24     init_task = gdb.parse_and_eval("init_task"    
 25     t = init_task                                 
 26                                                   
 27     while True:                                   
 28         thread_head = t['signal']['thread_head    
 29         for thread in lists.list_for_each_entr    
 30             yield thread                          
 31                                                   
 32         t = utils.container_of(t['tasks']['nex    
 33                                task_ptr_type,     
 34         if t == init_task:                        
 35             return                                
 36                                                   
 37                                                   
 38 def get_task_by_pid(pid):                         
 39     for task in task_lists():                     
 40         if int(task['pid']) == pid:               
 41             return task                           
 42     return None                                   
 43                                                   
 44                                                   
 45 class LxTaskByPidFunc(gdb.Function):              
 46     """Find Linux task by PID and return the t    
 47                                                   
 48 $lx_task_by_pid(PID): Given PID, iterate over     
 49 return that task_struct variable which PID mat    
 50                                                   
 51     def __init__(self):                           
 52         super(LxTaskByPidFunc, self).__init__(    
 53                                                   
 54     def invoke(self, pid):                        
 55         task = get_task_by_pid(pid)               
 56         if task:                                  
 57             return task.dereference()             
 58         else:                                     
 59             raise gdb.GdbError("No task of PID    
 60                                                   
 61                                                   
 62 LxTaskByPidFunc()                                 
 63                                                   
 64                                                   
 65 class LxPs(gdb.Command):                          
 66     """Dump Linux tasks."""                       
 67                                                   
 68     def __init__(self):                           
 69         super(LxPs, self).__init__("lx-ps", gd    
 70                                                   
 71     def invoke(self, arg, from_tty):              
 72         gdb.write("{:>10} {:>12} {:>7}\n".form    
 73         for task in task_lists():                 
 74             gdb.write("{} {:^5} {}\n".format(     
 75                 task.format_string().split()[0    
 76                 task["pid"].format_string(),      
 77                 task["comm"].string()))           
 78                                                   
 79                                                   
 80 LxPs()                                            
 81                                                   
 82                                                   
 83 thread_info_type = utils.CachedType("struct th    
 84                                                   
 85                                                   
 86 def get_thread_info(task):                        
 87     thread_info_ptr_type = thread_info_type.ge    
 88     if task_type.get_type().fields()[0].type =    
 89         return task['thread_info']                
 90     thread_info = task['stack'].cast(thread_in    
 91     return thread_info.dereference()              
 92                                                   
 93                                                   
 94 class LxThreadInfoFunc (gdb.Function):            
 95     """Calculate Linux thread_info from task v    
 96                                                   
 97 $lx_thread_info(TASK): Given TASK, return the     
 98 variable."""                                      
 99                                                   
100     def __init__(self):                           
101         super(LxThreadInfoFunc, self).__init__    
102                                                   
103     def invoke(self, task):                       
104         return get_thread_info(task)              
105                                                   
106                                                   
107 LxThreadInfoFunc()                                
108                                                   
109                                                   
110 class LxThreadInfoByPidFunc (gdb.Function):       
111     """Calculate Linux thread_info from task v    
112                                                   
113 $lx_thread_info_by_pid(PID): Given PID, return    
114 variable."""                                      
115                                                   
116     def __init__(self):                           
117         super(LxThreadInfoByPidFunc, self).__i    
118                                                   
119     def invoke(self, pid):                        
120         task = get_task_by_pid(pid)               
121         if task:                                  
122             return get_thread_info(task.derefe    
123         else:                                     
124             raise gdb.GdbError("No task of PID    
125                                                   
126                                                   
127 LxThreadInfoByPidFunc()                           
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php