cmd: add missing usage vars
[fw/openocd] / src / server / gdb_server.c
index cbc2b401c37596cd8134ea8b313dd2acf9d1ada9..0cbd8e650b893203f6fe61e905542d9c7fd9150b 100644 (file)
@@ -44,7 +44,6 @@
 #include "rtos/rtos.h"
 #include "target/smp.h"
 
-
 /**
  * @file
  * GDB server implementation.
@@ -77,7 +76,6 @@ struct gdb_connection
        bool mem_write_error;
 };
 
-
 #if 0
 #define _DEBUG_GDB_IO_
 #endif
@@ -245,9 +243,7 @@ static int gdb_get_char_inner(struct connection *connection, int* next_char)
        }
 
 #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
@@ -389,9 +385,7 @@ static int gdb_put_packet_inner(struct connection *connection,
        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
@@ -842,6 +836,11 @@ static int gdb_new_connection(struct connection *connection)
        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;
@@ -875,9 +874,9 @@ static int gdb_new_connection(struct connection *connection)
 
        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
@@ -1045,8 +1044,8 @@ static int gdb_get_registers_packet(struct connection *connection,
        LOG_DEBUG("-");
 #endif
 
-       if ( ( target->rtos != NULL ) &&
-                ( ERROR_FAIL != rtos_get_gdb_reg_list( connection, &reg_list, &reg_list_size) ) )
+       if ((target->rtos != NULL) &&
+                (ERROR_OK == rtos_get_gdb_reg_list(connection)))
        {
                return ERROR_OK;
        }
@@ -1058,12 +1057,12 @@ static int gdb_get_registers_packet(struct connection *connection,
 
        for (i = 0; i < reg_list_size; i++)
        {
-               reg_packet_size += reg_list[i]->size;
+               reg_packet_size += DIV_ROUND_UP(reg_list[i]->size, 8) * 2;
        }
 
        assert(reg_packet_size > 0);
 
-       reg_packet = malloc(DIV_ROUND_UP(reg_packet_size, 8) * 2);
+       reg_packet = malloc(reg_packet_size);
        reg_packet_p = reg_packet;
 
        for (i = 0; i < reg_list_size; i++)
@@ -1076,14 +1075,14 @@ static int gdb_get_registers_packet(struct connection *connection,
 
 #ifdef _DEBUG_GDB_IO_
        {
-               char *reg_packet_p;
-               reg_packet_p = strndup(reg_packet, DIV_ROUND_UP(reg_packet_size, 8) * 2);
-               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
 
-       gdb_put_packet(connection, reg_packet, DIV_ROUND_UP(reg_packet_size, 8) * 2);
+       gdb_put_packet(connection, reg_packet, reg_packet_size);
        free(reg_packet);
 
        free(reg_list);
@@ -2262,6 +2261,7 @@ static int gdb_input_inner(struct connection *connection)
                                case 'c':
                                case 's':
                                        {
+                                               gdb_thread_packet(connection, packet, packet_size);
                                                log_add_callback(gdb_log_callback, connection);
 
                                                if (gdb_con->mem_write_error)
@@ -2359,6 +2359,8 @@ static int gdb_input_inner(struct connection *connection)
                                        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;
 
@@ -2601,6 +2603,7 @@ static const struct command_registration gdb_command_handlers[] = {
                .help = "next stepi will return immediately allowing "
                        "GDB to fetch register state without affecting "
                        "target state",
+               .usage = ""
        },
        {
                .name = "gdb_port",