B
    18™\  ã               @   sÂ   d dl Z d dlZd dlZd dlZdZdZdZe d¡Zdd„ Z	dd	„ Z
i Zi Zi Zi Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedkr¾ye  eƒ ¡ W n ek
r¼   e  d¡ Y nX dS )é    NZ	TRGDSBAECZUVZNntrgdsbavucz(.*):	?........ (.) (.*)$c             C   s&   || kr| |   |¡ n
|g| |< d S )N)Úappend)ÚdictÚkeyÚitem© r   úV/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Tools/scripts/objgraph.pyÚstore)   s    r   c             C   s*   d}x| D ]}|d | }q
W |dd … S )NÚ ú é   r   )ÚlistÚsr   r   r   r   Úflat2   s    
r   c             C   sÞ   xØ|   ¡ }|sP t |¡dk r$| qtjd d… \\}}\}}\}}\}}	|||… |||	… |||…   }
}}|tkr”tt||
ƒ tt|
|ƒ q|tkr¶tt	|
|ƒ tt
||
ƒ q|tkrt|
d | d | ƒ qW d S )Nr   é   ú:z: unknown type )ÚreadlineÚmatcherÚsearchÚregsÚdefinitionsr   Údef2fileÚfile2defÚ	externalsÚ
file2undefÚ
undef2fileÚignoreÚprint)Úfpr   ZraÚrbZr1aZr1bZr2aZr2bZr3aZr3bÚfnÚnameÚtyper   r   r   Ú	readinputB   s"      &(r"   c              C   s˜   t t ¡ ƒ} x†| D ]~}t|d ƒ t| }| ¡  x\|D ]T}t|ƒdkrNd}nd}|tkrptd| | d ƒ q8td| | tt| ƒ ƒ q8W qW d S )Nr   é   ú	z		z *undefined)Úsortedr   Úkeysr   ÚsortÚlenr   r   )ÚflistÚfilenameÚelistÚextÚtabsr   r   r   ÚprintcalleeX   s    

r.   c              C   s˜   t t ¡ ƒ} x†| D ]~}g }x$t| D ]}|tkr$|t|  }q$W |r„| ¡  t|d ƒ d}x2|D ]}||krztd| ƒ |}qbW qt|d ƒ qW d S )Nr   r	   r$   z: unused)r%   r   r&   r   r'   r   )Úfilesr*   ZcallersÚlabelZlastfnr   r   r   r   Úprintcallerj   s    


r1   c              C   s   i } x:t t ¡ ƒD ]*}x$t| D ]}|tkr t| ||ƒ q W qW t|  ¡ ƒ}x>|D ]6}t|d ƒ t| | ƒ}x|D ]}td| ƒ qtW qRW d S )Nr   r$   )r   r   r&   r   r   r%   r   )Úundefsr*   r,   r+   r)   r   r   r   Ú
printundef~   s    

r3   c              C   sb   t j} t jt _tt ¡ ƒ}x<|D ]4}tt| ƒdkr td|ddd ttt| ƒƒ q W | t _d S )Nr   zwarning:zmultiply defined:r
   )Úend)	ÚsysÚstdoutÚstderrr%   r   r&   r(   r   r   )Z
savestdoutÚnamesr    r   r   r   Úwarndups   s    
r9   c        	   	   C   s°  yt   tjdd … d¡\} }W nr t jk
r   tjt_tdtj 	tjd ¡dd tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ dS X d } }}x8| D ]0\}}|dkrºd}q¤|dkrÈd}q¤|dkr¤d}q¤W ||  krø|  krødkrn nd } }}|sdg}x2|D ]*}|dkr4t
tjƒ nt
t|dƒƒ qW tƒ  || | dk}|rx|rrtdƒ tƒ  |r’|rŒtdƒ tƒ  |r¬|r¦tdƒ tƒ  dS )Nr   ZcduzUsage:r   r
   )r4   z[-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------------------)Úgetoptr5   ÚargvÚerrorr7   r6   r   ÚosÚpathÚbasenamer"   ÚstdinÚopenr9   r.   r3   r1   )	ZoptlistÚargsZoptuZoptcZoptdÚoptÚvoidr*   Zmorer   r   r   Úmain™   sX    $

rG   Ú__main__r   )r5   r?   r<   Úrer   r   r   Úcompiler   r   r   r   r   r   r   r"   r.   r1   r3   r9   rG   Ú__name__ÚexitÚKeyboardInterruptr   r   r   r   Ú<module>   s0   
	5