Current File : //kunden/usr/share/gdb/python/gdb/__pycache__/disassembler.cpython-39.pyc
a

ɱZh8�@s^dZddlZddlZddlTiZGdd�de�Zddd�Zdd	�ZGd
d�dej	�Z
e
�dS)
zDisassembler related module.�N)�*c@s eZdZdZdd�Zdd�ZdS)�DisassemblerzLA base class from which all user implemented disassemblers must
    inherit.cCs
||_dS)z�Constructor.  Takes a name, which should be a string, which can be
        used to identify this disassembler in diagnostic messages.N)�name)�selfr�r�)/usr/share/gdb/python/gdb/disassembler.py�__init__.szDisassembler.__init__cCstd��dS)z�A default implementation of __call__.  All sub-classes must
        override this method.  Calling this default implementation will throw
        a NotImplementedError exception.�Disassembler.__call__N)�NotImplementedError)r�inforrr�__call__3sr	N)�__name__�
__module__�__qualname__�__doc__rrrrrrr*srcCs\t|t�s|durtd��d}|tvr4t|}t|=|durD|t|<tj�tt�dk�|S)a�Register a disassembler.  DISASSEMBLER is a sub-class of
    gdb.disassembler.Disassembler.  ARCHITECTURE is either None or a
    string, the name of an architecture known to GDB.

    DISASSEMBLER is registered as a disassembler for ARCHITECTURE, or
    all architectures when ARCHITECTURE is None.

    Returns the previous disassembler registered with this
    ARCHITECTURE value.
    Nz;disassembler should sub-class gdb.disassembler.Disassemblerr)�
isinstancer�	TypeError�_disassemblers_dict�_gdb�disassemblerZ_set_enabled�len)r�architecture�oldrrr�register_disassembler:srcCs&dd�}||j�}|durdS||�S)z�This function is called by GDB when it wants to disassemble an
    instruction.  INFO describes the instruction to be
    disassembled.cSsTz@|��}|durWdS|tvr*t|WSdtvr<tdWSWdSYdS0dS)N)rr)Zarchrrrr�lookup_disassembler_s

z(_print_insn.<locals>.lookup_disassemblerN)r)rrrrrr�_print_insnZs

rcs(eZdZdZ�fdd�Zdd�Z�ZS)�maint_info_py_disassemblers_cmda�
    List all registered Python disassemblers.

    List the name of all registered Python disassemblers, next to the
    name of the architecture for which the disassembler is registered.

    The global Python disassembler is listed next to the string
    'GLOBAL'.

    The disassembler that matches the architecture of the currently
    selected inferior will be marked, this is an indication of which
    disassembler will be invoked if any disassembly is performed in
    the current inferior.
    cst��dtj�dS)Nz%maintenance info python-disassemblers)�superr�gdbZCOMMAND_USER)r��	__class__rrr�sz(maint_info_py_disassemblers_cmd.__init__c
Cs
tt�dkrtd�dSd}tD]*}|dur t|j}t|�|kr t|�}q d}t��durlt������}d}t|td��}dt|�d}	t|	�	dd��tD]:}|dur�t|j}||kr�||7}d}t|	�	||��q�dtv�rtdj|}t|	�	d	|��dS)
Nrz#No Python disassemblers registered.�z	(Matches current architecture)ZArchitecturez{:zs} {:s}zDisassember NameZGLOBAL)
rr�printrrZselected_inferiorr�max�str�format)
r�argsZfrom_ttyZlongest_arch_namerrZ	curr_archZ	match_tagZfmt_len�
format_stringrrr�invoke�s4



z&maint_info_py_disassemblers_cmd.invoke)r
rrrrr(�
__classcell__rrrrrvsr)N)rrZ_gdb.disassemblerrr�objectrrrZCommandrrrrr�<module>s
 <