gdb_putback_char( connection, reply );
return ERROR_OK;
} else {
-
+
LOG_ERROR("unknown character(1) 0x%2.2x in reply, dropping connection", reply);
gdb_con->closed=1;
return ERROR_SERVER_REMOTE_CLOSED;
}
- }
+ }
else if( reply == '$' ){
LOG_ERROR("GDB missing ack(2) - assumed good");
gdb_putback_char( connection, reply );
return ERROR_OK;
- }
+ }
else
{
LOG_ERROR("unknown character(2) 0x%2.2x in reply, dropping connection", reply);
{
char sig_reply[4];
int signal;
+
/* stop forwarding log packets! */
log_remove_callback(gdb_log_callback, connection);
case TARGET_EVENT_EARLY_HALTED:
gdb_frontend_halted(target, connection);
break;
+ case TARGET_EVENT_HALTED:
+ target_call_event_callbacks(target, TARGET_EVENT_GDB_END);
+ break;
case TARGET_EVENT_GDB_FLASH_ERASE_START:
target_handle_event( target, TARGET_EVENT_OLD_gdb_program_config );
if((retval = jtag_execute_queue()) != ERROR_OK)
}
target_unregister_event_callback(gdb_target_callback_event_handler, connection);
+ target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_END);
log_remove_callback(gdb_log_callback, connection);
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_DETACH );
retval = target_read_buffer(target, addr, len, buffer);
- if ((retval == ERROR_TARGET_DATA_ABORT) && (!gdb_report_data_abort))
+ if ((retval!=ERROR_OK)&&!gdb_report_data_abort)
{
/* TODO : Here we have to lie and send back all zero's lest stack traces won't work.
* At some point this might be fixed in GDB, in which case this code can be removed.
if( LOG_LEVEL_IS( LOG_LVL_DEBUG ) ){
if( packet[0] == 'X' ){
- // binary packets spew junk into the debug log stream
+ // binary packets spew junk into the debug log stream
char buf[ 50 ];
int x;
for( x = 0 ; (x < 49) && (packet[x] != ':') ; x++ ){
gdb_connection_t *gdb_con = connection->priv;
gdb_con->frontend_state = TARGET_RUNNING;
log_add_callback(gdb_log_callback, connection);
+ target_call_event_callbacks(target, TARGET_EVENT_GDB_START);
int retval=gdb_step_continue_packet(connection, target, packet, packet_size);
if (retval!=ERROR_OK)
{
int handle_gdb_port_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
if (argc == 0)
+ {
+ command_print(cmd_ctx, "%d", gdb_port);
return ERROR_OK;
+ }
/* only if the port wasn't overwritten by cmdline */
if (gdb_port == 0)
detach_mode = GDB_DETACH_NOTHING;
return ERROR_OK;
}
+ else
+ LOG_WARNING("invalid gdb_detach configuration directive: %s", args[0]);
}
- LOG_WARNING("invalid gdb_detach configuration directive: %s", args[0]);
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
int handle_gdb_memory_map_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
gdb_use_memory_map = 0;
return ERROR_OK;
}
+ else
+ LOG_WARNING("invalid gdb_memory_map configuration directive %s", args[0]);
}
- LOG_WARNING("invalid gdb_memory_map configuration directive: %s", args[0]);
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
int handle_gdb_flash_program_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
gdb_flash_program = 0;
return ERROR_OK;
}
+ else
+ LOG_WARNING("invalid gdb_flash_program configuration directive: %s", args[0]);
}
- LOG_WARNING("invalid gdb_memory_map configuration directive: %s", args[0]);
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
int handle_gdb_report_data_abort_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
gdb_report_data_abort = 0;
return ERROR_OK;
}
+ else
+ LOG_WARNING("invalid gdb_report_data_abort configuration directive: %s", args[0]);
}
- LOG_WARNING("invalid gdb_report_data_abort configuration directive: %s", args[0]);
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
-/* daemon configuration command gdb_port */
+/* gdb_breakpoint_override */
int handle_gdb_breakpoint_override_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
if (argc == 0)
int gdb_register_commands(command_context_t *command_context)
{
register_command(command_context, NULL, "gdb_port", handle_gdb_port_command,
- COMMAND_CONFIG, "");
+ COMMAND_CONFIG, "daemon configuration command gdb_port");
register_command(command_context, NULL, "gdb_detach", handle_gdb_detach_command,
COMMAND_CONFIG, "");
register_command(command_context, NULL, "gdb_memory_map", handle_gdb_memory_map_command,
- COMMAND_CONFIG, "");
+ COMMAND_CONFIG, "enable or disable memory map");
register_command(command_context, NULL, "gdb_flash_program", handle_gdb_flash_program_command,
- COMMAND_CONFIG, "");
+ COMMAND_CONFIG, "enable or disable flash program");
register_command(command_context, NULL, "gdb_report_data_abort", handle_gdb_report_data_abort_command,
- COMMAND_CONFIG, "");
+ COMMAND_CONFIG, "enable or disable report data");
register_command(command_context, NULL, "gdb_breakpoint_override", handle_gdb_breakpoint_override_command,
COMMAND_EXEC, "hard/soft/disabled - force breakpoint type for gdb 'break' commands."
"The raison d'etre for this option is to support GDB GUI's without "