§
    ƒÛg“  ã                   ó<   — d Z ddlmZmZ ddlZddlZddlmZ d„ ZdS )zMiscellaneous inspection tools
é    )ÚNamedTemporaryFileÚTemporaryDirectoryN)ÚNumbaWarningc                 óž   ‡ ‡‡‡— 	 ddl Šn# t          $ r t          d¦  «        ‚w xY wdˆ ˆˆfd„	Š G ˆfd„dt          ¦  «        } |¦   «         S )zÂ
    Gets the CFG of the disassembly of an ELF object, elf, at mangled name,
    mangled_symbol, and renders it appropriately depending on the execution
    environment (terminal/notebook).
    r   Nz$r2pipe package needed for disasm CFGc                 ób  •— ddl m} | €t          d¦  «        ‚t          ¦   «         5 }t	          d|¬¦  «        5 }|                     ‰¦  «         |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d}	 t          j         	                    |j
        ¦  «        › d�}t          j                             ||¦  «        } |¦   «         }|                     ||j
        f¦  «         |}d}nE# t          $ r8}	d|	› d	�}
t          j        t!          |
¦  «        ¦  «         |j
        }Y d }	~	nd }	~	ww xY w	 g d
¢}‰                     ||¬¦  «        }|                     d¦  «         |rM‰d d…         }|                     d¦  «         |                     d|› d�¦  «         |                     d¦  «         |                     d| z  ¦  «        }|                     ¦   «          n6# t          $ r)}	dt)          |	¦  «        v rd}
t+          |
¦  «        ‚|	‚d }	~	ww xY w	 d d d ¦  «         n# 1 swxY w Y   |S )Nr   )Ú	ToolchainzNo command givenF)ÚdeleteÚdirz.soTzALinking the ELF object with the distutils toolchain failed with: z\. Disassembly will still work but might be less accurate and will not use DWARF information.)z-2z-e io.cache=truez-e scr.color=1z-e asm.dwarf=truez-e scr.utf8=true)ÚflagsÚaaaaaaé=   ze bin.demangle=falsezs `is~ z[1]`ze bin.demangle=truez%szradare2 in PATHz–This feature requires 'radare2' to be installed and available on the system see: https://github.com/radareorg/radare2. Cannot find 'radare2' in $PATH.)Únumba.pycc.platformr   Ú
ValueErrorr   r   ÚwriteÚflushÚosÚpathÚbasenameÚnameÚjoinÚlink_sharedÚ	ExceptionÚwarningsÚwarnr   ÚopenÚcmdÚquitÚstrÚRuntimeError)r   r   ÚtmpdirÚfÚlinkedÚraw_dso_nameÚ
linked_dsoÚtcÚobj_to_analyseÚeÚmsgr   ÚrÚmangled_symbol_61charÚdataÚelfÚmangled_symbolÚr2pipes                  €€€úK/granary/edev/quantum/lib/python3.11/site-packages/numba/misc/inspection.pyÚget_renderingz-disassemble_elf_to_cfg.<locals>.get_rendering   só  ø€ Ø1Ð1Ð1Ð1Ð1Ð1Øˆ;ÝÐ/Ñ0Ô0Ð0åÑ!Ô!ð 9	 Vå#¨5°fÐ=Ñ=Ô=ð ÀØ—’˜‘”�Ø—’‘	”	�	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 ˆFð(Ý"$¤'×"2Ò"2°1´6Ñ":Ô":Ð?Ð?Ð?�ÝœWŸ\š\¨&°,Ñ?Ô?�
Ø�Y‘[”[�Ø—’˜z¨A¬F¨9Ñ5Ô5Ð5Ø!+�Ø��øÝð 	(ð 	(ð 	(ð&Ø'(ð&ð &ð &�õ ”�l¨3Ñ/Ô/Ñ0Ô0Ð0Ø!"¤������øøøøð	(øøøððð ð �ð —K’K °e�KÑ<Ô<�Ø—’�h‘”�ð ð 1à,:¸3¸B¸3Ô,?Ð)à—E’EÐ0Ñ1Ô1Ð1à—E’EÐ?Ð$9Ð?Ð?Ð?Ñ@Ô@Ð@à—E’EÐ/Ñ0Ô0Ð0Ø—u’u˜T C™ZÑ(Ô(�Ø—’‘”��øÝð ð ð Ø$­¨A©¬Ð.Ð.ð=�Cõ ' sÑ+Ô+Ð+à�Gøøøøðøøøð ða9	ð 9	ð 9	ñ 9	ô 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	øøøð 9	ð 9	ð 9	ð 9	ðt ˆs„   §H$¹*A/Á#H$Á/A3	Á3H$Á6A3	Á7H$Á=A1C/Ã.H$Ã/
D1Ã9.D,Ä'H$Ä,D1Ä1H$Ä5B+G!Ç H$Ç!
HÇ+$HÈHÈH$È$H(È+H(c                   ó$   •— e Zd Zˆ fd„Zˆ fd„ZdS )ú)disassemble_elf_to_cfg.<locals>.DisasmCFGc                 ó  •— 	 dd l }n# t          $ r t          d¦  «        ‚w xY w ‰d¬¦  «        }|                     dd¦  «         |                     |¦  «        }|                     d¦  «                             d¦  «        S )	Nr   z&graphviz package needed for disasm CFGÚagfd©r   zfontname="Courier",zfontname="Courier",fontsize=6,ÚsvgzUTF-8)ÚgraphvizÚImportErrorr   ÚreplaceÚSourceÚpipeÚdecode)Úselfr7   Újupyter_renderingÚsrcr0   s       €r/   Ú
_repr_svg_z4disassemble_elf_to_cfg.<locals>.DisasmCFG._repr_svg_X   s¦   ø€ ðMØ����øÝð Mð Mð MÝ"Ð#KÑLÔLÐLðMøøøà - °&Ð 9Ñ 9Ô 9Ðà×%Ò%Ð&;Ø&FñHô Hð Hà—/’/Ð"3Ñ4Ô4ˆCØ—8’8˜E‘?”?×)Ò)¨'Ñ2Ô2Ð2s   ƒ ˆ"c                 ó   •—  ‰d¬¦  «        S )NÚagfr5   © )r=   r0   s    €r/   Ú__repr__z2disassemble_elf_to_cfg.<locals>.DisasmCFG.__repr__d   s   ø€ Ø �= UÐ+Ñ+Ô+Ð+ó    N)Ú__name__Ú
__module__Ú__qualname__r@   rD   )r0   s   €r/   Ú	DisasmCFGr2   V   sG   ø€ € € € € ð
	3ð 
	3ð 
	3ð 
	3ð 
	3ð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,rE   rI   )N)r.   r8   r   Úobject)r,   r-   rI   r0   r.   s   `` @@r/   Údisassemble_elf_to_cfgrK   
   s°   øøøø€ ðCØˆˆˆˆøÝð Cð Cð CÝÐAÑBÔBÐBðCøøøð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ðB,ð ,ð ,ð ,ð ,ð ,ð ,•Fñ ,ô ,ð ,ð" ˆ9‰;Œ;Ðs   † ‹%)	Ú__doc__Útempfiler   r   r   r   Únumba.core.errorsr   rK   rC   rE   r/   ú<module>rO      si   ððð à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 	€	€	€	Ø €€€à *Ð *Ð *Ð *Ð *Ð *ð]ð ]ð ]ð ]ð ]rE   