Add eCos/Cortex RTOS support
[fw/openocd] / src / rtos / rtos.c
index 9a4af74920ae753735b89a95b935d7f68f8f9074..9eed08e0e1787ab05b1f890bb2de62ddc54a226c 100644 (file)
@@ -38,11 +38,13 @@ 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
 };
 
@@ -493,7 +495,7 @@ int gdb_thread_packet(struct connection *connection, struct target *target, char
 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 ) )
        {
@@ -533,7 +535,7 @@ int rtos_generic_stack_read( struct target * target, const struct rtos_register_
        {
                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");
@@ -553,7 +555,7 @@ int rtos_generic_stack_read( struct target * target, const struct rtos_register_
        }
        *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;