����JFIF��`�`�����Viewing File: /lib/python3.9/site-packages/elftools/ehabi/__pycache__/decoder.cpython-39.pyc
a

�#�_�.�@s0ddlmZGdd�de�ZGdd�de�ZdS)�)�
namedtuplec@s
eZdZdZdd�Zdd�Zdd�Zdd	�Zd
Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Z e!d;d<�Z"e"d=d>ed?�e"d=d@ed?�e"dAdBed?�e"dCdDe
d?�e"dCdEed?�e"dAdFed?�e"dGdHed?�e"dGdIed?�e"dCdJed?�e"dCdKed?�e"dCdLed?�e"dCdMed?�e"dNdOed?�e"dGdPed?�e"dCdQed?�e"dCdRed?�e"dCdSed?�e"dCdTed?�e"dSdSed?�e"dGd=ed?�e"dGdUed?�e"d=d=ed?�fZ#dVS)W�EHABIBytecodeDecodera� Decoder of a sequence of ARM exception handler abi bytecode.

        Reference:
        https://github.com/llvm/llvm-project/blob/master/llvm/tools/llvm-readobj/ARMEHABIPrinter.h
        https://developer.arm.com/documentation/ihi0038/b/

        Accessible attributes:

            mnemonic_array:
                MnemonicItem array.

        Parameters:

            bytecode_array:
                Integer array, raw data of bytecode.

    cCs||_d|_d|_|��dS�N)�_bytecode_array�_index�mnemonic_array�_decode)�selfZbytecode_array�r
�:/usr/lib/python3.9/site-packages/elftools/ehabi/decoder.py�__init__szEHABIBytecodeDecoder.__init__cCs|d|_g|_|jt|j�krx|jD]R\}}}|j|j|@|kr"|j}||�}|j}|j�t|j||�|��qq"qdS)z@ Decode bytecode array, put result into mnemonic_array.
        rN)rr�lenr�ring�append�MnemonicItem)r	�mask�value�handlerZ	start_idx�mnemonicZend_idxr
