* however sometimes '-' is sent even though we've already received
* an ACK (+) for everything we've sent off.
*/
-#ifndef _WIN32
int gotdata;
for (;;)
{
return retval;
LOG_WARNING("Discard unexpected char %c", reply);
}
-#endif
#endif
while (1)
case '$':
break;
case '+':
+ /* gdb sends a dummy ack '+' at every remote connect - see remote_start_remote (remote.c)
+ * incase anyone tries to debug why they receive this warning every time */
LOG_WARNING("acknowledgment received, but no packet pending");
break;
case '-':
my_checksum += character & 0xff;
buffer[count++] = character & 0xff;
}
-
}
*len = count;
return ERROR_OK;
}
-int gdb_output(struct command_context_s *context, char* line)
+int gdb_output(struct command_context_s *context, const char* line)
{
/* this will be dumped to the log and also sent as an O packet if possible */
LOG_USER_N("%s", line);
int gdb_program_handler(struct target_s *target, enum target_event event, void *priv)
{
- FILE *script;
struct command_context_s *cmd_ctx = priv;
- if (target->gdb_program_script)
- {
- script = open_file_from_path(target->gdb_program_script, "r");
- if (!script)
- {
- LOG_ERROR("couldn't open script file %s", target->gdb_program_script);
- return ERROR_OK;
- }
-
- LOG_INFO("executing gdb_program script '%s'", target->gdb_program_script);
- command_run_file(cmd_ctx, script, COMMAND_EXEC);
- fclose(script);
-
- jtag_execute_queue();
- }
+ target_invoke_script(cmd_ctx, target, "gdb_program");
+ jtag_execute_queue();
return ERROR_OK;
}
if (packet[0] == 'c')
{
LOG_DEBUG("continue");
+ target_invoke_script(connection->cmd_ctx, target, "pre_resume");
target_resume(target, current, address, 0, 0); /* resume at current address, don't handle breakpoints, not debugging */
}
else if (packet[0] == 's')
xml_printf(&retval, &buffer, &pos, &size,
"PacketSize=%x;qXfer:memory-map:read%c;qXfer:features:read-",
- (GDB_BUFFER_SIZE - 1), gdb_use_memory_map == 1 ? '+' : '-');
+ (GDB_BUFFER_SIZE - 1), ((gdb_use_memory_map == 1)&&(flash_get_bank_count()>0)) ? '+' : '-');
if (retval != ERROR_OK)
{
return ERROR_OK;
}
- else if (strstr(packet, "qXfer:memory-map:read::"))
+ else if (strstr(packet, "qXfer:memory-map:read::")&&(flash_get_bank_count()>0))
{
/* We get away with only specifying flash here. Regions that are not
* specified are treated as if we provided no memory map(if not we
switch( detach_mode )
{
case GDB_DETACH_RESUME:
+ target_invoke_script(connection->cmd_ctx, target, "pre_resume");
target_resume(target, 1, 0, 1, 0);
break;
case GDB_DETACH_RESET:
- target_process_reset(connection->cmd_ctx);
+ /* FIX?? make this configurable?? */
+ target_process_reset(connection->cmd_ctx, RESET_HALT);
break;
case GDB_DETACH_HALT:
break;
case 'R':
/* handle extended restart packet */
- target_process_reset(connection->cmd_ctx);
+ command_run_linef(connection->cmd_ctx, "ocd_gdb_restart %d", get_num_by_target(target));
break;
default:
/* ignore unkown packets */