示例#1
0
 def __init__(self, board, port_urlWSS):
     threading.Thread.__init__(self)
     self.board = board
     self.target = board.target
     self.flash = board.flash
     self.abstract_socket = None
     self.wss_server = None
     self.port = 0
     if isinstance(port_urlWSS, str) == True:
         self.wss_server = port_urlWSS
     else:
         self.port = port_urlWSS
     self.packet_size = 2048
     self.flashData = list()
     self.conn = None
     self.lock = threading.Lock()
     self.shutdown_event = threading.Event()
     self.detach_event = threading.Event()
     self.quit = False
     if self.wss_server == None:
         self.abstract_socket = GDBSocket(self.port, self.packet_size)
     else:
         self.abstract_socket = GDBWebSocket(self.wss_server)
     self.setDaemon(True)
     self.start()
示例#2
0
 def __init__(self, board, port_urlWSS, options = {}):
     threading.Thread.__init__(self)
     self.board = board
     self.target = board.target
     self.flash = board.flash
     self.abstract_socket = None
     self.wss_server = None
     self.port = 0
     if isinstance(port_urlWSS, str) == True:
         self.wss_server = port_urlWSS
     else:
         self.port = port_urlWSS
     self.break_at_hardfault = bool(options.get('break_at_hardfault', True))
     self.board.target.setVectorCatchFault(self.break_at_hardfault)
     self.break_on_reset = options.get('break_on_reset', False)
     self.board.target.setVectorCatchReset(self.break_on_reset)
     self.step_into_interrupt = options.get('step_into_interrupt', False)
     self.persist = options.get('persist', False)
     self.packet_size = 2048
     self.flashData = list()
     self.flashOffset = None
     self.conn = None
     self.lock = threading.Lock()
     self.shutdown_event = threading.Event()
     self.detach_event = threading.Event()
     self.quit = False
     if self.wss_server == None:
         self.abstract_socket = GDBSocket(self.port, self.packet_size)
     else:
         self.abstract_socket = GDBWebSocket(self.wss_server)
     self.setDaemon(True)
     self.start()
示例#3
0
 def __init__(self, board, port_urlWSS, options = {}):
     threading.Thread.__init__(self)
     self.board = board
     self.target = board.target
     self.flash = board.flash
     self.abstract_socket = None
     self.wss_server = None
     self.port = 0
     if isinstance(port_urlWSS, str) == True:
         self.wss_server = port_urlWSS
     else:
         self.port = port_urlWSS
     self.break_at_hardfault = bool(options.get('break_at_hardfault', True))
     self.board.target.setVectorCatchFault(self.break_at_hardfault)
     self.break_on_reset = options.get('break_on_reset', False)
     self.board.target.setVectorCatchReset(self.break_on_reset)
     self.step_into_interrupt = options.get('step_into_interrupt', False)
     self.persist = options.get('persist', False)
     self.soft_bkpt_as_hard = options.get('soft_bkpt_as_hard', False)
     self.chip_erase = options.get('chip_erase', None)
     self.hide_programming_progress = options.get('hide_programming_progress', False)
     self.fast_program = options.get('fast_program', False)
     self.packet_size = 2048
     self.packet_io = None
     self.gdb_features = []
     self.flashBuilder = None
     self.lock = threading.Lock()
     self.shutdown_event = threading.Event()
     self.detach_event = threading.Event()
     if self.wss_server == None:
         self.abstract_socket = GDBSocket(self.port, self.packet_size)
     else:
         self.abstract_socket = GDBWebSocket(self.wss_server)
     self.setDaemon(True)
     self.start()
