Ë
    f#$  ã                   ó®   — d dl mZ d dlZd dlZddlmZmZmZm	Z	m
Z
mZ  G d„ de«      Z G d„ de«      Z G d	„ d
e«      Z G d„ de«      Z G d„ de«      Zy)é    )Úprint_functionNé   )ÚlibÚ_USDT_CBÚ_USDT_PROBE_CBÚbcc_usdt_locationÚbcc_usdt_argumentÚBCC_USDT_ARGUMENT_FLAGSc                   ó   — e Zd Zy)ÚUSDTExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    ú*/usr/lib/python3/dist-packages/bcc/usdt.pyr   r      s   „ Ør   r   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚUSDTProbeArgumentc                 óÐ  — |j                   dk  | _        t        |j                   «      | _         |j                  | _        | j                  t        j
                  z  dk7  r|j                  | _        | j                  t        j                  z  dk7  r|j                  | _        | j                  t        j                  z  dk7  r|j                  | _
        | j                  t        j                  z  dk7  r|j                  | _        | j                  t        j                  z  dk7  r|j                  | _        | j                  t        j                  z  dk7  r|j                   | _        y y )Nr   )ÚsizeÚsignedÚabsÚvalidr
   ÚCONSTANTÚconstantÚDEREF_OFFSETÚderef_offsetÚDEREF_IDENTÚderef_identÚBASE_REGISTER_NAMEÚbase_register_nameÚINDEX_REGISTER_NAMEÚindex_register_nameÚSCALEÚscale)ÚselfÚarguments     r   Ú__init__zUSDTProbeArgument.__init__   s  € Ø—m‘m aÑ'ˆŒÜ˜Ÿ™Ó&ˆŒ	Ø—^‘^ˆŒ
Ø�:‰:Ô/×8Ñ8Ñ8¸AÒ=Ø$×-Ñ-ˆDŒMØ�:‰:Ô/×<Ñ<Ñ<ÀÒAØ (× 5Ñ 5ˆDÔØ�:‰:Ô/×;Ñ;Ñ;¸qÒ@Ø'×3Ñ3ˆDÔØ�:‰:Ô/×BÑBÑBÀaÒGØ&.×&AÑ&AˆDÔ#Ø�:‰:Ô/×CÑCÑCÀqÒHØ'/×'CÑ'CˆDÔ$Ø�:‰:Ô/×5Ñ5Ñ5¸Ò:Ø!Ÿ™ˆD�Jð ;r   c                 óF   — d| j                   | j                  rdfz  S dfz  S )Nz%d %s byteszsigned  Úunsigned)r   r   ©r&   s    r   Ú_size_prefixzUSDTProbeArgument._size_prefix+   s5   € ØØ—‘¨$¯+ª+˜JÐFñGð 	GØ;EÐFñGð 	Gr   c                 óT  — | j                   t        j                  z  dk7  rd| j                  z  S | j                   t        j                  z  dk(  rd| j
                  j                  «       z  S | j                   t        j                  z  dk7  rÙ| j                   t        j                  z  dk(  r¹| j                   t        j                  z  dk7  rPd| j                  j                  «       z  }| j                   t        j                  z  dk7  r|d| j                  z  z  }nd}| j                  dk\  rdnd}d	| j
                  j                  «       |t        | j                  «      |fz  S | j                   t        j                  z  dk7  r•| j                   t        j                  z  dk7  ru| j                   t        j                  z  dk7  rU| j
                  d
