Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: 2f489fd1d551808a0e1be67c54ace85d3452e04b (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                               
                                                                 






                                                                         
                                                                               




                                  
                       



















                                                                   

                                                                         



















                                                                     

                                                                             






                                                                



                                                                             

                                                                  

                                                                           













                                                              

                                                                         


            
 












                                                         
 



                                         
                                                             


                                      
                            






                                    





                                    







                                          

                                                                          





                                                           
# *****************************************************************************
# * Copyright (c) 2011, 2013 Wind River Systems, Inc. and others.
# * All rights reserved. This program and the accompanying materials
# * are made available under the terms of the Eclipse Public License v1.0
# * which accompanies this distribution, and is available at
# * http://www.eclipse.org/legal/epl-v10.html
# *
# * Contributors:
# *     Wind River Systems - initial API and implementation
# *****************************************************************************

"""
TCF Disassembly service interface.
"""

from .. import services

NAME = "Disassembly"

# The name of the instruction set architecture, String
CAPABILITY_ISA = "ISA"

# If true, simplified mnemonics are supported or requested, Boolean
CAPABILITY_SIMPLIFIED = "Simplified"

# If true, pseudo-instructions are supported or requested, Boolean
CAPABILITY_PSEUDO = "Pseudo"


# Instruction field properties
# The type of the instruction field. See FTYPE_*, String.
FIELD_TYPE = "Type"

# Value of the field for "String" and "Register" types, String.
FIELD_TEXT = "Text"

# Value of the field for "Address," "Displacement," or "Immediate" types,
# Number.
FIELD_VALUE = "Value"

# Context ID of the address space used with "Address" types, String.
FIELD_ADDRESS_SPACE = "AddressSpace"

# Instruction field types
FTYPE_STRING = "String"
FTYPE_Register = "Register"
FTYPE_ADDRESS = "Address"
FTYPE_DISPLACEMENT = "Displacement"
FTYPE_IMMEDIATE = "Immediate"


class DisassemblyService(services.Service):
    def getName(self):
        return NAME

    def getCapabilities(self, context_id, done):
        """
        Retrieve disassembly service capabilities a given context-id.
        @param context_id - a context ID, usually one returned by Run Control
                            or Memory services.
        @param done - command result call back object.
        @return - pending command handle.
        """
        raise NotImplementedError("Abstract method")

    def disassemble(self, context_id, addr, size, params, done):
        """
        Disassemble instruction code from a specified range of memory
        addresses, in a specified context.
        @param context_id - a context ID, usually one returned by Run Control
                            or Memory services.
        @param addr - address of first instruction to disassemble.
        @param size - size in bytes of the address range.
        @param params - properties to control the disassembly output, an
                        element of capabilities array, see getCapabilities.
        @param done - command result call back object.
        @return - pending command handle.
        """


class DoneGetCapabilities(object):
    """
    Call back interface for 'getCapabilities' command.
    """
    def doneGetCapabilities(self, token, error, capabilities):
        """
        Called when capabilities retrieval is done.
        @param token - command handle.
        @param error - error object or None.
        @param capabilities - array of capabilities, see CAPABILITY_* for
                              contents of each array element.
        """
        pass


class DoneDisassemble(object):
    """
    Call back interface for 'disassemble' command.
    """
    def doneDisassemble(self, token, error, disassembly):
        """
        Called when disassembling is done.
        @param token - command handle.
        @param error - error object or None.
        @param disassembly - array of disassembly lines.
        """
        pass


class DisassemblyLine(object):
    """
    Represents a single disassembly line.
    """
    def __init__(self, addr, size, instruction, opcode=None):
        self.addr = addr
        self.size = size or 0
        self.instruction = instruction
        self.opcode = opcode

    def getAddress(self):
        """
        @return instruction address.
        """
        return self.addr

    def getOpcodeValue(self):
        """
        @return instruction address.
        """
        return self.opcode

    def getSize(self):
        """
        @return instruction size in bytes.
        """
        return self.size

    def getInstruction(self):
        """
        @return array of instruction fields, each field is a collection of
                field properties, see FIELD_*.
        """
        return self.instruction

    def __str__(self):
        instr = "".join(map(str, self.instruction))
        return "[%s %s %s]" % (self.addr, self.size, instr)

Back to the top