示例#4
0
    def __init__(self, board, port_urlWSS, options={}):
        threading.Thread.__init__(self)
        self.board = board
        self.target = board.target
        self.flash = board.flash
        self.abstract_socket = None
        self.wss_server = None
        self.port = 0
        if isinstance(port_urlWSS, str) == True:
            self.wss_server = port_urlWSS
        else:
            self.port = port_urlWSS
        self.break_at_hardfault = bool(options.get('break_at_hardfault', True))
        self.board.target.setVectorCatchFault(self.break_at_hardfault)
        self.break_on_reset = options.get('break_on_reset', False)
        self.board.target.setVectorCatchReset(self.break_on_reset)
        self.step_into_interrupt = options.get('step_into_interrupt', False)
        self.persist = options.get('persist', False)
        self.soft_bkpt_as_hard = options.get('soft_bkpt_as_hard', False)
        self.chip_erase = options.get('chip_erase', None)
        self.hide_programming_progress = options.get(
            'hide_programming_progress', False)
        self.fast_program = options.get('fast_program', False)
        self.enable_semihosting = options.get('enable_semihosting', False)
        self.telnet_port = options.get('telnet_port', 4444)
        self.semihost_use_syscalls = options.get('semihost_use_syscalls',
                                                 False)
        self.server_listening_callback = options.get(
            'server_listening_callback', None)
        self.packet_size = 2048
        self.packet_io = None
        self.gdb_features = []
        self.non_stop = False
        self.is_target_running = (self.target.getState() == TARGET_RUNNING)
        self.flashBuilder = None
        self.lock = threading.Lock()
        self.shutdown_event = threading.Event()
        self.detach_event = threading.Event()
        if self.wss_server == None:
            self.abstract_socket = GDBSocket(self.port, self.packet_size)
        else:
            self.abstract_socket = GDBWebSocket(self.wss_server)

        # Init semihosting and telnet console.
        if self.semihost_use_syscalls:
            semihost_io_handler = GDBSyscallIOHandler(self)
        else:
            # Use internal IO handler.
            semihost_io_handler = semihost.InternalSemihostIOHandler()
        self.telnet_console = semihost.TelnetSemihostIOHandler(
            self.telnet_port)
        self.semihost = semihost.SemihostAgent(self.target,
                                               io_handler=semihost_io_handler,
                                               console=self.telnet_console)

        self.setDaemon(True)
        self.start()
示例#5
0
    def __init__(self, board, port_urlWSS, options={}):
        threading.Thread.__init__(self)
        self.board = board
        self.target = board.target
        self.log = logging.getLogger('gdbserver')
        self.flash = board.flash
        self.abstract_socket = None
        self.wss_server = None
        self.port = 0
        if isinstance(port_urlWSS, str) == True:
            self.wss_server = port_urlWSS
        else:
            self.port = port_urlWSS
        self.vector_catch = options.get('vector_catch', Target.CATCH_HARD_FAULT)
        self.board.target.setVectorCatch(self.vector_catch)
        self.step_into_interrupt = options.get('step_into_interrupt', False)
        self.persist = options.get('persist', False)
        self.soft_bkpt_as_hard = options.get('soft_bkpt_as_hard', False)
        self.chip_erase = options.get('chip_erase', None)
        self.hide_programming_progress = options.get('hide_programming_progress', False)
        self.fast_program = options.get('fast_program', False)
        self.enable_semihosting = options.get('enable_semihosting', False)
        self.telnet_port = options.get('telnet_port', 4444)
        self.semihost_use_syscalls = options.get('semihost_use_syscalls', False)
        self.server_listening_callback = options.get('server_listening_callback', None)
        self.serve_local_only = options.get('serve_local_only', True)
        self.packet_size = 2048
        self.packet_io = None
        self.gdb_features = []
        self.non_stop = False
        self.is_target_running = (self.target.getState() == Target.TARGET_RUNNING)
        self.flashBuilder = None
        self.lock = threading.Lock()
        self.shutdown_event = threading.Event()
        self.detach_event = threading.Event()
        self.target_context = self.target.getTargetContext()
        self.target_facade = GDBDebugContextFacade(self.target_context)
        self.thread_provider = None
        self.did_init_thread_providers = False
        self.current_thread_id = 0
        if self.wss_server == None:
            self.abstract_socket = GDBSocket(self.port, self.packet_size)
            if self.serve_local_only:
                self.abstract_socket.host = 'localhost'
        else:
            self.abstract_socket = GDBWebSocket(self.wss_server)

        # Init semihosting and telnet console.
        if self.semihost_use_syscalls:
            semihost_io_handler = GDBSyscallIOHandler(self)
        else:
            # Use internal IO handler.
            semihost_io_handler = semihost.InternalSemihostIOHandler()
        self.telnet_console = semihost.TelnetSemihostIOHandler(self.telnet_port, self.serve_local_only)
        self.semihost = semihost.SemihostAgent(self.target_context, io_handler=semihost_io_handler, console=self.telnet_console)

        # Command handler table.
        #
        # The dict keys are the first character of the incoming command from gdb. Values are a
        # bi-tuple. The first element is the handler method, and the second element is the start
        # offset of the command string passed to the handler.
        #
        # Start offset values:
        #  0 - Special case: handler method does not take any parameters.
        #  1 - Strip off leading "$" from command.
        #  2 - Strip leading "$" plus character matched through this table.
        #  3+ - Supported, but not very useful.
        #
        self.COMMANDS = {
        #       CMD    HANDLER                  START    DESCRIPTION
                '?' : (self.stopReasonQuery,    0   ), # Stop reason query.
                'C' : (self.resume,             1   ), # Continue (at addr)
                'c' : (self.resume,             1   ), # Continue with signal.
                'D' : (self.detach,             1   ), # Detach.
                'g' : (self.getRegisters,       0   ), # Read general registers.
                'G' : (self.setRegisters,       2   ), # Write general registers.
                'H' : (self.setThread,          2   ), # Set thread for subsequent operations.
                'k' : (self.kill,               0   ), # Kill.
                'm' : (self.getMemory,          2   ), # Read memory.
                'M' : (self.writeMemoryHex,     2   ), # Write memory (hex).
                'p' : (self.readRegister,       2   ), # Read register.
                'P' : (self.writeRegister,      2   ), # Write register.
                'q' : (self.handleQuery,        2   ), # General query.
                'Q' : (self.handleGeneralSet,   2   ), # General set.
                's' : (self.step,               1   ), # Single step.
                'S' : (self.step,               1   ), # Step with signal.
                'T' : (self.isThreadAlive,      1   ), # Thread liveness query.
                'v' : (self.vCommand,           2   ), # v command.
                'X' : (self.writeMemory,        2   ), # Write memory (binary).
                'z' : (self.breakpoint,         1   ), # Insert breakpoint/watchpoint.
                'Z' : (self.breakpoint,         1   ), # Remove breakpoint/watchpoint.
            }

        # Commands that kill the connection to gdb.
        self.DETACH_COMMANDS = ('D', 'k')

        self.setDaemon(True)
        self.start()
