minor cleanup
[fw/openocd] / src / server / gdb_server.c
index 6dcd493b42ebdeb58b9fa952849854b31b85e760..ea6f6b75aa7ad2242b28298526d01cc18f009996 100644 (file)
@@ -394,17 +394,17 @@ int gdb_put_packet_inner(connection_t *connection, char *buffer, int len)
                                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);
@@ -671,6 +671,7 @@ static void gdb_frontend_halted(struct target_s *target, connection_t *connectio
        {
                char sig_reply[4];
                int signal;
+
                /* stop forwarding log packets! */
                log_remove_callback(gdb_log_callback, connection);
 
@@ -701,6 +702,9 @@ int gdb_target_callback_event_handler(struct target_s *target, enum target_event
                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)
@@ -815,6 +819,7 @@ int gdb_connection_closed(connection_t *connection)
        }
 
        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 );
@@ -1138,7 +1143,7 @@ int gdb_read_memory_packet(connection_t *connection, target_t *target, char *pac
 
        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.
@@ -1985,7 +1990,7 @@ int gdb_input_inner(connection_t *connection)
 
                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++ ){
@@ -2054,6 +2059,7 @@ int gdb_input_inner(connection_t *connection)
                                                        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)
                                                        {
@@ -2177,7 +2183,10 @@ int gdb_init(void)
 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)
@@ -2210,10 +2219,11 @@ int handle_gdb_detach_command(struct command_context_s *cmd_ctx, char *cmd, char
                        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)
@@ -2230,10 +2240,11 @@ int handle_gdb_memory_map_command(struct command_context_s *cmd_ctx, char *cmd,
                        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)
@@ -2250,10 +2261,11 @@ int handle_gdb_flash_program_command(struct command_context_s *cmd_ctx, char *cm
                        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)
@@ -2270,13 +2282,14 @@ int handle_gdb_report_data_abort_command(struct command_context_s *cmd_ctx, char
                        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)
@@ -2314,15 +2327,15 @@ int handle_gdb_breakpoint_override_command(struct command_context_s *cmd_ctx, ch
 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 "