X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Fcortex_m.c;h=e4374318aa1afb71a42a97f18cd60c8d356cde8f;hp=acf280505c4dccf9429c7d13ab18815eea875bf8;hb=e1c40cb1c116d6e49f787f59dcb3c0b87a52aa56;hpb=ec5e4bae251e01d2b7681e370a6c5e82a81e5962 diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index acf280505c..e4374318aa 100644 --- a/src/target/cortex_m.c +++ b/src/target/cortex_m.c @@ -1570,6 +1570,12 @@ static int cortex_m3_read_memory(struct target *target, uint32_t address, struct adiv5_dap *swjdp = &armv7m->dap; int retval = ERROR_COMMAND_SYNTAX_ERROR; + if (armv7m->arm.is_armv6m) { + /* armv6m does not handle unaligned memory access */ + if (((size == 4) && (address & 0x3u)) || ((size == 2) && (address & 0x1u))) + return ERROR_TARGET_UNALIGNED_ACCESS; + } + /* cortex_m3 handles unaligned memory access */ if (count && buffer) { switch (size) { @@ -1595,6 +1601,12 @@ static int cortex_m3_write_memory(struct target *target, uint32_t address, struct adiv5_dap *swjdp = &armv7m->dap; int retval = ERROR_COMMAND_SYNTAX_ERROR; + if (armv7m->arm.is_armv6m) { + /* armv6m does not handle unaligned memory access */ + if (((size == 4) && (address & 0x3u)) || ((size == 2) && (address & 0x1u))) + return ERROR_TARGET_UNALIGNED_ACCESS; + } + if (count && buffer) { switch (size) { case 4: @@ -1812,6 +1824,9 @@ int cortex_m3_examine(struct target *target) LOG_DEBUG("Cortex-M%d floating point feature FPv4_SP found", i); armv7m->fp_feature = FPv4_SP; } + } else if (i == 0) { + /* Cortex-M0 does not support unaligned memory access */ + armv7m->arm.is_armv6m = true; } /* NOTE: FPB and DWT are both optional. */