> … > > + E = \(kmalloc\|kzalloc\|krealloc\|kcalloc\| > > + kmalloc_node\|kzalloc_node\|kmalloc_array\| > > + kmalloc_array_node\|kcalloc_node\)(...)@kok > … > > How do you think about the possibility for any adjustments according to the > order > of the mentioned function names in proposed disjunctions for the semantic > patch language?
I would like to share another source code analysis approach. I hope that this contribution can trigger further helpful software development ideas. @initialize:python@ @@ import sys def write_identifier(source, call): names = [] for x in source: names.append(call) sys.stdout.write("\n".join(names) + "\n") @find1@ expression e; identifier call, x; position pos; type rt; @@ rt x(...) { <+... e =@pos (kzalloc@call |kmalloc@call |kcalloc@call |kmalloc_array@call |kmemdup@call |kstrdup@call |vmalloc@call |vzalloc@call |kzalloc_node@call |kvmalloc@call |krealloc@call |kmalloc_node@call |kcalloc_node@call |__vmalloc@call |vmalloc_user@call |vzalloc_node@call |vmalloc_32@call |__vmalloc_node_range@call |vmalloc_node@call |kmalloc_array_node@call |__vmalloc_node@call |vmalloc_32_user@call |vmalloc_exec@call )(...) ...+> } @script:python collection1@ call << find1.call; place << find1.pos; @@ write_identifier(place, call) @find2@ identifier call, var, x; position pos; type rt, vt; @@ rt x(...) { <+... vt var =@pos (kzalloc@call |kmalloc@call |kcalloc@call |kmalloc_array@call |kmemdup@call |kstrdup@call |vmalloc@call |vzalloc@call |kzalloc_node@call |kvmalloc@call |krealloc@call |kmalloc_node@call |kcalloc_node@call |__vmalloc@call |vmalloc_user@call |vzalloc_node@call |vmalloc_32@call |__vmalloc_node_range@call |vmalloc_node@call |kmalloc_array_node@call |__vmalloc_node@call |vmalloc_32_user@call |vmalloc_exec@call )(...); ...+> } @script:python collection2@ call << find2.call; place << find2.pos; @@ write_identifier(place, call) Test result: elfring@Sonne:~/Projekte/Linux/next-patched> git checkout next-20201016 && XX=$(date) && time spatch --timeout 23 --python python3 --jobs 4 --chunksize 1 --include-headers --no-includes --dir . ~/Projekte/Coccinelle/janitor/report_memory_allocation_calls4.cocci 2> ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201016/report_memory_allocation_calls4-errors.txt | echo "$(echo 'call' && cat)" | csvsql --query 'select call, count(*) from stdin group by call order by count(*) desc'; YY=$(date) && echo "$XX | $YY" … call,count(*) kzalloc,12652 kmalloc,4902 kcalloc,2564 kmalloc_array,859 kmemdup,797 kstrdup,469 vmalloc,405 vzalloc,359 kzalloc_node,177 kvmalloc,154 krealloc,151 kmalloc_node,49 kcalloc_node,44 __vmalloc,34 vmalloc_user,28 vzalloc_node,21 vmalloc_32,9 __vmalloc_node_range,8 vmalloc_node,7 kmalloc_array_node,5 __vmalloc_node,4 vmalloc_32_user,1 real 22m25,049s user 84m11,257s sys 0m12,168s So 18. Okt 16:55:08 CEST 2020 | So 18. Okt 17:17:33 CEST 2020 The log file contains the information “9211 files match”. Can such facts influence the specification of efficient SmPL disjunctions another bit? Regards, Markus _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci