Retired gdb_attach. gdb-detach event covers this functionality.
This commit is contained in:
parent
4d32b6eee9
commit
79bf27da71
|
@ -1638,11 +1638,6 @@ GDB behaviour is not sufficient. GDB normally uses hardware
|
||||||
breakpoints if the memory map has been set up for flash regions.
|
breakpoints if the memory map has been set up for flash regions.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Config Command} gdb_detach (@option{resume}|@option{reset}|@option{halt}|@option{nothing})
|
|
||||||
Configures what OpenOCD will do when GDB detaches from the daemon.
|
|
||||||
Default behaviour is @option{resume}.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@anchor{gdb_flash_program}
|
@anchor{gdb_flash_program}
|
||||||
@deffn {Config Command} gdb_flash_program (@option{enable}|@option{disable})
|
@deffn {Config Command} gdb_flash_program (@option{enable}|@option{disable})
|
||||||
Set to @option{enable} to cause OpenOCD to program the flash memory when a
|
Set to @option{enable} to cause OpenOCD to program the flash memory when a
|
||||||
|
|
|
@ -52,17 +52,6 @@ static const char *DIGITS = "0123456789abcdef";
|
||||||
static void gdb_log_callback(void *priv, const char *file, int line,
|
static void gdb_log_callback(void *priv, const char *file, int line,
|
||||||
const char *function, const char *string);
|
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
|
/* number of gdb connections, mainly to supress gdb related debugging spam
|
||||||
* in helper/log.c when no gdb connections are actually active */
|
* in helper/log.c when no gdb connections are actually active */
|
||||||
int gdb_actual_connections;
|
int gdb_actual_connections;
|
||||||
|
@ -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)
|
int gdb_detach(connection_t *connection, target_t *target)
|
||||||
{
|
{
|
||||||
|
gdb_service_t *gdb_service = connection->service->priv;
|
||||||
|
|
||||||
switch (detach_mode)
|
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_DETACH);
|
||||||
{
|
|
||||||
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:
|
return gdb_put_packet(connection, "OK", 2);
|
||||||
/* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
gdb_put_packet(connection, "OK", 2);
|
|
||||||
return ERROR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gdb_log_callback(void *priv, const char *file, int line,
|
static void gdb_log_callback(void *priv, const char *file, int line,
|
||||||
|
@ -2311,37 +2282,6 @@ int handle_gdb_port_command(struct command_context_s *cmd_ctx, char *cmd, char *
|
||||||
return ERROR_OK;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
int handle_gdb_memory_map_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
|
int handle_gdb_memory_map_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
|
||||||
{
|
{
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
|
@ -2445,9 +2385,6 @@ int gdb_register_commands(command_context_t *command_context)
|
||||||
COMMAND_ANY, "next stepi will return immediately allowing GDB fetch register state without affecting target state");
|
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,
|
register_command(command_context, NULL, "gdb_port", handle_gdb_port_command,
|
||||||
COMMAND_ANY, "daemon configuration command gdb_port");
|
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,
|
register_command(command_context, NULL, "gdb_memory_map", handle_gdb_memory_map_command,
|
||||||
COMMAND_CONFIG, "enable or disable memory map");
|
COMMAND_CONFIG, "enable or disable memory map");
|
||||||
register_command(command_context, NULL, "gdb_flash_program", handle_gdb_flash_program_command,
|
register_command(command_context, NULL, "gdb_flash_program", handle_gdb_flash_program_command,
|
||||||
|
|
Loading…
Reference in New Issue