k(  rF| j                  dk\  rdnd}d| j                  j                  «       |t        | j                  «      fz  S d| j                   z  S )Nr   z%dz%sz + %sz * %dÚ ú+ú-z*(%s %s %d%s)Úipz*(&%s %s %d)z&unrecognized argument format, flags %d)r   r
   r   r   r   r!   Údecoder   r"   r#   r$   r%   r   r   r    r   )r&   Úindex_offsetÚsigns      r   Ú_formatzUSDTProbeArgument._format/   së  € ð �:‰:Ô/×8Ñ8Ñ8¸AÒ=Ø˜$Ÿ-™-Ñ'Ð'Ø�:‰:Ô/×<Ñ<Ñ<ÀÒAØ˜$×1Ñ1×8Ñ8Ó:Ñ:Ð:Ø�:‰:Ô/×<Ñ<Ñ<ÀÒAØ�:‰:Ô/×;Ñ;Ñ;¸qÒ@Ø�z‰zÔ3×GÑGÑGÈ1ÒLØ&¨×)AÑ)A×)HÑ)HÓ)JÑJ�Ø—:‘:Ô 7× =Ñ =Ñ=ÀÒBØ  G¨d¯j©jÑ$8Ñ8‘Là!�Ø×+Ñ+¨qÒ0‘3°cˆDØ" d×&=Ñ&=×&DÑ&DÓ&FØ&*¬C°×0AÑ0AÓ,BÀLð&Rñ Rð Rà�:‰:Ô/×<Ñ<Ñ<ÀÒAØ�:‰:Ô/×;Ñ;Ñ;¸qÒ@Ø�:‰:Ô/×BÑBÑBÀaÒGØ×"Ñ" dÒ*Ø×+Ñ+¨qÒ0‘3°cˆDØ! T×%5Ñ%5×%<Ñ%<Ó%>Ø%)¬3¨t×/@Ñ/@Ó+Að%Cñ Cð Cð
 8¸$¿*¹*ÑDÐDr   c                 óH   — | j                  «       ›d| j                  «       ›�S )Nz @ )r,   r5   r+   s    r   Ú__str__zUSDTProbeArgument.__str__M   s   € Ø ×-Ñ-Õ/°·±´Ð@Ð@r   N)r   r   r   r(   r,   r5   r7   r   r   r   r   r      s   „ ò(ò"GòEó<Ar   r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚUSDTProbeLocationc                 ó†   — || _         || _        |j                  | _        |j                  | _        |j                  | _        y ©N)ÚprobeÚindexÚnum_argumentsÚaddressÚbin_path)r&   r<   r=   Úlocations       r   r(   zUSDTProbeLocation.__init__Q   s8   € ØˆŒ
ØˆŒ
Ø"×0Ñ0ˆÔØ×'Ñ'ˆŒØ ×)Ñ)ˆ�r   c                 óT   — d| j                   j                  «       | j                  fz  S )Nz%s 0x%x)r@   r2   r?   r+   s    r   r7   zUSDTProbeLocation.__str__X   s#   € Ø˜DŸM™M×0Ñ0Ó2°D·L±LÐAÑAÐAr   c           
      óP  — t        «       }t        j                  | j                  j                  | j                  j
                  | j                  j                  | j                  |t        j                  |«      «      }|dk7  rt        d|| j                  fz  «      ‚t        |«      S )Nr   z.error retrieving probe argument %d location %d)r	   r   Úbcc_usdt_get_argumentr<   ÚcontextÚproviderÚnamer=   ÚctÚbyrefr   r   )r&   r=   ÚargÚress       r   Úget_argumentzUSDTProbeLocation.get_argument[   sˆ   € ÜÓ!ˆÜ×'Ñ'¨¯
©
×(:Ñ(:¸D¿J¹J×<OÑ<OØ(,¯
©
¯©Ø(,¯
©
°E¼2¿8¹8ÀC»=óJˆð �!Š8ÜØDØ˜DŸJ™JÐ'ñ(ó)ð )ô ! Ó%Ð%r   N)r   r   r   r(   r7   rL   r   r   r   r9   r9   P   s   „ ò*òBó	&r   r9   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)Ú	USDTProbec                 óÞ   — || _         |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        y r;   )rE   rF   rG   r@   Ú	semaphoreÚnum_locationsr>   )r&   rE   r<   s      r   r(   zUSDTProbe.__init__g   sQ   € ØˆŒØŸ™ˆŒØ—J‘JˆŒ	ØŸ™ˆŒØŸ™ˆŒØ"×0Ñ0ˆÔØ"×0Ñ0ˆÕr   c                 ó†   — d| j                   j                  «       | j                  j                  «       | j                  fz  S )Nz%s:%s [sema 0x%x])rF   r2   rG   rP   r+   s    r   r7   zUSDTProbe.__str__p   s9   € Ø"Ø—‘×$Ñ$Ó&¨¯	©	×(8Ñ(8Ó(:¸D¿N¹NÐKñLð 	Lr   c                 óp   — | j                   j                  «       ›d| j                  j                  «       ›�S )Nú:)rF   r2   rG   r+   s    r   Ú
short_namezUSDTProbe.short_namet   s'   € ØŸ-™-×.Ñ.Õ0°$·)±)×2BÑ2BÔ2DÐEÐEr   c           	      óê   — t        «       }t        j                  | j                  | j                  | j
                  |t        j                  |«      «      }|dk7  rt        d|z  «      ‚t        | ||«      S )Nr   z"error retrieving probe location %d)
r   r   Úbcc_usdt_get_locationrE   rF   rG   rH   rI   r   r9   )r&   r=   ÚlocrK   s       r   Úget_locationzUSDTProbe.get_locationw   s`   € ÜÓ!ˆÜ×'Ñ'¨¯©°d·m±mÀTÇYÁYØ(-¬r¯x©x¸«}ó>ˆà�!Š8ÜÐ DÀuÑ LÓMÐMÜ   u¨cÓ2Ð2r   N)r   r   r   r(   r7   rU   rY   r   r   r   rN   rN   f   s   „ ò1òLòFó3r   rN   c                   óJ   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zy)ÚUSDTNc                 óÆ  — |r…|dk7  r€|| _         |r+t        j                  ||j                  d«      «      | _        n.t        j                  |t        j                  d«      «      | _        | j                  d k(  rt        d|z  «      ‚y |rN|| _        t        j                  |j                  d«      «      | _        | j                  d k(  rt        d|z  «      ‚y t        d«      ‚)NéÿÿÿÿÚasciir   z USDT failed to instrument PID %dz!USDT failed to instrument path %sz/either a pid or a binary path must be specified)
Úpidr   Úbcc_usdt_new_frompidÚencoderE   rH   Úc_char_pr   ÚpathÚbcc_usdt_new_frompath)r&   r_   rc   s      r   r(   zUSDT.__init__€   sË   € Ù�3˜"’9ØˆDŒHÙÜ"×7Ñ7¸¸T¿[¹[ÈÓ=QÓR�•ä"×7Ñ7¸¼R¿[¹[È»^ÓL�”Ø�|‰|˜tÒ#Ü#Ð$FÈÑ$LÓMÐMð $áØˆDŒIÜ×4Ñ4°T·[±[ÀÓ5IÓJˆDŒLØ�|‰|˜tÒ#Ü#Ð$GÈ$Ñ$NÓOÐOð $ô  ØEóGð Gr   c                 óB   — t        j                  | j                  «       y r;   )r   Úbcc_usdt_closerE   r+   s    r   Ú__del__zUSDT.__del__’   s   € Ü×Ñ˜4Ÿ<™<Õ(r   c                 ó’  — |j                  dd«      }t        |«      dk(  r@t        j                  | j                  |j                  d«      |j                  d«      «      }nT|\  }}t        j                  | j                  |j                  d«      |j                  d«      |j                  d«      «      }|dk7  rt        d|z  «      ‚y )NrT   r   r^   r   a.  Failed to enable USDT probe '%s':
the specified pid might not contain the given language's runtime,
or the runtime was not built with the required USDT probes. Look
for a configure flag similar to --with-dtrace or --enable-dtrace.
To check which probes are present in the process, use the tplist tool.
)ÚsplitÚlenr   Úbcc_usdt_enable_proberE   ra   Ú%bcc_usdt_enable_fully_specified_prober   )r&   r<   Úfn_nameÚprobe_partsÚretÚprovider_nameÚ
probe_names          r   Úenable_probezUSDT.enable_probe•   sÀ   € Ø—k‘k # qÓ)ˆÜˆ{Ó˜qÒ Ü×+Ñ+Ø—‘˜eŸl™l¨7Ó3°W·^±^ÀGÓ5LóN‰Cð +6Ñ'ˆ]˜JÜ×;Ñ;Ø—‘˜m×2Ñ2°7Ó;¸Z×=NÑ=NÈwÓ=WØ—‘˜wÓ'ó)ˆCð �!Š8Üðð
 ñóð ð r   c                 ó¶   — 	 | j                  ||«       y # t        $ r:}t        |t        j                  ¬«       t        j
                  d«       Y d }~y d }~ww xY w)N)Úfiler   )rr   r   ÚprintÚsysÚstderrÚexit)r&   r<   rm   Úes       r   Úenable_probe_or_bailzUSDT.enable_probe_or_bail©   sB   € ð	Ø×Ñ˜e WÕ-øÜò 	Ü�!œ#Ÿ*™*Õ%Ü�H‰H�Q�K‰Kûð	ús   ‚ •	Až0AÁAc                 ó   — | j                   S r;   )rE   r+   s    r   Úget_contextzUSDT.get_context°   s   € Ø�|‰|Ðr   c                 ó¼   — t        j                  dz  «       }t        j                  | j                  «      |d<   t        j                  |d«      j                  «       S )Nr   r   )rH   Úc_void_prE   r   Úbcc_usdt_genargsr2   )r&   Ú	ctx_arrays     r   Úget_textzUSDT.get_text³   sD   € Ü—[‘[ 1‘_Ó'ˆ	Ü—{‘{ 4§<¡<Ó0ˆ	�!‰Ü×#Ñ# I¨qÓ1×8Ñ8Ó:Ð:r   c                 ód  — |j                  dd«      }t        |«      dk(  r>t        j                  | j                  |j                  d«      |«      j                  «       S |\  }}t        j                  | j                  |j                  d«      |j                  d«      |«      j                  «       S )NrT   r   r^   )ri   rj   r   Úbcc_usdt_get_probe_argctyperE   ra   r2   Ú+bcc_usdt_get_fully_specified_probe_argctype)r&   rq   Ú	arg_indexrn   rp   r<   s         r   Úget_probe_arg_ctypezUSDT.get_probe_arg_ctype¸   sŸ   € Ø ×&Ñ& s¨AÓ.ˆÜˆ{Ó˜qÒ Ü×2Ñ2Ø—‘˜j×/Ñ/°Ó8¸)óEßEKÁVÃXðNð &1Ñ"ˆ]˜EÜ×BÑBØ—‘˜m×2Ñ2°7Ó;¸U¿\¹\È'Ó=RÐT]ó_ß_eÑ_eÓ_gðhr   c                 ól   ‡ ‡— g Šˆˆ fd„}t        j                  ‰ j                  t        |«      «       ‰S )Nc                 ód   •— ‰j                  t        ‰j                  | j                  «      «       y r;   )ÚappendrN   rE   Úcontents)r<   Úprobesr&   s    €€r   Ú
_add_probez)USDT.enumerate_probes.<locals>._add_probeÄ   s   ø€ Ø�M‰Mœ) D§L¡L°%·.±.ÓAÕBr   )r   Úbcc_usdt_foreachrE   r   ©r&   rŒ   r‹   s   ` @r   Úenumerate_probeszUSDT.enumerate_probesÂ   s.   ù€ Øˆõ	Cô 	×Ñ˜TŸ\™\¬8°JÓ+?Ô@Øˆr   c                 ón   — | j                  «       }|D ]   \  }}}}|rd}|j                  ||||¬«       Œ" y )Nr]   )rG   rm   Úaddrr_   )Úenumerate_active_probesÚattach_uprobe)r&   ÚbpfÚattach_usdt_ignore_pidr‹   Úbinpathrm   r‘   r_   s           r   Úattach_uprobeszUSDT.attach_uprobesÌ   sL   € Ø×-Ñ-Ó/ˆØ-3ò 	2Ñ)ˆW�g˜t SÙ%Ø�Ø×Ñ 7°GØ#'¨Sð õ 2ñ	2r   c                 óh   ‡— g Šˆfd„}t        j                  | j                  t        |«      «       ‰S )Nc                 ó0   •— ‰j                  | |||f«       y r;   )r‰   )r–   rm   r‘   r_   r‹   s       €r   rŒ   z0USDT.enumerate_active_probes.<locals>._add_probeÖ   s   ø€ Ø�M‰M˜7 G¨T°3Ð7Õ8r   )r   Úbcc_usdt_foreach_uproberE   r   rŽ   s     @r   r’   zUSDT.enumerate_active_probesÔ   s-   ø€ Øˆô	9ô 	×#Ñ# D§L¡L´.ÀÓ2LÔMØˆr   )NN)r   r   r   r(   rg   rr   rz   r|   r�   r†   r�   r—   r’   r   r   r   r[   r[      s6   „ óGò$)òò(òò;ò
hòò2ór   r[   )Ú
__future__r   ÚctypesrH   rv   Úlibbccr   r   r   r   r	   r
   Ú	Exceptionr   Úobjectr   r9   rN   r[   r   r   r   ú<module>r       s[   ðõ &Û Û 
÷,÷ ,ô	�Iô 	ô5A˜ô 5Aôn&˜ô &ô,3�ô 3ô2[ˆ6õ [r   