B ‘W;í‘Söã@sÂddlZddlZddlZddlZdZdZdZe d¡Zdd„Z dd „Z iZ iZ iZ iZd d „Zd d „Zdd„Zdd„Zdd„Zdd„Zedkr¾ye eƒ¡Wnek r¼e d¡YnXdS)éNZ TRGDSBAECZUVZ Nntrgdsbavucz(.*): ?........ (.) (.*)$cCs&||kr|| |¡n |g||<dS)N)Úappend)ÚdictÚkeyÚitem©rú;/opt/alt/python37/lib64/python3.7/Tools/scripts/objgraph.pyÚstore)srcCs*d}x|D]}|d|}q W|dd…S)NÚú ér)ÚlistÚsrrrrÚflat2s rc CsÞxØ| ¡}|sPt |¡dkr$|qtjdd…\\}}\}}\}}\}} |||…||| …|||…} } } | tkr”tt| | ƒtt| | ƒq| tkr¶tt | | ƒtt | | ƒq| t krt | d| d| ƒqWdS)Nréú:z: unknown type ) ÚreadlineÚmatcherÚsearchÚregsÚ definitionsrÚdef2fileÚfile2defÚ externalsÚ file2undefÚ undef2fileÚignoreÚprint) Úfpr ZraÚrbZr1aZr1bZr2aZr2bZr3aZr3bÚfnÚnameÚtyperrrÚ readinputBs"&(  r"cCs˜tt ¡ƒ}x†|D]~}t|dƒt|}| ¡x\|D]T}t|ƒdkrNd}nd}|tkrptd||dƒq8td||tt|ƒƒq8WqWdS)Nréú z z *undefined)ÚsortedrÚkeysrÚsortÚlenrr)ÚflistÚfilenameÚelistÚextZtabsrrrÚ printcalleeXs     r-cCs˜tt ¡ƒ}x†|D]~}g}x$t|D]}|tkr$|t|}q$W|r„| ¡t|dƒd}x2|D]}||krztd|ƒ|}qbWqt|dƒqWdS)Nrr r$z: unused)r%rr&rr'r)Úfilesr*ZcallersZlabelZlastfnrrrrÚ printcallerjs      r/cCsi}x:tt ¡ƒD]*}x$t|D]}|tkr t|||ƒq WqWt| ¡ƒ}x>|D]6}t|dƒt||ƒ}x|D]}td|ƒqtWqRWdS)Nrr$)r rr&rrr%r)Zundefsr*r,r+r)rrrÚ printundef~s     r0cCsbtj}tjt_tt ¡ƒ}x<|D]4}tt|ƒdkr td|dddttt|ƒƒq W|t_dS)Nr zwarning:zmultiply defined:r )Úend) ÚsysÚstdoutÚstderrr%rr&r(rr)Z savestdoutÚnamesr rrrÚwarndupss  r6c Cs°yt tjdd…d¡\}}Wnrtjk rtjt_tdtj  tjd¡ddtdƒtdƒtd ƒtd ƒtd ƒtd ƒtd ƒdSXd}}}x8|D]0\}}|dkrºd}q¤|dkrÈd}q¤|dkr¤d}q¤W||krø|krødkrnn d}}}|sdg}x2|D]*}|dkr4t tj ƒnt t |dƒƒqWt ƒ|||dk}|rx|rrtdƒtƒ|r’|rŒtdƒtƒ|r¬|r¦tdƒtƒdS)Nr ZcduzUsage:rr )r1z[-cdu] [file] ...z -c: print callers per objectfilez -d: print callees per objectfilez$-u: print usage of undefined symbolsz.If none of -cdu is specified, all are assumed.z!Use "nm -o" to generate the inputz"e.g.: nm -o /lib/libc.a | objgraphz-uz-cz-dú-Úrz,---------------All callees------------------z,---------------Undefined callees------------z,---------------All Callers------------------)Úgetoptr2ÚargvÚerrorr4r3rÚosÚpathÚbasenamer"ÚstdinÚopenr6r-r0r/) ZoptlistÚargsZoptuZoptcZoptdZoptZvoidr*ZmorerrrÚmain™sX $    rBÚ__main__r )r2r<r9ÚrerrrÚcompilerrrrrrrr"r-r/r0r6rBÚ__name__ÚexitÚKeyboardInterruptrrrrÚs0   5