extern struct target_type dsp5680xx_target;
extern struct target_type testee_target;
extern struct target_type avr32_ap7k_target;
-extern struct target_type stm32_stlink_target;
+extern struct target_type hla_target;
static struct target_type *target_types[] = {
&arm7tdmi_target,
&dsp5680xx_target,
&testee_target,
&avr32_ap7k_target,
- &stm32_stlink_target,
+ &hla_target,
NULL,
};
uint32_t entry_point, uint32_t exit_point, void *arch_info)
{
int retval;
+ int timeout = 0;
/* Set up working area. First word is write pointer, second word is read pointer,
* rest is fifo data area. */
* less than buffer size / flash speed. This is very unlikely to
* run when using high latency connections such as USB. */
alive_sleep(10);
+
+ /* to stop an infinite loop on some targets check and increment a timeout
+ * this issue was observed on a stellaris using the new ICDI interface */
+ if (timeout++ >= 500) {
+ LOG_ERROR("timeout waiting for algorithm, a target reset is recommended");
+ return ERROR_FLASH_OPERATION_FAILED;
+ }
continue;
}
+ /* reset our timeout */
+ timeout = 0;
+
/* Limit to the amount of data we actually want to write */
if (thisrun_bytes > count * block_size)
thisrun_bytes = count * block_size;
backoff_times *= 2;
backoff_times++;
}
- LOG_USER("Polling target failed, GDB will be halted. Polling again in %dms",
+ LOG_USER("Polling target %s failed, GDB will be halted. Polling again in %dms",
+ target_name(target),
backoff_times * polling_interval);
/* Tell GDB to halt the debugger. This allows the user to
}
/* Since we succeeded, we reset backoff count */
if (backoff_times > 0)
- LOG_USER("Polling succeeded again");
+ LOG_USER("Polling target %s succeeded again", target_name(target));
backoff_times = 0;
}
}
return JIM_ERR;
}
- command_print(NULL, "0x%08x ", (int)(addr));
+ command_print_sameline(NULL, "0x%08x ", (int)(addr));
switch (dwidth) {
case 4:
for (x = 0; x < 16 && x < y; x += 4) {
z = target_buffer_get_u32(target, &(target_buf[x]));
- command_print(NULL, "%08x ", (int)(z));
+ command_print_sameline(NULL, "%08x ", (int)(z));
}
for (; (x < 16) ; x += 4)
- command_print(NULL, " ");
+ command_print_sameline(NULL, " ");
break;
case 2:
for (x = 0; x < 16 && x < y; x += 2) {
z = target_buffer_get_u16(target, &(target_buf[x]));
- command_print(NULL, "%04x ", (int)(z));
+ command_print_sameline(NULL, "%04x ", (int)(z));
}
for (; (x < 16) ; x += 2)
- command_print(NULL, " ");
+ command_print_sameline(NULL, " ");
break;
case 1:
default:
for (x = 0 ; (x < 16) && (x < y) ; x += 1) {
z = target_buffer_get_u8(target, &(target_buf[x]));
- command_print(NULL, "%02x ", (int)(z));
+ command_print_sameline(NULL, "%02x ", (int)(z));
}
for (; (x < 16) ; x += 1)
- command_print(NULL, " ");
+ command_print_sameline(NULL, " ");
break;
}
/* ascii-ify the bytes */
/* terminate */
target_buf[16] = 0;
/* print - with a newline */
- command_print(NULL, "%s\n", target_buf);
+ command_print_sameline(NULL, "%s\n", target_buf);
/* NEXT... */
bytes -= 16;
addr += 16;
/* found */
break;
}
+
+ /* check for deprecated name */
+ if (target_types[x]->deprecated_name) {
+ if (0 == strcmp(cp, target_types[x]->deprecated_name)) {
+ /* found */
+ LOG_WARNING("target name is deprecated use: \'%s\'", target_types[x]->name);
+ break;
+ }
+ }
}
if (target_types[x] == NULL) {
Jim_SetResultFormatted(goi->interp, "Unknown target type %s, try one of ", cp);
target->head = head;
curr = curr->next;
}
- if (target->rtos)
+
+ if (target && target->rtos)
retval = rtos_smp_init(head->target);
+
return retval;
}