*import_cflow

This commit is contained in:
Costa Shulyupin 2018-07-28 23:03:44 +03:00
parent afabbd3cfb
commit 7b2acc71bd
1 changed files with 40 additions and 15 deletions

View File

@ -404,8 +404,10 @@ def leaves(dg):
def most_used(dg, ins=10, outs=10): def most_used(dg, ins=10, outs=10):
# return {a: b for a, b in sorted(dg.in_degree, key=lambda k: k[1]) if b > 1 and} # return {a: b for a, b in sorted(dg.in_degree, key=lambda k: k[1]) if b > 1 and}
return [(x, dg.in_degree(x), dg.out_degree(x)) for x in dg.nodes() # return [(x, dg.in_degree(x), dg.out_degree(x))
if dg.in_degree(x) > ins and dg.out_degree(x) > outs] return [x
for x in dg.nodes()
if dg.in_degree(x) >= ins and dg.out_degree(x) >= outs]
def starts(dg): # roots def starts(dg): # roots
@ -466,40 +468,63 @@ def cflow_preprocess(a):
r"compat_sys_\1(", s) r"compat_sys_\1(", s)
s = re.sub(r"SYSCALL_DEFINE[0-9]\((\w*),", r"sys_\1(", s) s = re.sub(r"SYSCALL_DEFINE[0-9]\((\w*),", r"sys_\1(", s)
s = re.sub(r"__setup\(.*,(.*)\)", r"void __setup() {\1();}", s) s = re.sub(r"__setup\(.*,(.*)\)", r"void __setup() {\1();}", s)
s = re.sub(r"early_param\(.*,(.*)\)", s = re.sub(r"^(\w*)param\(.*,(.*)\)", r"void \1param() {\2();}", s)
r"void early_param() {\1();}", s) s = re.sub(r"(\w*)initcall\((.*)\)",
s = re.sub(r"rootfs_initcall\((.*)\)", r"void \1initcall() {\2();}", s)
r"void rootfs_initcall() {\1();}", s)
s = re.sub(r"^static ", "", s) s = re.sub(r"^static ", "", s)
s = re.sub(r"__read_mostly", "", s) # s = re.sub(r"__read_mostly", "", s)
s = re.sub(r"^inline ", "", s) s = re.sub(r"^inline ", "", s)
s = re.sub(r"^const ", "", s) s = re.sub(r"^const ", "", s)
s = re.sub(r"^struct (.*) =", r"\1()", s) s = re.sub(r"^struct (.*) =", r"\1()", s)
s = re.sub(r"^struct ", "", s) s = re.sub(r"^struct ", "", s)
# __attribute__
# for line in sys.stdin: # for line in sys.stdin:
sys.stdout.write(s) sys.stdout.write(s)
def import_cflow(a=None): cflow_param = {
"modifier": "__init __inline__ noinline __initdata __randomize_layout __read_mostly asmlinkage "
" __visible __init __leaf__ __ref",
"wrapper": "__attribute__ __section__ "
"TRACE_EVENT MODULE_AUTHOR MODULE_DESCRIPTION MODULE_LICENSE MODULE_LICENSE MODULE_SOFTDEP "
"__acquires __releases __ATTR"
# "wrapper": "__setup early_param"
}
# export CPATH=:include:arch/x86/include:../build/include/:../build/arch/x86/include/generated/:include/uapi
# srcxray.py "'\n'.join(cflow('init/main.c'))"
def cflow(a):
arg = a
if not a: if not a:
# arg = "$(find -name '*.[ch]' -o -name '*.cpp' -o -name '*.hh')" # arg = "$(find -name '*.[ch]' -o -name '*.cpp' -o -name '*.hh')"
arg = "*.c *.h *.cpp *.hh " arg = "*.c *.h *.cpp *.hh "
arg = " $(cat cscope.files)"
elif isinstance(a, list): elif isinstance(a, list):
pass pass
elif os.path.isdir(a): elif os.path.isdir(a):
pass pass
elif os.path.isfile(a): elif os.path.isfile(a):
arg = a
pass pass
# "--depth=%d " %(level_limit+1) +
# --debug=1
cflow = (r"cflow -v "
# + "-DCONFIG_KALLSYMSZ "
+ "--preprocess='srcxray.py cflow_preprocess' "
+ ''.join([''.join(["--symbol={0}:{1} ".format(w, p)
for w in cflow_param[p].split()])
for p in cflow_param.keys()])
+ " --include=_sxt --brief --level-indent='0=\t' "
+ a)
return popen(cflow)
def import_cflow(a=None):
cf = my_graph() cf = my_graph()
stack = list() stack = list()
nprev = -1 nprev = -1
# "--depth=%d " %(level_limit+1) + for line in cflow(a):
cflow = (r"cflow " +
"--preprocess='srcxray.py cflow_preprocess' " +
"--include=_sxt --brief --level-indent='0=\t' " +
arg)
for line in popen(cflow):
# --print-level # --print-level
m = re.match(r'^([\t]*)([^(^ ^<]+)', str(line)) m = re.match(r'^([\t]*)([^(^ ^<]+)', str(line))
if m: if m: