server: remove useless declarations
[fw/openocd] / src / server / gdb_server.c
index 44d9de8381222f8454428a8d6107d915838702f5..284def3ca755827f509602e7bc5a2e05cf3f6586 100644 (file)
@@ -52,17 +52,6 @@ static const char *DIGITS = "0123456789abcdef";
 static void gdb_log_callback(void *priv, const char *file, int line,
                const char *function, const char *string);
 
-enum gdb_detach_mode
-{
-       GDB_DETACH_RESUME,
-       GDB_DETACH_RESET,
-       GDB_DETACH_HALT,
-       GDB_DETACH_NOTHING
-};
-
-/* target behaviour on gdb detach */
-enum gdb_detach_mode detach_mode = GDB_DETACH_RESUME;
-
 /* number of gdb connections, mainly to supress gdb related debugging spam
  * in helper/log.c when no gdb connections are actually active */
 int gdb_actual_connections;
@@ -714,7 +703,7 @@ int gdb_target_callback_event_handler(struct target_s *target, enum target_event
        target_handle_event(target, event);
        switch (event)
        {
-               case TARGET_EVENT_EARLY_HALTED:
+               case TARGET_EVENT_GDB_HALT:
                        gdb_frontend_halted(target, connection);
                        break;
                case TARGET_EVENT_HALTED:
@@ -1960,29 +1949,11 @@ int gdb_v_packet(connection_t *connection, target_t *target, char *packet, int p
 
 int gdb_detach(connection_t *connection, target_t *target)
 {
+       gdb_service_t *gdb_service = connection->service->priv;
 
-       switch (detach_mode)
-       {
-               case GDB_DETACH_RESUME:
-                       target_handle_event(target, TARGET_EVENT_OLD_pre_resume);
-                       target_resume(target, 1, 0, 1, 0);
-                       break;
-
-               case GDB_DETACH_RESET:
-                       /* FIX?? make this configurable?? */
-                       target_process_reset(connection->cmd_ctx, RESET_HALT);
-                       break;
-
-               case GDB_DETACH_HALT:
-                       target_halt(target);
-                       break;
-
-               case GDB_DETACH_NOTHING:
-                       break;
-       }
+       target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_DETACH);
 
-       gdb_put_packet(connection, "OK", 2);
-       return ERROR_OK;
+       return gdb_put_packet(connection, "OK", 2);
 }
 
 static void gdb_log_callback(void *priv, const char *file, int line,
@@ -2191,8 +2162,16 @@ int gdb_input_inner(connection_t *connection)
                {
                        if (target->state == TARGET_RUNNING)
                        {
-                               target_halt(target);
+                               retval = target_halt(target);
+                               if (retval != ERROR_OK)
+                               {
+                                       target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
+                               }
                                gdb_con->ctrl_c = 0;
+                       } else
+                       {
+                               LOG_INFO("The target is not running when halt was requested, stopping GDB.");
+                               target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
                        }
                }
 
@@ -2270,7 +2249,7 @@ int gdb_init(void)
        return ERROR_OK;
 }
 
-int handle_gdb_sync_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+static int handle_gdb_sync_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
        if (argc != 0)
        {
@@ -2290,51 +2269,12 @@ int handle_gdb_sync_command(struct command_context_s *cmd_ctx, char *cmd, char *
 }
 
 /* daemon configuration command gdb_port */
-int handle_gdb_port_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+static 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;
-       }
-
-       gdb_port = strtoul(args[0], NULL, 0);
-
-       return ERROR_OK;
-}
-
-int handle_gdb_detach_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
-       if (argc == 1)
-       {
-               if (strcmp(args[0], "resume") == 0)
-               {
-                       detach_mode = GDB_DETACH_RESUME;
-                       return ERROR_OK;
-               }
-               else if (strcmp(args[0], "reset") == 0)
-               {
-                       detach_mode = GDB_DETACH_RESET;
-                       return ERROR_OK;
-               }
-               else if (strcmp(args[0], "halt") == 0)
-               {
-                       detach_mode = GDB_DETACH_HALT;
-                       return ERROR_OK;
-               }
-               else if (strcmp(args[0], "nothing") == 0)
-               {
-                       detach_mode = GDB_DETACH_NOTHING;
-                       return ERROR_OK;
-               }
-               else
-                       LOG_WARNING("invalid gdb_detach configuration directive: %s", args[0]);
-       }
-
-       return ERROR_COMMAND_SYNTAX_ERROR;
+       return server_port_command(cmd_ctx, cmd, args, argc, &gdb_port);
 }
 
