o
    Td                     @   s<   d Z ddlmZmZ ddlZddlZddlmZ dd ZdS )zMiscellaneous inspection tools
    )NamedTemporaryFileTemporaryDirectoryN)NumbaWarningc                    sP   zddl W n ty   tdw d fdd	G fd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                    s  ddl m} | d u rtdt }td|d}|  |  W d    n1 s,w   Y  d}z"tj	|j
 d}tj||}| }|||j
f |}d}W n" tyw }	 zd|	 d	}
tt|
 |j
}W Y d }	~	nd }	~	ww z8g d
}j||d}|d |rd d }|d |d| d |d |d|  }|  W n ty }	 zdt|	v rd}
t|
|	d }	~	ww W d    |S 1 sw   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 PATHzThis 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r2pipe h/home/ncw/WWW/www-new/content/articles/pi-bbp/venv/lib/python3.10/site-packages/numba/misc/inspection.pyget_rendering   s^   





::z-disassemble_elf_to_cfg.<locals>.get_renderingc                       s$   e Zd Z fddZ fddZdS )z)disassemble_elf_to_cfg.<locals>.DisasmCFGc                    sT   zdd l }W n ty   tdw  d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)selfr2   jupyter_renderingsrcr.   r,   r-   
_repr_svg_X   s   

z4disassemble_elf_to_cfg.<locals>.DisasmCFG._repr_svg_c                    s
    ddS )Nagfr0   r,   )r8   r;   r,   r-   __repr__d   s   
z2disassemble_elf_to_cfg.<locals>.DisasmCFG.__repr__N)__name__
__module____qualname__r<   r>   r,   r;   r,   r-   	DisasmCFGV   s    rB   )N)r+   r3   r   object)r)   r*   rB   r,   )r)   r.   r*   r+   r-   disassemble_elf_to_cfg
   s   ArD   )	__doc__tempfiler   r   r   r   numba.core.errorsr   rD   r,   r,   r,   r-   <module>   s    