radareorg / radare2

UNIX-like reverse engineering framework and command-line toolset
https://www.radare.org/
GNU Lesser General Public License v3.0
20.64k stars 3k forks source link

Performance Regression Loading Projects #11096

Closed l2dy closed 6 years ago

l2dy commented 6 years ago

Work environment

Built with MacPorts, commit a095f6f3f0e68bc0a48eb22560c1d5f00a40f355.

Questions Answers
OS/arch/bits (mandatory) macOS 10.13.6
File format of the file you reverse (mandatory) Mach-O
Architecture/bits of the file (mandatory) x86_64
r2 -v full output, not truncated (mandatory) radare2 2.9.0-git 0 @ darwin-x86-64 git.2.9.0-git commit: HEAD build: 2018-08-14__12:16:35

Expected behavior

Loading from a project is faster than analyzing from scratch.

r2 2.7.0

$ time for i in {1..10}; do r2 -A -c 'Ps t1' -Q a.out; done
[...]
real    0m0.434s
user    0m0.159s
sys 0m0.201s
$ time for i in {1..10}; do r2 -p t1 -c '' -Q a.out; done

real    0m0.357s
user    0m0.201s
sys 0m0.100s

Actual behavior

Loading the project takes much longer.

r2 a095f6f3f0e68bc0a48eb22560c1d5f00a40f355

$ time for i in {1..10}; do r2 -A -c 'Ps t1' -Q a.out; done
[x] Analyze all flags starting with sym. and entry0 (aa)
[...]
real    0m0.578s
user    0m0.259s
sys 0m0.215s
$ time for i in {1..10}; do r2 -p t1 -c '' -Q a.out; done

real    0m3.594s
user    0m3.401s
sys 0m0.121s

Steps to reproduce the behavior

Additional Logs, screenshots, source-code, configuration dump, ...

Drag and drop zip archives containing the Additional info here, don't use external services or link.

l2dy commented 6 years ago

Sorry, I made a typo. The regression happened after 2.8.0.

l2dy commented 6 years ago

git bisect: 1262027b722cad4f574ef704e6a4eac35f316a42 is the first bad commit

radare commented 6 years ago

Can you share the project files too?

On 15 Aug 2018, at 15:35, Zero King notifications@github.com wrote:

git bisect: 1262027 is the first bad commit

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

l2dy commented 6 years ago

@radare I don't have time for that today (didn't save the projects separately during bisect), maybe tomorrow.

MaskRay commented 6 years ago

Is it still slow?

I have recently two commits to optimize this

% time (repeat 10 ~/Dev/Bin/radare2/release/binr/radare2/radare2 -p t1 -c '' -Q a.out)
=> 0.749 total
l2dy commented 6 years ago

git bisect shows that since 6d115eac58a83db27f8550475c37aece903fedaf the situation improved, but it's still slower than 2.7.0.

real    0m1.884s
user    0m1.560s
sys 0m0.285s
MaskRay commented 6 years ago

Can you dump a diff of the project rc files? (Mine is at ~/.local/share/radare2/projects/t1/rc)

It is possible that the latest one is loading/dumping more information.

