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

TOMOYO Linux Cross Reference
Linux/tools/verification/dot2/dot2k.py

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ 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.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/verification/dot2/dot2k.py (Version linux-6.11.5) and /tools/verification/dot2/dot2k.py (Version linux-5.8.18)


  1 #!/usr/bin/env python3                            
  2 # SPDX-License-Identifier: GPL-2.0-only           
  3 #                                                 
  4 # Copyright (C) 2019-2022 Red Hat, Inc. Daniel<    
  5 #                                                 
  6 # dot2k: transform dot files into a monitor fo    
  7 #                                                 
  8 # For further information, see:                   
  9 #   Documentation/trace/rv/da_monitor_synthesi    
 10                                                   
 11 from dot2.dot2c import Dot2c                      
 12 import platform                                   
 13 import os                                         
 14                                                   
 15 class dot2k(Dot2c):                               
 16     monitor_types = { "global" : 1, "per_cpu"     
 17     monitor_templates_dir = "dot2k/rv_template    
 18     monitor_type = "per_cpu"                      
 19                                                   
 20     def __init__(self, file_path, MonitorType)    
 21         super().__init__(file_path)               
 22                                                   
 23         self.monitor_type = self.monitor_types    
 24         if self.monitor_type == None:             
 25             raise Exception("Unknown monitor t    
 26                                                   
 27         self.monitor_type = MonitorType           
 28         self.__fill_rv_templates_dir()            
 29         self.main_c = self.__open_file(self.mo    
 30         self.enum_suffix = "_%s" % self.name      
 31                                                   
 32     def __fill_rv_templates_dir(self):            
 33                                                   
 34         if os.path.exists(self.monitor_templat    
 35             return                                
 36                                                   
 37         if platform.system() != "Linux":          
 38             raise Exception("I can only run on    
 39                                                   
 40         kernel_path = "/lib/modules/%s/build/t    
 41                                                   
 42         if os.path.exists(kernel_path) == True    
 43             self.monitor_templates_dir = kerne    
 44             return                                
 45                                                   
 46         if os.path.exists("/usr/share/dot2/dot    
 47             self.monitor_templates_dir = "/usr    
 48             return                                
 49                                                   
 50         raise Exception("Could not find the te    
 51                                                   
 52                                                   
 53     def __open_file(self, path):                  
 54         try:                                      
 55             fd = open(path)                       
 56         except OSError:                           
 57             raise Exception("Cannot open the f    
 58                                                   
 59         content = fd.read()                       
 60                                                   
 61         return content                            
 62                                                   
 63     def __buff_to_string(self, buff):             
 64         string = ""                               
 65                                                   
 66         for line in buff:                         
 67             string = string + line + "\n"         
 68                                                   
 69         # cut off the last \n                     
 70         return string[:-1]                        
 71                                                   
 72     def fill_tracepoint_handlers_skel(self):      
 73         buff = []                                 
 74         for event in self.events:                 
 75             buff.append("static void handle_%s    
 76             buff.append("{")                      
 77             if self.monitor_type == "per_task"    
 78                 buff.append("\tstruct task_str    
 79                 buff.append("\tda_handle_event    
 80             else:                                 
 81                 buff.append("\tda_handle_event    
 82             buff.append("}")                      
 83             buff.append("")                       
 84         return self.__buff_to_string(buff)        
 85                                                   
 86     def fill_tracepoint_attach_probe(self):       
 87         buff = []                                 
 88         for event in self.events:                 
 89             buff.append("\trv_attach_trace_pro    
 90         return self.__buff_to_string(buff)        
 91                                                   
 92     def fill_tracepoint_detach_helper(self):      
 93         buff = []                                 
 94         for event in self.events:                 
 95             buff.append("\trv_detach_trace_pro    
 96         return self.__buff_to_string(buff)        
 97                                                   
 98     def fill_main_c(self):                        
 99         main_c = self.main_c                      
100         min_type = self.get_minimun_type()        
101         nr_events = self.events.__len__()         
102         tracepoint_handlers = self.fill_tracep    
103         tracepoint_attach = self.fill_tracepoi    
104         tracepoint_detach = self.fill_tracepoi    
105                                                   
106         main_c = main_c.replace("MIN_TYPE", mi    
107         main_c = main_c.replace("MODEL_NAME",     
108         main_c = main_c.replace("NR_EVENTS", s    
109         main_c = main_c.replace("TRACEPOINT_HA    
110         main_c = main_c.replace("TRACEPOINT_AT    
111         main_c = main_c.replace("TRACEPOINT_DE    
112                                                   
113         return main_c                             
114                                                   
115     def fill_model_h_header(self):                
116         buff = []                                 
117         buff.append("/*")                         
118         buff.append(" * Automatically generate    
119         buff.append(" * For further informatio    
120         buff.append(" *   Documentation/trace/    
121         buff.append(" */")                        
122         buff.append("")                           
123                                                   
124         return buff                               
125                                                   
126     def fill_model_h(self):                       
127         #                                         
128         # Adjust the definition names             
129         #                                         
130         self.enum_states_def = "states_%s" % s    
131         self.enum_events_def = "events_%s" % s    
132         self.struct_automaton_def = "automaton    
133         self.var_automaton_def = "automaton_%s    
134                                                   
135         buff = self.fill_model_h_header()         
136         buff += self.format_model()               
137                                                   
138         return self.__buff_to_string(buff)        
139                                                   
140     def __create_directory(self):                 
141         try:                                      
142             os.mkdir(self.name)                   
143         except FileExistsError:                   
144             return                                
145         except:                                   
146             print("Fail creating the output di    
147                                                   
148     def __create_file(self, file_name, content    
149         path = "%s/%s" % (self.name, file_name    
150         try:                                      
151             file = open(path, 'w')                
152         except FileExistsError:                   
153             return                                
154         except:                                   
155             print("Fail creating file: %s" % p    
156                                                   
157         file.write(content)                       
158                                                   
159         file.close()                              
160                                                   
161     def __get_main_name(self):                    
162         path = "%s/%s" % (self.name, "main.c")    
163         if os.path.exists(path) == False:         
164            return "main.c"                        
165         return "__main.c"                         
166                                                   
167     def print_files(self):                        
168         main_c = self.fill_main_c()               
169         model_h = self.fill_model_h()             
170                                                   
171         self.__create_directory()                 
172                                                   
173         path = "%s.c" % self.name                 
174         self.__create_file(path, main_c)          
175                                                   
176         path = "%s.h" % self.name                 
177         self.__create_file(path, model_h)         
                                                      

~ [ 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