示例#6
0
    def __init__(self, board, port_urlWSS, options={}):
        threading.Thread.__init__(self)
        self.board = board
        self.target = board.target
        self.flash = board.flash
        self.abstract_socket = None
        self.wss_server = None
        self.port = 0
        if isinstance(port_urlWSS, str) == True:
            self.wss_server = port_urlWSS
        else:
            self.port = port_urlWSS
        self.break_at_hardfault = bool(options.get('break_at_hardfault', True))
        self.break_on_reset = options.get('break_on_reset', False)
        self.vector_catch = options.get('vector_catch', 'h')
        mask = ((Target.CATCH_HARD_FAULT if ('h' in self.vector_catch or self.break_at_hardfault) else 0) \
                | (Target.CATCH_BUS_FAULT if 'b' in self.vector_catch else 0) \
                | (Target.CATCH_MEM_FAULT if 'm' in self.vector_catch else 0) \
                | (Target.CATCH_INTERRUPT_ERR if 'i' in self.vector_catch else 0) \
                | (Target.CATCH_STATE_ERR if 's' in self.vector_catch else 0) \
                | (Target.CATCH_CHECK_ERR if 'c' in self.vector_catch else 0) \
                | (Target.CATCH_COPROCESSOR_ERR if 'p' in self.vector_catch else 0) \
                | (Target.CATCH_CORE_RESET if ('r' in self.vector_catch or self.break_on_reset) else 0) \
                | (Target.CATCH_ALL if 'a' in self.vector_catch else 0))
        self.board.target.setVectorCatch(mask)
        self.step_into_interrupt = options.get('step_into_interrupt', False)
        self.persist = options.get('persist', False)
        self.soft_bkpt_as_hard = options.get('soft_bkpt_as_hard', False)
        self.chip_erase = options.get('chip_erase', None)
        self.hide_programming_progress = options.get(
            'hide_programming_progress', False)
        self.fast_program = options.get('fast_program', False)
        self.enable_semihosting = options.get('enable_semihosting', False)
        self.telnet_port = options.get('telnet_port', 4444)
        self.semihost_use_syscalls = options.get('semihost_use_syscalls',
                                                 False)
        self.server_listening_callback = options.get(
            'server_listening_callback', None)
        self.serve_local_only = options.get('serve_local_only', True)
        self.packet_size = 2048
        self.packet_io = None
        self.gdb_features = []
        self.non_stop = False
        self.is_target_running = (
            self.target.getState() == Target.TARGET_RUNNING)
        self.flashBuilder = None
        self.lock = threading.Lock()
        self.shutdown_event = threading.Event()
        self.detach_event = threading.Event()
        if self.wss_server == None:
            self.abstract_socket = GDBSocket(self.port, self.packet_size)
            if self.serve_local_only:
                self.abstract_socket.host = 'localhost'
        else:
            self.abstract_socket = GDBWebSocket(self.wss_server)

        # Init semihosting and telnet console.
        if self.semihost_use_syscalls:
            semihost_io_handler = GDBSyscallIOHandler(self)
        else:
            # Use internal IO handler.
            semihost_io_handler = semihost.InternalSemihostIOHandler()
        self.telnet_console = semihost.TelnetSemihostIOHandler(
            self.telnet_port, self.serve_local_only)
        self.semihost = semihost.SemihostAgent(self.target,
                                               io_handler=semihost_io_handler,
                                               console=self.telnet_console)

        self.setDaemon(True)
        self.start()