ó
ôŸ?`c           @   sù   d  d l  Z  d  d l Z d  d l Z d  d l Z d Z d Z d Z e j d ƒ Z d „  Z	 d „  Z
 i  Z i  Z i  Z i  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z e d k rõ y e  j e ƒ  ƒ Wqõ e k
 rñ e  j d ƒ qõ Xn  d S(   iÿÿÿÿNt	   TRGDSBAECt   UVt   Nntrgdsbavucs   (.*):	?........ (.) (.*)$c         C   s4   |  j  | ƒ r# |  | j | ƒ n | g |  | <d  S(   N(   t   has_keyt   append(   t   dictt   keyt   item(    (    s.   /usr/lib64/python2.7/Tools/scripts/objgraph.pyt   store)   s    c         C   s-   d } x |  D] } | d | } q W| d S(   Nt    t    i   (    (   t   listt   sR   (    (    s.   /usr/lib64/python2.7/Tools/scripts/objgraph.pyt   flat2   s    c         C   s  x|  j  ƒ  } | s Pn  t j | ƒ d k  r8 | q n  t j d  \ \ } } \ } } \ } } \ } }	 | | | !| | |	 !| | | !}
 } } | t k rÁ t t | |
 ƒ t t |
 | ƒ q | t k rð t t	 |
 | ƒ t t
 | |
 ƒ q | t k r |
 d | d | GHq q d  S(   Ni    i   t   :s   : unknown type (   t   readlinet   matchert   searcht   regst   definitionsR   t   def2filet   file2deft	   externalst
   file2undeft
   undef2filet   ignore(   t   fpR   t   rat   rbt   r1at   r1bt   r2at   r2bt   r3at   r3bt   fnt   namet   type(    (    s.   /usr/lib64/python2.7/Tools/scripts/objgraph.pyt	   readinputB   s"      1)c          C   s¸   t  j ƒ  }  |  j ƒ  x› |  D]“ } | d GHt  | } | j ƒ  xm | D]e } t | ƒ d k rh d } n d } t j | ƒ s‘ d | | d GHqG d | | t t | ƒ GHqG Wq Wd  S(   NR   i   s   	s   		s    *undefined(   R   t   keyst   sortt   lenR   R   R   (   t   flistt   filenamet   elistt   extt   tabs(    (    s.   /usr/lib64/python2.7/Tools/scripts/objgraph.pyt   printcalleeX   s    
	

	c          C   sÀ   t  j ƒ  }  |  j ƒ  x£ |  D]› } g  } x2 t  | D]& } t j | ƒ r4 | t | } q4 q4 W| r¯ | j ƒ  | d GHd } x8 | D]$ } | | k r¢ d | GHn  | } q„ Wq | d GHq Wd  S(   NR   R	   s   	s   : unused(   R   R'   R(   R   R   (   t   filesR+   t   callerst   labelt   lastfnR#   (    (    s.   /usr/lib64/python2.7/Tools/scripts/objgraph.pyt   printcallerk   s     

	c          C   s¶   i  }  xK t  j ƒ  D]= } x4 t  | D]( } t j | ƒ s$ t |  | | ƒ q$ q$ Wq W|  j ƒ  } | j ƒ  xE | D]= } | d GH|  | } | j ƒ  x | D] } d | GHq› Wqq Wd  S(   NR   s   	(   R   R'   R   R   R   R(   (   t   undefsR+   R-   R,   R*   (    (    s.   /usr/lib64/python2.7/Tools/scripts/objgraph.pyt
   printundef€   s    
	

c          C   s}   t  j }  t  j t  _ t j ƒ  } | j ƒ  xB | D]: } t t | ƒ d k r2 d G| Gd Gt t | ƒ GHq2 q2 W|  t  _ d  S(   Ni   s   warning:s   multiply defined:(   t   syst   stdoutt   stderrR   R'   R(   R)   R   (   t
   savestdoutt   namesR$   (    (    s.   /usr/lib64/python2.7/Tools/scripts/objgraph.pyt   warndups‘   s    	
c    	      C   sì  y# t  j  t j d d ƒ \ }  } Wn_ t  j k
 r„ t j t _ d Gt j j t j d ƒ Gd GHd GHd GHd GHd	 GHd
 GHd GHd SXd } } } xS |  D]K \ } } | d k r» d } qš | d k rÐ d } qš | d k rš d } qš qš W| | k o| k od k n r!d } } } n  | s3d g } n  x= | D]5 } | d k r\t	 t j
 ƒ q:t	 t | d ƒ ƒ q:Wt ƒ  | | | d k } | r¬| r¢d GHn  t ƒ  n  | rÊ| rÀd GHn  t ƒ  n  | rè| rÞd GHn  t ƒ  n  d S(   Ni   t   cdus   Usage:i    s   [-cdu] [file] ...s    -c: print callers per objectfiles    -d: print callees per objectfiles$   -u: print usage of undefined symbolss.   If none of -cdu is specified, all are assumed.s6   Use "nm -o" to generate the input (on IRIX: "nm -Bo"),s"   e.g.: nm -o /lib/libc.a | objgraphs   -us   -cs   -dt   -t   rs,   ---------------All callees------------------s,   ---------------Undefined callees------------s,   ---------------All Callers------------------(   t   getoptR7   t   argvt   errorR9   R8   t   ost   patht   basenameR&   t   stdint   openR<   R/   R6   R4   (	   t   optlistt   argst   optut   optct   optdt   optt   voidR+   t   more(    (    s.   /usr/lib64/python2.7/Tools/scripts/objgraph.pyt   mainž   sX    #		'


t   __main__i   (   R7   RC   R@   t   reR   R   R   t   compileR   R   R   R   R   R   R   R&   R/   R4   R6   R<   RP   t   __name__t   exitt   KeyboardInterrupt(    (    (    s.   /usr/lib64/python2.7/Tools/scripts/objgraph.pyt   <module>   s0   									5