l2dy commented 6 years ago
Diff of rc files ```diff --- 4.8.0.rc 2018-08-24 07:01:10.000000000 +0000 +++ 483495787fca574b5cd09eafb26178fa7d8e8dd7.rc 2018-08-24 06:54:43.000000000 +0000 @@ -107,6 +107,7 @@ "e anal.strings = false" "e anal.timeout = 0" "e anal.to = 0xffffffffffffffff" +"e anal.types.constraint = false" "e anal.types.spec = gcc" "e anal.types.verbose = false" "e anal.vars = true" @@ -254,7 +255,7 @@ "e cfg.plugins = true" "e cfg.prefixdump = dump" "e cfg.sandbox = false" -"e cfg.user = pid…" +"e cfg.user = pid…" "e cfg.wseek = false" "e cmd.bp = " "e cmd.cprompt = " @@ -320,8 +321,8 @@ "e diff.to = 0" "e dir.dbgsnap = ." "e dir.depth = 10" -"e dir.magic = /…/radare2/share/radare2/2.8.0/magic" -"e dir.plugins = /…/radare2/lib/radare2/2.8.0" +"e dir.magic = /…/radare2/share/radare2/2.9.0-git/magic" +"e dir.plugins = /…/radare2/lib/radare2/2.9.0-git" "e dir.prefix = /…/radare2" "e dir.projects = ~/.local/share/radare2/projects" "e dir.source = " @@ -410,7 +411,7 @@ "e http.maxsize = 0" "e http.port = 9090" "e http.referer = " -"e http.root = /…/radare2/share/radare2/2.8.0/www" +"e http.root = /…/radare2/share/radare2/2.9.0-git/www" "e http.sandbox = true" "e http.timeout = 3" "e http.ui = m" @@ -471,7 +472,6 @@ "e rop.conditional = false" "e rop.db = true" "e rop.len = 5" -"e rop.nx = false" "e rop.sdb = false" "e rop.subchains = false" "e scr.atport = false" @@ -588,9 +588,9 @@ CCu base64:WzA2XSAtcnctIHNlY3Rpb24gc2l6ZSA4IG5hbWVkIDYuX19EQVRBLl9fbGFfc3ltYm9sX3B0cg== @ 0x100001010 Cd 8 @ 0x100001000 Cd 8 @ 0x100001010 -(...) 4 0x100000f4f # arg1 -(...) 4 0x100000f52 # arg2 -(...) 18 0x100000f74 # const_char__format +Ct 4 0x100000f4f # arg1 +Ct 4 0x100000f52 # arg2 +Ct 18 0x100000f74 # const_char__format axd 0x100000fae 0x100000f48 axC 0x100000f8e 0x100000f7c axc 0x100001010 0x100000f8e @@ -642,16 +642,16 @@ tk func.ungetwc.arg.0=wint_t,c tk func.log2f.ret=float tk func.isblank.ret=int -tk func.ungetwc.arg.1=FILE,*stream +tk func.ungetwc.arg.1=FILE *,stream tk func.coshf.ret=float tk uint32_t=type tk func.read.ret=ssize_t tk func.remquof.args=3 tk func.vsscanf.arg.1=const char *,format -tk func.swscanf.arg.0=const wchar_t,*s +tk func.swscanf.arg.0=const wchar_t *,s tk fsetpos=func tk func.vsscanf.arg.0=const char *,s -tk func.swscanf.arg.1=const wchar_t,*format +tk func.swscanf.arg.1=const wchar_t *,format tk func.atof.arg.0=const char *,str tk func.wcrtomb.args=3 tk func.vwprintf.ret=int @@ -675,29 +675,32 @@ tk func.tmpnam.args=1 tk func.wcslen.ret=size_t tk func.wcstombs.ret=size_t +tk func.main.arg.2=char **,envp tk func.strncmp.args=3 tk func.strtold.args=2 tk func.lgamma.arg.0=arithmetic,x tk func.strcmp.arg.0=const char *,s1 +tk func.main.arg.0=int,argc tk strrchr=func tk func.srand.arg.0=int,seed tk func.log1pf.ret=float tk atanhl=func tk acos=func tk func.strcmp.arg.1=const char *,s2 +tk func.main.arg.1=char **,argv tk func.sprintf.ret=int -tk func.wcscpy.arg.0=wchar_t,*s1 +tk func.wcscpy.arg.0=wchar_t *,s1 tk func.strerror.arg.0=int,errnum tk frexp=func -tk func.wcscpy.arg.1=const wchar_t,*s2 +tk func.wcscpy.arg.1=const wchar_t *,s2 tk func.wcstoimax.args=3 -tk func.ungetc.arg.1=FILE,*stream +tk func.ungetc.arg.1=FILE *,stream tk func.ungetc.arg.0=int,c -tk func.wcscat.arg.0=wchar_t,*s1 +tk func.wcscat.arg.0=wchar_t *,s1 tk strncmp=func tk func.xmalloc.ret= void * tk func.iswalpha.ret=int -tk func.wcscat.arg.1=const wchar_t,*s2 +tk func.wcscat.arg.1=const wchar_t *,s2 tk llroundf=func tk sqrt=func tk type.unsigned char=b @@ -712,15 +715,15 @@ tk func.floorl.arg.0=long double,x tk func.strtoul.arg.0=const char *,str tk func.trunc.ret=floating_point -tk func.strtoul.arg.1=char *,*endptr +tk func.strtoul.arg.1=char * *,endptr tk func.log2.arg.0=arithmetic,x tk sqrtf=func tk func.wcstold.args=2 tk func.unlink.arg.0=const char *,path tk tmpfile=func tk towlower=func -tk func.wcstof.arg.1=wchar_t*,*endptr -tk func.wcstof.arg.0=const wchar_t,*nptr +tk func.wcstof.arg.1=wchar_t* *,endptr +tk func.wcstof.arg.0=const wchar_t *,nptr tk func.mktime.ret=time_t tk llroundl=func tk putchar=func @@ -731,7 +734,7 @@ tk func.fmaxl.arg.1=long double,y tk func.frexpf.arg.0=float,value tk func.fmaxl.arg.0=long double,x -tk func.frexpf.arg.1=int,*exp +tk func.frexpf.arg.1=int *,exp tk func.strlcpy.args=3 tk func.nan.arg.0=const char *,str tk func.atan2.ret=floating_point @@ -743,32 +746,32 @@ tk func.memset.arg.2=size_t,n tk rename=func tk float=type -tk func.memset.arg.0=void,*s +tk func.memset.arg.0=void *,s tk func.memset.arg.1=int,c -tk func.vfscanf.arg.0=FILE,*stream +tk func.vfscanf.arg.0=FILE *,stream tk func.mblen.arg.1=size_t,n tk func.vfscanf.arg.1=const char *,format tk func.mblen.arg.0=const char *,s tk func.rint.ret=floating_point tk func.vfscanf.arg.2=va_list,ap -tk func.feof.arg.0=FILE,*stream +tk func.feof.arg.0=FILE *,stream tk tolower=func tk func.strtold.ret=long double tk getprogname=func tk func.strcat.args=2 tk func.fileno.ret=int -tk func.swprintf.arg.2=const wchar_t,*format +tk func.swprintf.arg.2=const wchar_t *,format tk func.erf.arg.0=arithmetic,x tk fputs=func tk func.nearbyint.arg.0=arithmetic,x tk func.acoshf.arg.0=float,x tk func.fabsf.arg.0=float,x tk func.getopt.args=3 -tk func.putc.arg.1=FILE,*stream -tk func.fputws.arg.0=const wchar_t,*s -tk func.swprintf.arg.0=wchar_t,*s +tk func.putc.arg.1=FILE *,stream +tk func.fputws.arg.0=const wchar_t *,s +tk func.swprintf.arg.0=wchar_t *,s tk func.putc.arg.0=int,c -tk func.fputws.arg.1=FILE,*stream +tk func.fputws.arg.1=FILE *,stream tk func.swprintf.arg.1=size_t,n tk strftime=func tk func.isinf.ret=bool @@ -795,7 +798,7 @@ tk func.vsnprintf.arg.1=size_t,size tk func.wcsftime.ret=size_t tk remainderf=func -tk func.vsnprintf.arg.0=char,*s +tk func.vsnprintf.arg.0=char *,s tk fwscanf=func tk func.strncasecmp.args=3 tk func.vsnprintf.arg.3=va_list,arg @@ -813,7 +816,7 @@ tk func.wscanf.args=1 tk func.logbl.ret=long double tk func.puts.arg.0=const char *,s -tk func.fputwc.arg.1=FILE,*stream +tk func.fputwc.arg.1=FILE *,stream tk atol=func tk nearbyintf=func tk func.feupdateenv.args=1 @@ -822,7 +825,7 @@ tk func.putwc.arg.0=wchar_t,c tk func.nl_langinfo_l.arg.0=nl_item,item tk func.wcstoull.args=3 -tk func.putwc.arg.1=FILE,*stream +tk func.putwc.arg.1=FILE *,stream tk atoi=func tk func.__stack_chk_fail.cc=amd64 tk func.fchmod.args=2 @@ -850,7 +853,7 @@ tk func.atan2f.arg.0=float,y tk func.textdomain.args=1 tk func.feraiseexcept.arg.0=int,excepts -tk func.fclose.arg.0=FILE,*stream +tk func.fclose.arg.0=FILE *,stream tk func.fmaxl.args=2 tk type.float=f tk func.__assert_rtn.arg.0=const char *,assertion @@ -861,7 +864,7 @@ tk func.vwprintf.arg.1=va_list,arg tk func.ldiv.arg.0=long,numer tk func.__assert_rtn.arg.3=const char *,function -tk func.vwprintf.arg.0=const wchar_t,*format +tk func.vwprintf.arg.0=const wchar_t *,format tk func.ldiv.arg.1=long,denom tk lroundl=func tk func.close.arg.0=int,fildes @@ -887,7 +890,7 @@ tk func.wctob.args=1 tk *aligned_alloc=func tk func.remainderf.ret=float -tk func.wcstoimax.arg.1=wchar_t*,*endptr +tk func.wcstoimax.arg.1=wchar_t* *,endptr tk func.sscanf.ret=int tk func.wcstoimax.arg.2=int,base tk func.isgreater.args=2 @@ -899,15 +902,15 @@ tk func.sprintf.args=3 tk func.iswspace.arg.0=wint_t,wc tk func.qsort.arg.2=size_t,size -tk func.qsort.arg.3=int(*compar)(const void,*const void *) +tk func.qsort.arg.3=int(*compar)(const void *,const void *) tk _exit=func -tk func.qsort.arg.0=void,*base +tk func.qsort.arg.0=void *,base tk func.fminf.arg.1=float,y tk cos=func tk func.qsort.arg.1=size_t,nmemb tk func.fminf.arg.0=float,x tk func.chmod.arg.0=const char *,path -tk func.strncat.arg.0=char,*s1 +tk func.strncat.arg.0=char *,s1 tk func.chmod.arg.1=int,mode tk func.iswgraph.args=1 tk func.umask.args=1 @@ -934,12 +937,12 @@ tk func.vwscanf.arg.1=va_list,arg tk func.feraiseexcept.ret=int tk func.fclose.ret=int -tk func.vwscanf.arg.0=const wchar_t,*format +tk func.vwscanf.arg.0=const wchar_t *,format tk func.truncf.arg.0=float,x tk func.fmax.ret=floating_point tk func.realloc.arg.1=size_t,size tk iswlower=func -tk func.realloc.arg.0=void,*ptr +tk func.realloc.arg.0=void *,ptr tk func.basename.args=1 tk wcscoll=func tk func.truncl.args=1 @@ -948,7 +951,7 @@ tk func.isalnum.arg.0=int,c tk func.wcstoull.ret=long long tk func.isdigit.args=1 -tk func.strcat.arg.0=char,*s1 +tk func.strcat.arg.0=char *,s1 tk expm1f=func tk func.strcat.arg.1=const char *,s2 tk func.nextafterl.args=2 @@ -960,16 +963,16 @@ tk func.remainder.ret=floating_point tk write=func tk func.fgetwc.args=1 -tk func.fwscanf.arg.1=const wchar_t,*format +tk func.fwscanf.arg.1=const wchar_t *,format tk expm1l=func -tk func.fwscanf.arg.0=FILE,*stream +tk func.fwscanf.arg.0=FILE *,stream tk lstat=func tk func.exit.args=1 tk wmemcpy=func tk func.fmal.ret=long double tk func.isatty.args=1 tk fabsl=func -tk func.mbrtowc.arg.3=mbstate_t,*ps +tk func.mbrtowc.arg.3=mbstate_t *,ps tk system=func tk func.coshf.arg.0=float,x tk ceilf=func @@ -978,11 +981,11 @@ tk func.ferror.args=1 tk func.mbrtowc.arg.1=const char *,s tk func.realloc.ret=void * -tk func.mbrtowc.arg.0=wchar_t,*pwc +tk func.mbrtowc.arg.0=wchar_t *,pwc tk modff=func -tk func.time.arg.0=time_t,*timer +tk func.time.arg.0=time_t *,timer tk func.labs.ret=long -tk func.getc.arg.0=FILE,*steam +tk func.getc.arg.0=FILE *,steam tk func.iswalpha.args=1 tk func.strcoll.arg.0=const char *,s1 tk func.*aligned_alloc.args=2 @@ -1015,24 +1018,24 @@ tk ldiv=func tk func.getpid.ret=int tk vwprintf=func -tk func.gets.arg.0=char,*s +tk func.gets.arg.0=char *,s tk func.nanl.ret=long double tk feraiseexcept=func tk func.llrintf.arg.0=float,x tk func.remove.arg.0=const char *,filename tk func.vswscanf.args=3 tk func.perror.arg.0=const char *,s -tk func.bsearch.arg.4=int,(*compar)(const void,*const void *) +tk func.bsearch.arg.4=int,(*compar)(const void *,const void *) tk func.feclearexcept.args=1 tk fscanf=func tk func.isprint.arg.0=int,c tk func.fetestexcept.arg.0=int,excepts tk func.btowc.arg.0=int,c -tk func.bsearch.arg.1=const void,*base +tk func.bsearch.arg.1=const void *,base tk func.logbf.args=1 tk type.size_t=x tk func.wctype.arg.0=const char *,property -tk func.bsearch.arg.0=const void,*key +tk func.bsearch.arg.0=const void *,key tk func.feclearexcept.ret=int tk func.bsearch.arg.3=size_t,size tk func.sqrtf.args=1 @@ -1084,7 +1087,7 @@ tk func.fpclassify.ret=int tk strlcpy=func tk func.getchar.ret=int -tk func.mbsinit.arg.0=const mbstate_t,*ps +tk func.mbsinit.arg.0=const mbstate_t *,ps tk truncl=func tk func.lrintf.args=1 tk func.ceill.ret=long double @@ -1129,7 +1132,7 @@ tk mblen=func tk func.scalbnl.arg.1=int,ex tk func.sinh.arg.0=arithmetic,x -tk func.ferror.arg.0=FILE,*stream +tk func.ferror.arg.0=FILE *,stream tk feof=func tk func.cosh.ret=floating_point tk func.wcspbrk.args=2 @@ -1142,10 +1145,11 @@ tk func.log10f.arg.0=float,x tk func.lgamma.ret=floating_point tk func.strcmp.ret=int +tk func.main.ret=int tk func.sprintf.arg.1=const char *,format tk func.strncmp.arg.0=const char *,s1 tk type.uint32_t.size=32 -tk func.sprintf.arg.0=char,*s +tk func.sprintf.arg.0=char *,s tk func.fmal.arg.2=long double,z tk func.strncmp.arg.1=const char *,s2 tk func.fmal.arg.1=long double,y @@ -1190,7 +1194,7 @@ tk func.toupper.arg.0=int,c tk func.strdup.args=1 tk func.strtoull.arg.0=const char *,str -tk func.strtoull.arg.1=char *,*endptr +tk func.strtoull.arg.1=char * *,endptr tk func.strtoul.args=3 tk wcscspn=func tk func.abs.args=1 @@ -1204,7 +1208,7 @@ tk func.bzero.arg.0=void *,s tk fgetws=func tk fstat=func -tk func.wctomb.arg.0=char,*s +tk func.wctomb.arg.0=char *,s tk func.strtoll.args=3 tk func.nextafter.arg.0=arithmetic,x tk func.fminf.ret=float @@ -1213,14 +1217,14 @@ tk type.long long=q tk func.freopen.arg.0=const char *,filename tk func.wcsrchr.ret=wchar_t* -tk func.vswprintf.arg.0=wchar_t,*s +tk func.vswprintf.arg.0=wchar_t *,s tk func.freopen.arg.1=const char *,mode tk func.vswprintf.arg.1=size_t,n tk acoshf=func tk func.log10l.args=1 -tk func.freopen.arg.2=FILE,*stream -tk func.vswprintf.arg.2=const wchar_t,*format -tk func.strtold.arg.1=char *,*endptr +tk func.freopen.arg.2=FILE *,stream +tk func.vswprintf.arg.2=const wchar_t *,format +tk func.strtold.arg.1=char * *,endptr tk strtoimax=func tk func.vswprintf.arg.3=va_list,arg tk func.strtold.arg.0=const char *,str @@ -1247,17 +1251,17 @@ tk func.wcsftime.arg.1=size_t,maxsize tk func.tanhf.arg.0=float,x tk func.humanize_number.arg.1=size_t,len -tk func.wcsftime.arg.0=wchar_t,*s +tk func.wcsftime.arg.0=wchar_t *,s tk wprintf=func tk func.humanize_number.arg.2=int64_t,number -tk func.wcsftime.arg.3=const tm,*timeptr +tk func.wcsftime.arg.3=const tm *,timeptr tk func.putwchar.ret=wint_t tk func.sinhf.args=1 tk log10f=func tk func.isspace.ret=int tk fgets=func tk func.humanize_number.arg.3=const char *,suffix -tk func.wcsftime.arg.2=const wchar_t,*format +tk func.wcsftime.arg.2=const wchar_t *,format tk func.floorl.args=1 tk strchr=func tk fmin=func @@ -1266,13 +1270,13 @@ tk size_t=type tk func.tanl.args=1 tk func.strtoimax.ret=intmax_t -tk func.wcstoll.arg.1=wchar_t*,*endptr +tk func.wcstoll.arg.1=wchar_t* *,endptr tk func.memmove.ret=void * tk func.scalbln.arg.0=arithmetic,x tk func.nexttoward.arg.1=long double,y tk log10l=func tk type.int16_t=w -tk func.wcstoll.arg.0=const wchar_t,*nptr +tk func.wcstoll.arg.0=const wchar_t *,nptr tk clock=func tk func.scalbln.arg.1=long,ex tk func.nexttoward.arg.0=arithmetic,x @@ -1298,8 +1302,8 @@ tk func.fdiml.args=2 tk fgetc=func tk fesetexceptflag=func -tk func.wcstoull.arg.0=const wchar_t,*nptr -tk func.wcstoull.arg.1=wchar_t*,*endptr +tk func.wcstoull.arg.0=const wchar_t *,nptr +tk func.wcstoull.arg.1=wchar_t* *,endptr tk func.wcstoul.args=3 tk func.wcstoull.arg.2=int,base tk func.fwprintf.args=2 @@ -1325,11 +1329,11 @@ tk func.fopen.arg.0=const char *,filename tk func.fgetws.arg.1=int,n tk func.strxfrm.arg.1=const char *,s2 -tk func.fgetws.arg.0=wchar_t,*s -tk func.strxfrm.arg.0=char,*s1 +tk func.fgetws.arg.0=wchar_t *,s +tk func.strxfrm.arg.0=char *,s1 tk func.asinh.ret=floating_point tk func.fscanf.ret=int -tk func.fgetws.arg.2=FILE,*stream +tk func.fgetws.arg.2=FILE *,stream tk func.strxfrm.arg.2=size_t,n tk strtol=func tk func.mkstemp.arg.0=char *,template @@ -1358,12 +1362,12 @@ tk func.raise.args=1 tk func.llrint.arg.0=arithmetic,x tk asin=func -tk func.mbstowcs.arg.0=wchar_t,*pwcs +tk func.mbstowcs.arg.0=wchar_t *,pwcs tk func.fetestexcept.ret=int -tk func.getwc.arg.0=FILE,*stream +tk func.getwc.arg.0=FILE *,stream tk func.mbstowcs.arg.2=size_t,n tk func.feclearexcept.arg.0=int,excepts -tk func.fgetwc.arg.0=FILE,*stream +tk func.fgetwc.arg.0=FILE *,stream tk func.sscanf.args=3 tk exp2l=func tk func.isalpha.ret=int @@ -1390,7 +1394,7 @@ tk func.ungetwc.ret=wint_t tk func.vsprintf.arg.1=const char *,format tk func.fesetexceptflag.arg.1=int,excepts -tk func.vsprintf.arg.0=char,*s +tk func.vsprintf.arg.0=char *,s tk fdim=func tk func.sinf.arg.0=float,x tk func.fesetexceptflag.arg.0=const,fexcept_t* @@ -1420,7 +1424,7 @@ tk log1pl=func tk func.sinhl.args=1 tk func.asinhl.args=1 -tk func.fscanf.arg.0=FILE,*stream +tk func.fscanf.arg.0=FILE *,stream tk tmpnam=func tk func.iswctype.ret=int tk func.acosh.ret=floating_point @@ -1456,7 +1460,7 @@ tk func.strcat.ret=char * tk fmaxl=func tk func.fdimf.args=2 -tk func.modfl.arg.1=long double,*iptr +tk func.modfl.arg.1=long double *,iptr tk func.freopen.ret=file* tk func.vswprintf.ret=int tk func.modfl.arg.0=long double,value @@ -1469,9 +1473,9 @@ tk func.islower.ret=int tk func.sinhf.ret=float tk func.atoi.arg.0=const char *,str -tk func.memmove.arg.1=const void,*s2 +tk func.memmove.arg.1=const void *,s2 tk cbrtf=func -tk func.memmove.arg.0=void,*s1 +tk func.memmove.arg.0=void *,s1 tk mbtowc=func tk func.longjmp.ret=void tk func.asinl.args=1 @@ -1493,16 +1497,16 @@ tk func.bindtextdomain.arg.0=char *,domainname tk func.tgammaf.ret=float tk func.isxdigit.ret=int -tk func.wcsncat.arg.0=wchar_t,*s1 -tk func.gmtime.arg.0=const time_t,*timer +tk func.wcsncat.arg.0=wchar_t *,s1 +tk func.gmtime.arg.0=const time_t *,timer tk cbrtl=func -tk func.wcsncat.arg.1=const wchar_t,*s2 +tk func.wcsncat.arg.1=const wchar_t *,s2 tk func.isgreater.ret=bool tk func.logl.ret=long double tk strxfrm=func tk func.strtol.arg.2=int,base tk strdup=func -tk func.strtol.arg.1=char *,*endptr +tk func.strtol.arg.1=char * *,endptr tk func.remainderl.arg.0=long double,x tk func.calloc.args=2 tk func.tmpnam.ret=char * @@ -1529,7 +1533,7 @@ tk func.snprintf.arg.1=size_t,size tk func.strftime.args=4 tk func.setlocale.arg.1=const char *,locale -tk func.snprintf.arg.0=char,*s +tk func.snprintf.arg.0=char *,s tk strpbrk=func tk func.lgammal.args=1 tk func.setlocale.arg.0=int,category @@ -1539,9 +1543,9 @@ tk func.islessgreater.args=2 tk fwrite=func tk func.lgammal.ret=long double -tk func.wcstol.arg.1=wchar_t*,*endptr +tk func.wcstol.arg.1=wchar_t* *,endptr tk func.mkstemp.ret=int -tk func.wcstol.arg.0=const wchar_t,*nptr +tk func.wcstol.arg.0=const wchar_t *,nptr tk cbrt=func tk func.wcsncat.args=3 tk func.wcstol.arg.2=int,base @@ -1555,7 +1559,7 @@ tk func.fmaxf.arg.0=float,x tk fdimf=func tk func.expm1l.ret=long double -tk func.free.arg.0=void,*ptr +tk func.free.arg.0=void *,ptr tk rewind=func tk func.vfwscanf.ret=int tk func.log2l.args=1 @@ -1563,7 +1567,7 @@ tk func.strtoull.args=3 tk strncat=func tk func.setjmp.args=1 -tk func.localtime.arg.0=const time_t,*timer +tk func.localtime.arg.0=const time_t *,timer tk func.nexttowardf.arg.1=long double,y tk func.copysignl.arg.1=long double,y tk func.nl_langinfo.args=1 @@ -1577,7 +1581,7 @@ tk func.ioctl.arg.1=unsigned long,request tk type.void *=p tk func.atol.ret=long -tk func.remquol.arg.2=int,*pquo +tk func.remquol.arg.2=int *,pquo tk expf=func tk fdiml=func tk func.cosl.args=1 @@ -1600,7 +1604,7 @@ tk func.isgreaterequal.args=2 tk func.setvbuf.args=4 tk func.llrint.ret=long long -tk func.tmpnam.arg.0=char,*s +tk func.tmpnam.arg.0=char *,s tk func.strtol.ret=long tk func.modff.args=2 tk arc4random=func @@ -1618,7 +1622,7 @@ tk sinhf=func tk func.isalpha.arg.0=int,c tk freopen=func -tk func.wcsrtombs.arg.3=mbstate_t,*ps +tk func.wcsrtombs.arg.3=mbstate_t *,ps tk vswprintf=func tk func.localtime.ret=tm* tk func.labs.args=1 @@ -1627,11 +1631,11 @@ tk func.scalbln.args=2 tk func.remquo.arg.1=arithmetic,y tk func.objc_msgSend.args=2 -tk func.wcsrtombs.arg.1=const wchar_t*,*src -tk func.remquo.arg.2=int,*pquo -tk func.feholdexcept.arg.0=fenv_t,*envp +tk func.wcsrtombs.arg.1=const wchar_t* *,src +tk func.remquo.arg.2=int *,pquo +tk func.feholdexcept.arg.0=fenv_t *,envp tk func.fscanf.args=3 -tk func.wcsrtombs.arg.0=char,*dst +tk func.wcsrtombs.arg.0=char *,dst tk func.atanh.arg.0=arithmetic,x tk func.vwscanf.args=2 tk func.fstat.arg.1=void *,buf @@ -1642,7 +1646,7 @@ tk func.sym.imp.err.noreturn=true tk func.wcstol.ret=long tk func.frexp.arg.0=arithmetic,value -tk func.frexp.arg.1=int,*exp +tk func.frexp.arg.1=int *,exp tk func.acosf.arg.0=float,x tk func.iswctype.args=2 tk func.acosh.args=1 @@ -1658,7 +1662,7 @@ tk func.atanhl.arg.0=long double,x tk setlocale=func tk func.mbtowc.arg.1=const char *,s -tk func.mbtowc.arg.0=wchar_t,*pwc +tk func.mbtowc.arg.0=wchar_t *,pwc tk func.llrintl.args=1 tk func.malloc.arg.0=size_t,size tk tanl=func @@ -1666,8 +1670,8 @@ tk func.vscanf.args=2 tk func.mbtowc.arg.2=size_t,n tk iswpunct=func -tk func.wcstoul.arg.0=const wchar_t,*nptr -tk func.wcstoul.arg.1=wchar_t*,*endptr +tk func.wcstoul.arg.0=const wchar_t *,nptr +tk func.wcstoul.arg.1=wchar_t* *,endptr tk func.log1pl.args=1 tk func.isdigit.ret=int tk func.wcstoul.arg.2=int,base @@ -1678,17 +1682,17 @@ tk func.wmemchr.arg.2=size_t,n tk tanf=func tk func.fmod.ret=floating_point -tk func.wmemchr.arg.0=wchar_t,*s -tk func.wcscoll.arg.0=const wchar_t,*s1 +tk func.wmemchr.arg.0=wchar_t *,s +tk func.wcscoll.arg.0=const wchar_t *,s1 tk func.lroundl.ret=long tk func.wmemchr.arg.1=wchar_t,c -tk func.wcscoll.arg.1=const wchar_t,*s2 +tk func.wcscoll.arg.1=const wchar_t *,s2 tk func.log10f.ret=float tk func.isgreaterequal.ret=bool tk func.ceilf.ret=float tk func.tgoto.ret=char * tk func.wcsncpy.args=3 -tk func.wscanf.arg.0=const wchar_t,*format +tk func.wscanf.arg.0=const wchar_t *,format tk func.ldexpf.args=2 tk gets=func tk memset=func @@ -1700,7 +1704,7 @@ tk func.acos.ret=floating_point tk round=func tk func.isnan.args=1 -tk func.fwide.arg.0=FILE,*stream +tk func.fwide.arg.0=FILE *,stream tk func.fwide.arg.1=int,mode tk func.scalbn.ret=floating_point tk fmodl=func @@ -1721,14 +1725,14 @@ tk func.islessgreater.arg.0=arithmetic,x tk getc=func tk fread=func -tk func.wprintf.arg.0=const wchar_t,*format +tk func.wprintf.arg.0=const wchar_t *,format tk func.islessgreater.arg.1=arithmetic,y tk func.exp.args=1 tk wcstok=func -tk func.wcsncpy.arg.0=wchar_t,*s1 +tk func.wcsncpy.arg.0=wchar_t *,s1 tk func.ldexpf.arg.0=float,value tk type.long.size=64 -tk func.wcsncpy.arg.1=const wchar_t,*s2 +tk func.wcsncpy.arg.1=const wchar_t *,s2 tk func.ldexpf.arg.1=int,exp tk func.tgoto.arg.2=int,row tk func.powl.arg.1=long double,y @@ -1751,7 +1755,7 @@ tk func.wcsrchr.arg.1=wchar_t,c tk func.wprintf.args=1 tk func.asctime.ret=char * -tk func.wcsrchr.arg.0=wchar_t,*s +tk func.wcsrchr.arg.0=wchar_t *,s tk wcstod=func tk func.mbsinit.ret=int tk tan=func @@ -1761,11 +1765,11 @@ tk func.llroundl.arg.0=long double,x tk func.ceil.args=1 tk func.asinh.args=1 -tk func.wcsstr.arg.1=const wchar_t,*s2 +tk func.wcsstr.arg.1=const wchar_t *,s2 tk func.putwchar.args=1 tk func.log2l.ret=long double tk func.isspace.args=1 -tk func.wcsstr.arg.0=wchar_t,*s1 +tk func.wcsstr.arg.0=wchar_t *,s1 tk func.memcmp.ret=int tk func.lldiv.ret=lldiv_t tk func.coshl.ret=long double @@ -1773,8 +1777,8 @@ tk func.wcsncmp.arg.2=size_t,n tk func.getopt.ret=int tk func.signal.ret=void -tk func.wcsncmp.arg.0=const wchar_t,*s1 -tk func.wcsncmp.arg.1=const wchar_t,*s2 +tk func.wcsncmp.arg.0=const wchar_t *,s1 +tk func.wcsncmp.arg.1=const wchar_t *,s2 tk getwc=func tk func.at_quick_exit.ret=int tk func.exp2f.arg.0=float,x @@ -1785,8 +1789,8 @@ tk func.nearbyint.args=1 tk func.acoshf.args=1 tk func.fabsf.args=1 -tk func.clearerr.arg.0=FILE,*stream -tk func.memchr.arg.0=void,*s +tk func.clearerr.arg.0=FILE *,stream +tk func.memchr.arg.0=void *,s tk func.isgraph.ret=int tk func._exit.noreturn=true tk func.putwchar.arg.0=wchar_t,c @@ -1798,7 +1802,7 @@ tk func.ungetc.args=2 tk func.getuid.args=0 tk sym.imp.err=func -tk func.strtok.arg.0=char,*s1 +tk func.strtok.arg.0=char *,s1 tk func.strtok.arg.1=const char *,s2 tk func.ldexpl.args=2 tk func.wcsspn.args=2 @@ -1809,9 +1813,9 @@ tk func.isnormal.arg.0=arithmetic,x tk func.atan2l.args=2 tk func.pututxline.args=1 -tk func.vswscanf.arg.0=const wchar_t,*s +tk func.vswscanf.arg.0=const wchar_t *,s tk func.sqrtf.ret=float -tk func.vswscanf.arg.1=const wchar_t,*format +tk func.vswscanf.arg.1=const wchar_t *,format tk func.rintf.args=1 tk func.roundf.ret=float tk func.signbit.arg.0=arithmetic,x @@ -1819,9 +1823,9 @@ tk quick_exit=func tk func.rintf.ret=float tk atan=func -tk func.vfwprintf.arg.1=const wchar_t,*format +tk func.vfwprintf.arg.1=const wchar_t *,format tk func.strncasecmp.arg.0=const char *,s1 -tk func.vfwprintf.arg.0=FILE,*stream +tk func.vfwprintf.arg.0=FILE *,stream tk func.rand.ret=int tk func.frexp.ret=floating_point tk func.strncasecmp.arg.1=const char *,s2 @@ -1832,16 +1836,16 @@ tk fmal=func tk fegetexceptflag=func tk func.fread.arg.1=size_t,size -tk func.wcstok.arg.2=wchar_t*,*ptr +tk func.wcstok.arg.2=wchar_t* *,ptr tk func.localtime.args=1 tk func.mkstemp.args=1 -tk func.fread.arg.0=void,*ptr +tk func.fread.arg.0=void *,ptr tk fminl=func -tk func.fread.arg.3=FILE,*stream -tk func.wcstok.arg.0=wchar_t,*s1 +tk func.fread.arg.3=FILE *,stream +tk func.wcstok.arg.0=wchar_t *,s1 tk func.fread.arg.2=size_t,nmemb tk iswxdigit=func -tk func.wcstok.arg.1=const wchar_t,*s2 +tk func.wcstok.arg.1=const wchar_t *,s2 tk func.asinhf.args=1 tk func.wcsftime.args=4 tk func.memcmp.arg.2=size_t,n @@ -1851,13 +1855,13 @@ tk type.unsigned char.size=8 tk func.strmode.args=2 tk func.wcsstr.ret=wchar_t* -tk func.memcmp.arg.0=const void,*s1 +tk func.memcmp.arg.0=const void *,s1 tk func.lldiv.arg.0=long long,numer tk ilogb=func tk func.coshl.arg.0=long double,x tk func.fputws.ret=int tk func.swprintf.ret=int -tk func.memcmp.arg.1=const void,*s2 +tk func.memcmp.arg.1=const void *,s2 tk func.lldiv.arg.1=long long,denom tk func.cosh.args=1 tk func.fputc.ret=int @@ -1873,7 +1877,7 @@ tk func.raise.ret=int tk func.ilogbf.args=1 tk fclose=func -tk func.vfprintf.arg.0=FILE,*stream +tk func.vfprintf.arg.0=FILE *,stream tk func.strtoll.ret=long long tk uid_t=type tk func.vfprintf.arg.1=const char *,format @@ -1893,7 +1897,7 @@ tk func.fwide.ret=int tk func.remquol.args=3 tk func.ioctl.args=2 -tk func.mktime.arg.0=tm,*timeptr +tk func.mktime.arg.0=tm *,timeptr tk func.nexttowardf.ret=float tk func.copysignl.ret=long double tk func.atanhl.args=1 @@ -1912,10 +1916,10 @@ tk func.vfwprintf.ret=int tk func.fwrite.arg.2=size_t,nitems tk func.time.args=1 -tk func.fwrite.arg.3=FILE,*stream +tk func.fwrite.arg.3=FILE *,stream tk func.getc.args=1 tk func.erfc.ret=floating_point -tk func.fwrite.arg.0=const void,*ptr +tk func.fwrite.arg.0=const void *,ptr tk strtoll=func tk func.fwrite.arg.1=size_t,size tk func.wcstold.ret=long double @@ -1937,7 +1941,7 @@ tk asinhl=func tk func.fmodl.ret=long double tk func.setvbuf.arg.1=char *,buf -tk func.asctime.arg.0=const tm,*timeptr +tk func.asctime.arg.0=const tm *,timeptr tk func.setvbuf.arg.2=int,mode tk func.setvbuf.arg.3=size_t,size tk func.getenv.args=1 @@ -1957,7 +1961,7 @@ tk func.rename.arg.0=const char *,oldpath tk func.tanf.args=1 tk func.toupper.ret=int -tk func.fgetc.arg.0=FILE,*steam +tk func.fgetc.arg.0=FILE *,steam tk type.int64_t.size=64 tk remove=func tk func.asinhf.ret=float @@ -1987,7 +1991,7 @@ tk func.swprintf.args=3 tk func.fegetround.ret=int tk fetestexcept=func -tk func.fgets.arg.2=FILE,*stream +tk func.fgets.arg.2=FILE *,stream tk uint8_t=type tk floorl=func tk func.mktemp.ret=char * @@ -1995,7 +1999,7 @@ tk remquof=func tk erff=func tk func.isfinite.arg.0=arithmetic,x -tk func.fgets.arg.0=char,*s +tk func.fgets.arg.0=char *,s tk type.uint16_t.size=16 tk func.iswxdigit.arg.0=wint_t,wc tk func.fgets.arg.1=int,size @@ -2005,9 +2009,9 @@ tk func.remainderf.args=2 tk func.towupper.ret=wint_t tk func.iswlower.ret=int -tk func.fwprintf.arg.1=const wchar_t,*format +tk func.fwprintf.arg.1=const wchar_t *,format tk func.logbl.args=1 -tk func.fwprintf.arg.0=FILE,*stream +tk func.fwprintf.arg.0=FILE *,stream tk erfc=func tk func.mbtowc.ret=int tk func.roundf.args=1 @@ -2023,12 +2027,12 @@ tk func.remainderl.ret=long double tk func.nanf.args=1 tk floorf=func -tk func.wcspbrk.arg.1=const wchar_t,*s2 +tk func.wcspbrk.arg.1=const wchar_t *,s2 tk func.strchr.arg.1=int,c tk func.fmin.arg.1=arithmetic,y tk func.atan2l.ret=long double tk func.isdigit.arg.0=int,c -tk func.wcspbrk.arg.0=wchar_t,*s1 +tk func.wcspbrk.arg.0=wchar_t *,s1 tk localtime=func tk func.strtok.ret=char * tk func.strchr.arg.0=const char *,s @@ -2041,17 +2045,17 @@ tk putwc=func tk func.strspn.ret=size_t tk func.strlcpy.arg.2=size_t, n -tk func.wcrtomb.arg.2=mbstate_t,*ps +tk func.wcrtomb.arg.2=mbstate_t *,ps tk func.wcrtomb.arg.1=wchar_t,wc tk func.vfwscanf.args=3 tk fileno=func -tk func.strlcpy.arg.0=char,*dest -tk func.wcrtomb.arg.0=char,*s +tk func.strlcpy.arg.0=char *,dest +tk func.wcrtomb.arg.0=char *,s tk mbsinit=func tk func.exp2.args=1 tk func.tanhl.args=1 tk func.strlcpy.arg.1=const char *,src -tk func.fputc.arg.1=FILE,*stream +tk func.fputc.arg.1=FILE *,stream tk rint=func tk func.acosf.args=1 tk func.fesetenv.ret=int @@ -2061,7 +2065,7 @@ tk func.fwide.args=2 tk func.erfl.ret=long double tk func.iscntrl.ret=int -tk func.ftell.arg.0=FILE,*stream +tk func.ftell.arg.0=FILE *,stream tk puts=func tk func.memcmp.args=3 tk func.lldiv.args=2 @@ -2076,8 +2080,8 @@ tk func.llabs.args=1 tk func.vfwscanf.arg.2=va_list,arg tk func.iswalnum.ret=int -tk func.vfwscanf.arg.1=const wchar_t,*format -tk func.vfwscanf.arg.0=FILE,*stream +tk func.vfwscanf.arg.1=const wchar_t *,format +tk func.vfwscanf.arg.0=FILE *,stream tk func.exit.noreturn=true tk func.chmod.args=2 tk func.strncat.args=3 @@ -2086,8 +2090,8 @@ tk func.sleep.args=1 tk func.geteuid.ret=uid_t tk func.fsetpos.args=2 -tk func.fputs.arg.1=FILE,*stream -tk func.strftime.arg.3=const tm,*timeptr +tk func.fputs.arg.1=FILE *,stream +tk func.strftime.arg.3=const tm *,timeptr tk scalblnl=func tk func.fmaf.ret=float tk func.log10.arg.0=arithmetic,x @@ -2098,7 +2102,7 @@ tk func.strftime.arg.1=size_t,maxsize tk func.srand.args=1 tk putc=func -tk func.strftime.arg.0=char,*s +tk func.strftime.arg.0=char *,s tk short=type tk fgetpos=func tk iswprint=func @@ -2128,7 +2132,7 @@ tk strstr=func tk wcstombs=func tk func.rand.args=0 -tk func.frexpl.arg.1=int,*exp +tk func.frexpl.arg.1=int *,exp tk func.frexp.args=2 tk func.fseek.ret=int tk func.wcschr.ret=wchar_t* @@ -2146,7 +2150,7 @@ tk func.strndup.arg.1=int,n tk roundl=func tk lround=func -tk func.strndup.arg.0=const char,*src +tk func.strndup.arg.0=const char *,src tk func.towctrans.ret=wint_t tk isgreater=func tk func.vsprintf.args=3 @@ -2171,6 +2175,7 @@ tk func.lgamma.args=1 tk sinf=func tk func.strcmp.args=2 +tk func.main.args=3 tk func.log1pl.arg.0=long double,x tk func.lroundf.arg.0=float,x tk func.log1p.args=1 @@ -2188,16 +2193,16 @@ tk func.nextafterl.arg.0=long double,x tk func.nextafterl.arg.1=long double,y tk func.clearerr.args=1 -tk func.mbsrtowcs.arg.3=mbstate_t,*ps +tk func.mbsrtowcs.arg.3=mbstate_t *,ps tk func.difftime.ret=double tk func.memchr.args=3 tk func.scalblnl.arg.0=long double,x tk type.int=d tk func.mbsrtowcs.arg.2=size_t,len tk func.scalblnl.arg.1=long,ex -tk func.mbsrtowcs.arg.1=const char *,*src +tk func.mbsrtowcs.arg.1=const char * *,src tk func.strrchr.args=2 -tk func.mbsrtowcs.arg.0=wchar_t,*dst +tk func.mbsrtowcs.arg.0=wchar_t *,dst tk bzero=func tk func.acoshl.args=1 tk func.fabsl.args=1 @@ -2229,10 +2234,10 @@ tk func.isunordered.ret=bool tk basename=func tk textdomain=func -tk func.wcscspn.arg.0=const wchar_t,*s1 +tk func.wcscspn.arg.0=const wchar_t *,s1 tk bindtextdomain=func tk vsscanf=func -tk func.wcscspn.arg.1=const wchar_t,*s2 +tk func.wcscspn.arg.1=const wchar_t *,s2 tk type.long=x tk func.wcsncpy.ret=wchar_t* tk func.ldexpf.ret=float @@ -2241,7 +2246,7 @@ tk char=type tk func.strtoumax.arg.0=const char *,str tk atoll=func -tk func.strtoumax.arg.1=char *,*endptr +tk func.strtoumax.arg.1=char * *,endptr tk func.cosf.ret=float tk type.int32_t.size=32 tk symlink=func @@ -2279,7 +2284,7 @@ tk copysignf=func tk func.feof.args=1 tk func.wscanf.ret=int -tk func.modff.arg.1=float,*iptr +tk func.modff.arg.1=float *,iptr tk mbrtowc=func tk func.cbrtl.args=1 tk func.modff.arg.0=float,value @@ -2336,7 +2341,7 @@ tk func.pututxline.arg.0=void *,utx tk acosl=func tk func.isprint.args=1 -tk func.strtof.arg.1=char *,*endptr +tk func.strtof.arg.1=char * *,endptr tk func.remainderf.arg.0=float,x tk func.fminl.ret=long double tk func.vprintf.ret=int @@ -2352,7 +2357,7 @@ tk func.strtoll.arg.2=int,base tk func.lrintl.args=1 tk acosf=func -tk func.strtoll.arg.1=char *,*endptr +tk func.strtoll.arg.1=char * *,endptr tk func.fegetexceptflag.ret=int tk func.memset.ret=void * tk func.strtoll.arg.0=const char *,str @@ -2363,19 +2368,19 @@ tk func.expm1.arg.0=arithmetic,x tk func.copysignf.arg.1=float,y tk sprintf=func -tk func.wmemset.arg.0=wchar_t,*s +tk func.wmemset.arg.0=wchar_t *,s tk func.nexttowardl.arg.0=long double,x tk func.copysignf.arg.0=float,x tk log=func tk func.iswdigit.ret=int tk func.wmemset.arg.2=size_t,n tk logb=func -tk func.wcstold.arg.1=wchar_t*,*endptr +tk func.wcstold.arg.1=wchar_t* *,endptr tk func.difftime.args=2 tk func.tgammaf.arg.0=float,x -tk func.remquof.arg.2=int,*pquo +tk func.remquof.arg.2=int *,pquo tk func.isxdigit.arg.0=int,c -tk func.wcstold.arg.0=const wchar_t,*nptr +tk func.wcstold.arg.0=const wchar_t *,nptr tk func.remquof.arg.0=float,x tk ldexpf=func tk func.remquof.arg.1=float,y @@ -2399,10 +2404,10 @@ tk func.atoi.args=1 tk func.wmemmove.arg.2=size_t,n tk func.wcscspn.ret=size_t -tk func.wmemmove.arg.0=wchar_t,*s1 +tk func.wmemmove.arg.0=wchar_t *,s1 tk scalbnf=func tk strmode=func -tk func.wmemmove.arg.1=const wchar_t,*s2 +tk func.wmemmove.arg.1=const wchar_t *,s2 tk close=func tk func.perror.args=1 tk isblank=func @@ -2416,12 +2421,12 @@ tk fesetenv=func tk islessequal=func tk ferror=func -tk func.wmemcmp.arg.1=const wchar_t,*s2 +tk func.wmemcmp.arg.1=const wchar_t *,s2 tk fwide=func tk func.llrintl.arg.0=long double,x tk func.fmodl.arg.1=long double,y tk asinl=func -tk func.wmemcmp.arg.0=wchar_t,*s1 +tk func.wmemcmp.arg.0=wchar_t *,s1 tk func.fmodl.arg.0=long double,x tk func.isunordered.arg.1=arithmetic,y tk func.wctrans.arg.0=const char *,property @@ -2429,7 +2434,7 @@ tk func.isunordered.arg.0=arithmetic,x tk ldexp=func tk func.strtoimax.arg.2=int,base -tk func.strncpy.arg.0=char,*dest +tk func.strncpy.arg.0=char *,dest tk func.scanf.ret=int tk func.getwchar.ret=wint_t tk func.abs.arg.0=int,j @@ -2440,7 +2445,7 @@ tk func.strncpy.arg.2=size_t, n tk func.strndup.ret=char * tk func.acosl.arg.0=long double,x -tk func.strtoimax.arg.1=char *,*endptr +tk func.strtoimax.arg.1=char * *,endptr tk func.getprogname.ret=const char * tk func.strcpy.args=2 tk func.arc4random.args=0 @@ -2451,13 +2456,13 @@ tk func.getprogname.args=0 tk func.maskrune.arg.1=unsigned long,f tk func.wmemset.ret=wchar_t* -tk func.wmemcpy.arg.1=const wchar_t,*s2 +tk func.wmemcpy.arg.1=const wchar_t *,s2 tk func.memmove.args=3 tk func.nexttowardl.ret=long double tk lrint=func tk func.copysignf.ret=float tk func.maskrune.arg.0=uint32_t,c -tk func.wmemcpy.arg.0=wchar_t,*s1 +tk func.wmemcpy.arg.0=wchar_t *,s1 tk memcpy=func tk func.wmemcpy.arg.2=size_t,n tk func.fgetc.ret=int @@ -2466,8 +2471,8 @@ tk func.fgetpos.arg.1=fpos_t*,pos tk isnormal=func tk func.floorl.ret=long double -tk func.write.arg.1=void,*ptr -tk func.fgetpos.arg.0=FILE,*stream +tk func.write.arg.1=void *,ptr +tk func.fgetpos.arg.0=FILE *,stream tk func.write.arg.2=size_t,nbytes tk func.fopen.args=2 tk func.ctime.ret=char * @@ -2483,7 +2488,7 @@ tk func.vfscanf.args=3 tk func.mktemp.args=1 tk func.iswcntrl.args=1 -tk func.fileno.arg.0=FILE,*stream +tk func.fileno.arg.0=FILE *,stream tk func.vscanf.ret=int tk func.qsort.args=4 tk func.ilogbf.arg.0=float,x @@ -2502,7 +2507,7 @@ tk rintf=func tk func.hypot.ret=floating_point tk func.asinf.arg.0=float,x -tk func.read.arg.1=void,*buf +tk func.read.arg.1=void *,buf tk func.read.arg.0=int,fildes tk func.strspn.args=2 tk func.exp2f.args=1 @@ -2528,11 +2533,11 @@ tk func.hypotl.ret=long double tk func.erfc.args=1 tk func.lrintl.arg.0=long double,x -tk func.modf.arg.1=floating_point,*iptr +tk func.modf.arg.1=floating_point *,iptr tk wcsftime=func tk func.isnormal.ret=bool tk func.modf.arg.0=floating_point,value -tk func.rewind.arg.0=FILE,*stream +tk func.rewind.arg.0=FILE *,stream tk func.fpclassify.args=1 tk func.getchar.args=0 tk log2=func @@ -2541,7 +2546,7 @@ tk func.fetestexcept.args=1 tk func.fegetexceptflag.arg.1=int,excepts tk func.memcpy.ret=void * -tk func.fegetexceptflag.arg.0=fexcept_t,*flagp +tk func.fegetexceptflag.arg.0=fexcept_t *,flagp tk func.ldexpl.arg.0=long double,value tk func.ldexpl.arg.1=int,exp tk func.ldexp.args=2 @@ -2575,7 +2580,7 @@ tk func.tgammal.ret=long double tk func.sinhl.ret=long double tk type.unsigned short=w -tk func.mbrlen.arg.2=mbstate_t,*ps +tk func.mbrlen.arg.2=mbstate_t *,ps tk func.wcscat.ret=wchar_t* tk func.xmalloc.arg.0=size_t,size tk func.mbrlen.arg.1=size_t,n @@ -2593,9 +2598,9 @@ tk func.wcschr.arg.1=wchar_t,c tk func.copysign.ret=floating_point tk mktemp=func -tk func.fseek.arg.0=FILE,*stream +tk func.fseek.arg.0=FILE *,stream tk iswcntrl=func -tk func.wcschr.arg.0=wchar_t,*s +tk func.wcschr.arg.0=wchar_t *,s tk towctrans=func tk func.vfscanf.ret=int tk func.fdiml.ret=long double @@ -2621,10 +2626,10 @@ tk vsnprintf=func tk func.nan.ret=double tk func.atan2.arg.0=arithmetic,y -tk func.wcsspn.arg.1=const wchar_t,*s2 -tk func.strtod.arg.1=char *,*endptr +tk func.wcsspn.arg.1=const wchar_t *,s2 +tk func.strtod.arg.1=char * *,endptr tk func.logf.ret=float -tk func.wcsspn.arg.0=const wchar_t,*s1 +tk func.wcsspn.arg.0=const wchar_t *,s1 tk func.strtod.arg.0=const char *,str tk func.llrintf.args=1 tk mkstemp=func @@ -2635,16 +2640,16 @@ tk func.nextafterf.ret=float tk func.expl.args=1 tk func.wcsxfrm.ret=size_t -tk func.memcpy.arg.0=void,*s1 +tk func.memcpy.arg.0=void *,s1 tk func.logb.ret=floating_point tk isnan=func tk func.ispunct.ret=int tk func.calloc.arg.1=size_t,size -tk func.memcpy.arg.1=const void,*s2 +tk func.memcpy.arg.1=const void *,s2 tk func.log1pf.args=1 tk func.llrintf.ret=long long tk func.calloc.arg.0=size_t,nmeb -tk func.fprintf.arg.0=FILE,*stream +tk func.fprintf.arg.0=FILE *,stream tk func.isupper.ret=int tk func.write.args=3 tk func.fprintf.arg.1=const char *,format @@ -2658,12 +2663,12 @@ tk func.localeconv.ret=lconv* tk func.*aligned_alloc.arg.0=size_t,alignment tk isfinite=func -tk func.ctime.arg.0=const time_t,*timer -tk func.wcscmp.arg.0=const wchar_t,*s1 -tk func.wcstod.arg.1=wchar_t*,*endptr +tk func.ctime.arg.0=const time_t *,timer +tk func.wcscmp.arg.0=const wchar_t *,s1 +tk func.wcstod.arg.1=wchar_t* *,endptr tk wcspbrk=func -tk func.wcscmp.arg.1=const wchar_t,*s2 -tk func.wcstod.arg.0=const wchar_t,*nptr +tk func.wcscmp.arg.1=const wchar_t *,s2 +tk func.wcstod.arg.0=const wchar_t *,nptr tk func.floor.arg.0=arithmetic,x tk func.strncpy.ret=char * tk iswupper=func @@ -2676,7 +2681,7 @@ tk func.getopt.arg.0=int,argc tk func.setjmp.ret=int tk func.remquo.args=3 -tk func.getopt.arg.1=const char *,*argv +tk func.getopt.arg.1=const char * *,argv tk func.getopt.arg.2=const char *,optstring tk getenv=func tk func.vprintf.arg.0=const char *,format @@ -2687,7 +2692,7 @@ tk func.wcsspn.ret=size_t tk func.strtod.ret=double tk func.llroundl.args=1 -tk func.fflush.arg.0=FILE,*stream +tk func.fflush.arg.0=FILE *,stream tk func.wmemchr.ret=wchar_t* tk func.wcscoll.ret=int tk func.symlink.arg.0=const char *,path1 @@ -2710,9 +2715,9 @@ tk func.floor.ret=floating_point tk func.longjmp.args=2 tk type.char *=z -tk func.setbuf.arg.0=FILE,*stream +tk func.setbuf.arg.0=FILE *,stream tk func.setbuf.arg.1=char *,buf -tk func.strdup.arg.0=const char,*src +tk func.strdup.arg.0=const char *,src tk func.fmaxl.ret=long double tk func.expm1f.arg.0=float,x tk func.iswalpha.arg.0=wint_t,wc @@ -2723,6 +2728,7 @@ tk func.wcsrtombs.args=4 tk func.log2.ret=floating_point tk func.atanh.args=1 +tk main=func tk func.rint.arg.0=arithmetic,x tk func.lgammaf.args=1 tk func.ldexpl.ret=long double @@ -2743,7 +2749,7 @@ tk wcrtomb=func tk func.fsetpos.arg.1=const fpos_t*,pos tk swscanf=func -tk func.fsetpos.arg.0=FILE,*stream +tk func.fsetpos.arg.0=FILE *,stream tk func.lrintl.ret=long tk func.cbrtl.arg.0=long double,x tk cosf=func @@ -2788,27 +2794,27 @@ tk func.at_quick_exit.args=0 tk func.atanhf.ret=float tk func.wcstoumax.arg.0=const,wchar_t* -tk func.wcstoumax.arg.1=wchar_t*,*endptr +tk func.wcstoumax.arg.1=wchar_t* *,endptr tk type.double.size=64 tk func.atanl.ret=long double tk func.wcstoumax.arg.2=int,base tk logbl=func tk func.tanl.ret=long double tk func.feholdexcept.args=1 -tk func.wcstombs.arg.1=const wchar_t,*pwcs +tk func.wcstombs.arg.1=const wchar_t *,pwcs tk func.modfl.args=2 tk frexpl=func tk func.expl.arg.0=long double,x -tk func.wcslen.arg.0=const wchar_t,*s -tk func.wcstombs.arg.0=char,*s +tk func.wcslen.arg.0=const wchar_t *,s +tk func.wcstombs.arg.0=char *,s tk func.isalpha.args=1 tk ctime=func tk func.wcstombs.arg.2=size_t,n tk func.system.arg.0=const char *,string tk unsigned char=type tk func.wcsxfrm.arg.2=size_t,n -tk func.wcsxfrm.arg.1=const wchar_t,*s2 -tk func.wcsxfrm.arg.0=wchar_t,*s1 +tk func.wcsxfrm.arg.1=const wchar_t *,s2 +tk func.wcsxfrm.arg.0=wchar_t *,s1 tk func.logb.arg.0=arithmetic,x tk func.ispunct.arg.0=int,c tk func.putchar.arg.0=int,c @@ -2818,7 +2824,7 @@ tk func.sqrt.args=1 tk iscntrl=func tk func.sqrtl.arg.0=long double,x -tk func.fegetenv.arg.0=fenv_t,*envp +tk func.fegetenv.arg.0=fenv_t *,envp tk func.remove.args=1 tk frexpf=func tk func.nl_langinfo_l.ret=char * ```
radare commented 6 years ago

