ARM_AS ?= $(ARM_CROSS_COMPILE)as
ARM_OBJCOPY ?= $(ARM_CROSS_COMPILE)objcopy
-arm: armv7m_erase_check.inc armv7m_0_erase_check.inc
+arm: armv4_5_erase_check.inc armv7m_erase_check.inc armv7m_0_erase_check.inc
+
+armv4_5_%.elf: armv4_5_%.s
+ $(ARM_AS) $< -o $@
+
+armv4_5_%.bin: armv4_5_%.elf
+ $(ARM_OBJCOPY) -Obinary $< $@
+
+armv4_5_%.inc: armv4_5_%.bin
+ $(BIN2C) < $< > $@
armv7m_%.elf: armv7m_%.s
$(ARM_AS) $< -o $@
--- /dev/null
+/* Autogenerated with ../../../src/helper/bin2char.sh */
+0x01,0x30,0xd0,0xe4,0x03,0x20,0x02,0xe0,0x01,0x10,0x51,0xe2,0xfb,0xff,0xff,0x1a,
+0x70,0x00,0x20,0xe1,
uint32_t i;
uint32_t exit_var = 0;
- /* see contrib/loaders/erase_check/armv4_5_erase_check.s for src */
-
- static const uint32_t check_code[] = {
- /* loop: */
- 0xe4d03001, /* ldrb r3, [r0], #1 */
- 0xe0022003, /* and r2, r2, r3 */
- 0xe2511001, /* subs r1, r1, #1 */
- 0x1afffffb, /* bne loop */
- /* end: */
- 0xe1200070, /* bkpt #0 */
+ static const uint8_t check_code_le[] = {
+#include "../../contrib/loaders/erase_check/armv4_5_erase_check.inc"
};
+ assert(sizeof(check_code_le) % 4 == 0);
+
/* make sure we have a working area */
retval = target_alloc_working_area(target,
- sizeof(check_code), &check_algorithm);
+ sizeof(check_code_le), &check_algorithm);
if (retval != ERROR_OK)
return retval;
/* convert code into a buffer in target endianness */
- for (i = 0; i < ARRAY_SIZE(check_code); i++) {
+ for (i = 0; i < ARRAY_SIZE(check_code_le) / 4; i++) {
retval = target_write_u32(target,
check_algorithm->address
+ i * sizeof(uint32_t),
- check_code[i]);
+ le_to_h_u32(&check_code_le[i * 4]));
if (retval != ERROR_OK)
goto cleanup;
}
/* armv4 must exit using a hardware breakpoint */
if (arm->is_armv4)
- exit_var = check_algorithm->address + sizeof(check_code) - 4;
+ exit_var = check_algorithm->address + sizeof(check_code_le) - 4;
retval = target_run_algorithm(target, 0, NULL, 3, reg_params,
check_algorithm->address,