a
    öDf                     @   s   d dl Z d dlZd dlZd dlZd dlZddlmZmZ edZ	edZ
edZedZdd	 Zd
d Ze  dddZdd ZdS )    N   )path_to_cuobjdumppath_to_nvdisasmz1\s*/\*\w{4}\*/\s*([^;]*;)\s*/\* 0x(\w{16}) \*/\s*z\s*/\* 0x(\w{16}) \*/\s*z\s*Function : (\w+)\s*z(.*BRA(?:\.U)? )(0x\w+);c              
   C   s   t t| dd}|d? d@ }|d? d@ }|d? d@ }|d? d@ }|d	? d
@ }|dkr^dnd}|dkrndnt|}|dkrdnt|}	|dkrdn|d}
|
 d|	 d| d| d|d	S )N      )      -   .      1   4   ?   r   Y-z--Z02d:x)intSLINE_REmatchgroupstr)slineencZstallZyldZwrtdbZreadbZwatdbZyld_strZ	wrtdb_strZ	readb_strZ	watdb_str r   `/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/triton/tools/disasm.py	parseCtrl%   s    r   c                 C   sx   t | d}|dr*|d d d }t|}t|d urltt|dd}||v r`nt|||< | | fS )Nr   z ;;r   r   )FLINE_REr   r   endswithr   BRA_REr   len)fliner   labelsasmctrltargetr   r   r   processSassLines4   s    
r(   c              	   C   sj   t  \}}zLt|d}||  W d    n1 s80    Y  t||}W t| nt| 0 |S )Nwb)tempfilemkstempopenwriteextractosremove)Z	cubin_asmfunfdpathZcubinZsassr   r   r   get_sassD   s    (r4   c                 C   s  t  \}}t \}}|tjd< |d u r8t|d| g}nt|d|d| g}| }d}|t|k r||  }t	
|d u r|d7 }|t|k r||  }qrd S qrt	
|d}	d}
|
d|	 d7 }
|d	7 }||  }i }g }t
|d ur@||  }|d7 }||  }|d7 }|t||| ||  }qt|D ]\}\}}|d
 }||v rd||  }|
| d7 }
|
|d 7 }
t
|rtt
|d	d
}d||  }td| d|}|
|d 7 }
qH|
d7 }
|
S d S )NZNVDISASM_PATHz-sassz-funr   r    z	Function:
r   r   ZLBBz:
	z\1r   )r   r   r/   environ
subprocesscheck_output
splitlinesr"   decodeFNAME_REr   r   r   appendr(   	enumerater!   r   sub)	file_pathr1   Z	cuobjdump_ZnvdisasmZsass_strZ
sass_linesZline_idxlinefnameretr$   Z
asm_bufferr#   r   idxr&   r%   offsetZ
label_namer'   Ztarget_namer   r   r   r.   P   sT    



r.   )N)	functoolsr/   rer9   r*   Zcommon.backendr   r   compiler   r   r=   r!   r   r(   	lru_cacher4   r.   r   r   r   r   <module>   s   