-int handle_gdb_memory_map_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+static int handle_gdb_memory_map_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
        if (argc == 1)
        {
@@ -2355,7 +2295,7 @@ int handle_gdb_memory_map_command(struct command_context_s *cmd_ctx, char *cmd,
        return ERROR_COMMAND_SYNTAX_ERROR;
 }
 
-int handle_gdb_flash_program_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+static int handle_gdb_flash_program_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
        if (argc == 1)
        {
@@ -2376,7 +2316,7 @@ int handle_gdb_flash_program_command(struct command_context_s *cmd_ctx, char *cm
        return ERROR_COMMAND_SYNTAX_ERROR;
 }
 
-int handle_gdb_report_data_abort_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+static int handle_gdb_report_data_abort_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
        if (argc == 1)
        {
@@ -2398,7 +2338,7 @@ int handle_gdb_report_data_abort_command(struct command_context_s *cmd_ctx, char
 }
 
 /* gdb_breakpoint_override */
-int handle_gdb_breakpoint_override_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+static int handle_gdb_breakpoint_override_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
        if (argc == 0)
        {
@@ -2433,20 +2373,25 @@ 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_sync", handle_gdb_sync_command,
-                       COMMAND_ANY, "next stepi will return immediately allowing GDB fetch register state without affecting target state");
-       register_command(command_context, NULL, "gdb_port", handle_gdb_port_command,
-                       COMMAND_ANY, "daemon configuration command gdb_port");
-       register_command(command_context, NULL, "gdb_detach", handle_gdb_detach_command,
-                       COMMAND_CONFIG, "resume/reset/halt/nothing - "
-                       "specify behavior when GDB detaches from the target");
-       register_command(command_context, NULL, "gdb_memory_map", handle_gdb_memory_map_command,
-                       COMMAND_CONFIG, "enable or disable memory map");
-       register_command(command_context, NULL, "gdb_flash_program", handle_gdb_flash_program_command,
-                       COMMAND_CONFIG, "enable or disable flash program");
-       register_command(command_context, NULL, "gdb_report_data_abort", handle_gdb_report_data_abort_command,
-                       COMMAND_CONFIG, "enable or disable reporting data aborts");
-       register_command(command_context, NULL, "gdb_breakpoint_override", handle_gdb_breakpoint_override_command,
-                       COMMAND_EXEC, "hard/soft/disable - force breakpoint type for gdb 'break' commands.");
+       register_command(command_context, NULL, "gdb_sync",
+                       handle_gdb_sync_command, COMMAND_ANY,
+                       "next stepi will return immediately allowing GDB to "
+                       "fetch register state without affecting target state");
+       register_command(command_context, NULL, "gdb_port",
+                       handle_gdb_port_command, COMMAND_ANY,
+                       "daemon configuration command gdb_port");
+       register_command(command_context, NULL, "gdb_memory_map",
+                       handle_gdb_memory_map_command, COMMAND_CONFIG,
+                       "enable or disable memory map");
+       register_command(command_context, NULL, "gdb_flash_program",
+                       handle_gdb_flash_program_command, COMMAND_CONFIG,
+                       "enable or disable flash program");
+       register_command(command_context, NULL, "gdb_report_data_abort",
+                       handle_gdb_report_data_abort_command, COMMAND_CONFIG,
+                       "enable or disable reporting data aborts");
+       register_command(command_context, NULL, "gdb_breakpoint_override",
+                       handle_gdb_breakpoint_override_command, COMMAND_EXEC,
+                       "hard/soft/disable - force type of breakpoint "
+                       "used by gdb 'break' commands.");
        return ERROR_OK;
 }