r
rr%s�zEHABIBytecodeDecoder._decodecCs.|j|j}|jd7_d|d@d>dS)N��vsp = vsp + %u�?���rr�r	Zopcoder
r
r�_decode_00xxxxxx4sz%EHABIBytecodeDecoder._decode_00xxxxxxcCs.|j|j}|jd7_d|d@d>dS)Nrzvsp = vsp - %urrrrrr
r
r�_decode_01xxxxxx;sz%EHABIBytecodeDecoder._decode_01xxxxxx)Zr0Zr1Zr2Zr3Zr4Zr5Zr6Zr7�r8Zr9Zr10�fpZip�spZlrZpccCsd|d>d|>S)Nrr
)r	�start�countr
r
r�_calculate_rangeEsz%EHABIBytecodeDecoder._calculate_rangecs&��fdd�td�D�}dd�|�S)Ncs&g|]}�d|>@dkr�j|�qS�rr)�gpr_register_names��.0�i��gpr_maskr	r
r�
<listcomp>I�z2EHABIBytecodeDecoder._printGPR.<locals>.<listcomp>� �{%s}�, ��range�join)r	r*�hitsr
r)r�	_printGPRHszEHABIBytecodeDecoder._printGPRcs&��fdd�td�D�}dd�|�S)Ncs(g|] }�d|>@dkr�t|��qSr$)�strr&��prefix�vfp_maskr
rr+Mr,z9EHABIBytecodeDecoder._print_registers.<locals>.<listcomp>r-r.r/r0)r	r8r7r3r
r6r�_print_registersLsz%EHABIBytecodeDecoder._print_registerscCsf|j|j}|jd7_|j|j}|jd7_|d>|d@d>B}|dkrTdSd|�|�SdS)Nrr��rzrefuse to unwind�pop %s)rrr4)r	Zop0�op1r*r
r
r�_decode_1000iiii_iiiiiiiiPsz.EHABIBytecodeDecoder._decode_1000iiii_iiiiiiiicCs|jd7_dS)Nrzreserved (ARM MOVrr)�r�r	r
r
r�_decode_10011101asz%EHABIBytecodeDecoder._decode_10011101cCs|jd7_dS)Nrzreserved (WiMMX MOVrr)r?r@r
r
r�_decode_10011111esz%EHABIBytecodeDecoder._decode_10011111cCs&|j|j}|jd7_d|d@S)Nrz	vsp = r%ur:rrr
r
r�_decode_1001nnnnisz%EHABIBytecodeDecoder._decode_1001nnnncCs4|j|j}|jd7_d|�|�d|d@��S)Nrr<r��rrr4r#rr
r
r�_decode_10100nnnosz%EHABIBytecodeDecoder._decode_10100nnncCs8|j|j}|jd7_d|�|�d|d@�dB�S)Nrr<rrDi@rErr
r
r�_decode_10101nnnvsz%EHABIBytecodeDecoder._decode_10101nnncCs|jd7_dS)NrZfinishr?r@r
r
r�_decode_10110000}sz%EHABIBytecodeDecoder._decode_10110000cCsV|jd7_|j|j}|jd7_|d@dks<|dkr@dSd|�|d@�SdS)Nr��r�sparer<r:)rrr4�r	r=r
r
r�_decode_10110001_0000iiii�sz.EHABIBytecodeDecoder._decode_10110001_0000iiiicCs�|jd7_|j|jg}|jd7_|j|jd@dkr`|�|j|j�|jd7_q*d}t|�D]}|d>|d@}qldd|d>S)	Nr�rrD�rir)rrr�reversed)r	Zuleb_bufferr�br
r
r�_decode_10110010_uleb128�sz-EHABIBytecodeDecoder._decode_10110010_uleb128cCs|��Sr)�_decode_11001001_ssssccccr@r
r
r�_decode_10110011_sssscccc�sz.EHABIBytecodeDecoder._decode_10110011_sssscccccCs|��Sr��_sparer@r
r
r�_decode_101101nn�sz%EHABIBytecodeDecoder._decode_101101nncCs6|j|j}|jd7_d|�|�d|d@�d�S)Nrr<�rD�d�rrr9r#rr
r
r�_decode_10111nnn�sz%EHABIBytecodeDecoder._decode_10111nnncCsX|jd7_|j|j}|jd7_|d@d?}|d@d?}d|�|�||�d�S)NrrIrr:rr<�wR�rrr9r#�r	r=r!r"r
r
r�_decode_11000110_sssscccc�sz.EHABIBytecodeDecoder._decode_11000110_sssscccccCsX|jd7_|j|j}|jd7_|d@dks<|dkr@dSd|�|d@d�SdS)NrrIrrJr<r:ZwCGR)rrr9rKr
r
r�_decode_11000111_0000iiii�sz.EHABIBytecodeDecoder._decode_11000111_0000iiiicCs\|jd7_|j|j}|jd7_d|d@d?}|d@d?}d|�|�||�d�S)	Nr�rIrr:rr<rXr\r]r
r
r�_decode_11001000_sssscccc�sz.EHABIBytecodeDecoder._decode_11001000_sssscccccCsX|jd7_|j|j}|jd7_|d@d?}|d@d?}d|�|�||�d�S)NrrIrr:rr<rXr\r]r
r
rrR�sz.EHABIBytecodeDecoder._decode_11001001_sssscccccCs|��SrrTr@r
r
r�_decode_11001yyy�sz%EHABIBytecodeDecoder._decode_11001yyycCs6|j|j}|jd7_d|�|�d|d@�d�S)Nrr<�
rDr[rYrr
r
r�_decode_11000nnn�sz%EHABIBytecodeDecoder._decode_11000nnncCs|��Sr)rZr@r
r
r�_decode_11010nnn�sz%EHABIBytecodeDecoder._decode_11010nnncCs|��SrrTr@r
r
r�_decode_11xxxyyy�sz%EHABIBytecodeDecoder._decode_11xxxyyycCs|jd7_dS)NrrJr?r@r
r
rrU�szEHABIBytecodeDecoder._spare�_DECODE_RECIPE_TYPEzmask value handler�r)rrr�@rIrM������������������������N)$�__name__�
__module__�__qualname__�__doc__rrrrr%r#r4r9r>rArBrCrFrGrHrLrQrSrVrZr^r_rarRrbrdrerfrUrrgrr
r
r
rrsl
�rc@s eZdZdZdd�Zdd�ZdS)rz Single mnemonic item.
    cCs||_||_dSr)�bytecoder)r	r�rr
r
rrszMnemonicItem.__init__cCs dd�dd�|jD��|jfS)Nz%s ; %s� cSsg|]}d|�qS)z0x%02xr
)r'�xr
r
rr+r,z)MnemonicItem.__repr__.<locals>.<listcomp>)r2r�rr@r
r
r�__repr__szMnemonicItem.__repr__N)r}r~rr�rr�r
r
r
rrsrN)�collectionsr�objectrrr
r
r
r�<module>	s	
Back to Directory �������}�!1AQa"q2���#B��R��$3br� %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�������������������������������������������������������������������������������� ������w�!1AQaq"2�B���� #3R�br� $4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������ ��?��_��+��?��(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(�����