Here it is the reason:

On 24 Aug 2018, at 09:08, Zero King notifications@github.com wrote:

Diff of rc files — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

l2dy commented 6 years ago

@radare What reason? I can't find anything meaningful in your comment.

radare commented 6 years ago

dont u see the diff?

i fixed the dumping of metadata,before some type information was saved as (…) …. which is obviously not a valid r2 command, and now it is using C* ones. so thats why it slower. because now it does more stuff

On 24 Aug 2018, at 13:18, Zero King notifications@github.com wrote:

@radare https://github.com/radare What reason? I can't find anything meaningful in your comment.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/radare/radare2/issues/11096#issuecomment-415729907, or mute the thread https://github.com/notifications/unsubscribe-auth/AA3-ljAoMcUiBncM7J-4LGJjSAiu5o6Hks5uT-EEgaJpZM4V9W8s.

l2dy commented 6 years ago

Thanks for the explanation. But in 2.7.0 loading a project is faster than analyzing from scratch, while the latest git version (10265a050728fc530f5272b138aec17fb0e9fbf7) makes it about 3 times slower than analyzing. Even if it's caused by the three Ct commands, I think something is going wrong here…

I'm using projects to shorten the time needed to get a running r2 with an analyzed binary. This regression defeated my purpose using it.

Analyzing a binary

