#include "rtos/rtos.h"
#include "target/smp.h"
-
/**
* @file
* GDB server implementation.
bool mem_write_error;
};
-
#if 0
#define _DEBUG_GDB_IO_
#endif
}
#ifdef _DEBUG_GDB_IO_
- debug_buffer = malloc(gdb_con->buf_cnt + 1);
- memcpy(debug_buffer, gdb_con->buffer, gdb_con->buf_cnt);
- debug_buffer[gdb_con->buf_cnt] = 0;
+ debug_buffer = strndup(gdb_con->buffer, gdb_con->buf_cnt);
LOG_DEBUG("received '%s'", debug_buffer);
free(debug_buffer);
#endif
while (1)
{
#ifdef _DEBUG_GDB_IO_
- debug_buffer = malloc(len + 1);
- memcpy(debug_buffer, buffer, len);
- debug_buffer[len] = 0;
+ debug_buffer = strndup(buffer, len);
LOG_DEBUG("sending packet '$%s#%2.2x'", debug_buffer, my_checksum);
free(debug_buffer);
#endif
breakpoint_clear_target(gdb_service->target);
watchpoint_clear_target(gdb_service->target);
+ /* clean previous rtos session if supported*/
+ if ((gdb_service->target->rtos) &&
+ (gdb_service->target->rtos->type->clean))
+ gdb_service->target->rtos->type->clean(gdb_service->target);
+
/* remove the initial ACK from the incoming buffer */
if ((retval = gdb_get_char(connection, &initial_ack)) != ERROR_OK)
return retval;
gdb_actual_connections++;
LOG_DEBUG("New GDB Connection: %d, Target %s, state: %s",
- gdb_actual_connections,
- target_name(gdb_service->target),
- target_state_name(gdb_service->target));
+ gdb_actual_connections,
+ target_name(gdb_service->target),
+ target_state_name(gdb_service->target));
/* DANGER! If we fail subsequently, we must remove this handler,
* otherwise we occasionally see crashes as the timer can invoke the
LOG_DEBUG("-");
#endif
- if ( ( target->rtos != NULL ) &&
- ( ERROR_FAIL != rtos_get_gdb_reg_list( connection, ®_list, ®_list_size) ) )
+ if ((target->rtos != NULL) &&
+ (ERROR_OK == rtos_get_gdb_reg_list(connection)))
{
return ERROR_OK;
}
#ifdef _DEBUG_GDB_IO_
{
- char *reg_packet_p;
- reg_packet_p = strndup(reg_packet, reg_packet_size);
- LOG_DEBUG("reg_packet: %s", reg_packet_p);
- free(reg_packet_p);
+ char *reg_packet_p_debug;
+ reg_packet_p_debug = strndup(reg_packet, reg_packet_size);
+ LOG_DEBUG("reg_packet: %s", reg_packet_p_debug);
+ free(reg_packet_p_debug);
}
#endif
case 'c':
case 's':
{
+ gdb_thread_packet(connection, packet, packet_size);
log_add_callback(gdb_log_callback, connection);
if (gdb_con->mem_write_error)
command_run_linef(connection->cmd_ctx,
"ocd_gdb_restart %s",
target_name(target));
+ /* info rtos parts */
+ gdb_thread_packet(connection, packet, packet_size);
gdb_put_packet(connection, "OK", 2);
break;