#include "server/gdb_server.h"
-static long long current_threadid = -1;
+static int64_t current_threadid = -1;
static void hex_to_str( char* dst, char * hex_src );
static int str_to_hex( char* hex_dst, char* src );
/* RTOSs */
extern struct rtos_type FreeRTOS_rtos;
extern struct rtos_type ThreadX_rtos;
+extern struct rtos_type eCos_rtos;
static struct rtos_type *rtos_types[] =
{
&ThreadX_rtos,
&FreeRTOS_rtos,
+ &eCos_rtos,
NULL
};
}
else
{
- long long value = 0;
+ int64_t value = 0;
char * hex_name_str = malloc( strlen(packet));
char * name_str;
int symbol_num;
char* found = strstr( packet, "qSymbol::" );
- int numconv;
if (0 == found )
{
- numconv =sscanf(packet, "qSymbol:%" SCNx64 ":%s", &value, hex_name_str);
+ sscanf(packet, "qSymbol:%" SCNx64 ":%s", &value, hex_name_str);
}
else
{
// No value returned by GDB - symbol was not found
- numconv =sscanf(packet, "qSymbol::%s", hex_name_str);
+ sscanf(packet, "qSymbol::%s", hex_name_str);
}
name_str = (char*) malloc( 1+ strlen(hex_name_str) / 2 );
}
else if (strstr(packet, "qC"))
{
- gdb_put_packet(connection, "QC0", 3);
+ if( target->rtos!=NULL )
+ {
+ char buffer[15];
+ int size;
+ size = snprintf(buffer, 15, "QC%08X", (int)target->rtos->current_thread);
+ gdb_put_packet(connection, buffer, size);
+ }
+ else
+ {
+ gdb_put_packet(connection, "QC0", 3);
+ }
return ERROR_OK;
}
else if ( packet[0] == 'T' ) // Is thread alive?
int rtos_get_gdb_reg_list(struct connection *connection, struct target *target, struct reg **reg_list[], int *reg_list_size)
{
if ( ( target->rtos != NULL ) &&
- ( current_threadid != 1 ) &&
+ ( current_threadid != -1 ) &&
( current_threadid != 0 ) &&
( current_threadid != target->rtos->current_thread ) )
{
-int rtos_generic_stack_read( struct target * target, const struct rtos_register_stacking* stacking, long long stack_ptr, char ** hex_reg_list )
+int rtos_generic_stack_read( struct target * target, const struct rtos_register_stacking* stacking, int64_t stack_ptr, char ** hex_reg_list )
{
int list_size = 0;
char * tmp_str_ptr;
- long long new_stack_ptr;
+ int64_t new_stack_ptr;
int i;
int retval;
{
address -= stacking->stack_registers_size;
}
- retval = target_read_buffer( target, stack_ptr, stacking->stack_registers_size, stack_data);
+ retval = target_read_buffer( target, address, stacking->stack_registers_size, stack_data);
if ( retval != ERROR_OK )
{
LOG_OUTPUT("Error reading stack frame from FreeRTOS thread\r\n");
}
*hex_reg_list = (char*)malloc( list_size*2 +1 );
tmp_str_ptr = *hex_reg_list;
- new_stack_ptr = stack_ptr + stacking->stack_growth_direction * stacking->stack_registers_size;
+ new_stack_ptr = stack_ptr - stacking->stack_growth_direction * stacking->stack_registers_size;
for( i = 0; i < stacking->num_output_registers; i++ )
{
int j;