real    0m0.557s
user    0m0.252s
sys 0m0.197s

Loading the project

real    0m1.629s
user    0m1.434s
sys 0m0.118s

P.S. The three (...) lines were added after 2.7.0. (Not sure if this helps.)

radare commented 6 years ago

Projects need a huge overhaul, i have lot of plans for them , but they are pretty low in my priority list.

We should save the metadata in SDB instead of commands, this will make loading projects MUCH faster because it will be just 1 mmap call and not over 9000 reads, string parsings and command executions.

This will probably solve this loading time issue.

you can also see the prj. eval variables and see if prj.simple works better for you.

On 24 Aug 2018, at 16:33, Zero King notifications@github.com wrote:

Thanks for the explanation. But in 2.7.0 loading a project is faster than analyzing from scratch, while the latest git version (10265a0 https://github.com/radare/radare2/commit/10265a050728fc530f5272b138aec17fb0e9fbf7) makes it about 3 times slower than analyzing. Even if it's caused by the three Ct commands, I think something is going wrong here…

I'm using projects to shorten the time needed to get a running r2 with an analyzed binary. This regression defeated my purpose using it.

Analyzing a binary

real 0m0.557s user 0m0.252s sys 0m0.197s Loading the project

real 0m1.629s user 0m1.434s sys 0m0.118s P.S. The three (...) lines were added after 2.7.0. (Not sure if this helps.)

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/radare/radare2/issues/11096#issuecomment-415777679, or mute the thread https://github.com/notifications/unsubscribe-auth/AA3-lqDLhsVzDO9nH0iwh3N7I3mqZwvzks5uUA7CgaJpZM4V9W8s.

l2dy commented 6 years ago

prj.simple doesn't help (makes it slower). Thanks anyway!