Files
openocd/src/target
Antonio Borneo 5dc5ed5714 target/cortex_a: use aligned accesses for read/write cpu memory slow
Armv7a is able to read and write memory at un-aligned address, but
only when bit SCTLR.A (Alignment check enable) is zero and the
address belongs to a memory space with attribute "Normal" (see [1]
chapter A3.2.1 "Unaligned data access"). In all the other cases
the memory access will trigger an alignment fault data abort
exception.
Memory attributes are explained in [1] chapter A3.5 "Memory types
and attributes and the memory order model".

Disabling the MMU cause a change in memory attribute, as explained
in [1] chapter B3.2 "The effects of disabling MMUs on VMSA
behavior".
This can cause several issues. e.g. a SW breakpoint on un-aligned
4-byte Thumb instruction, set when MMU is on, can be impossible to
remove when MMU turns off.

While is possible to check all the possible conditions before an
un-aligned memory access, it's clearly more maintainable to skip
such complexity and only perform aligned accesses.

Check the alignment and eventually modify the data size before
calling the functions cortex_a_{read,write}_cpu_memory_slow().
Change the comment in the two functions above to comply with the
new behaviour.

[1] ARM DDI 0406C.d - "ARM Architecture Reference Manual, ARMv7-A
    and ARMv7-R edition"

Change-Id: I57b4c11e7fa7e78aaaaee4406a5734b48db740ae
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/5138
Tested-by: jenkins
Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
2019-10-18 09:20:58 +01:00
..
2018-01-16 09:05:41 +00:00
2016-07-19 10:45:16 +01:00
2019-03-06 16:10:33 +00:00
2016-05-24 22:30:55 +01:00
2018-04-10 09:13:02 +01:00
2016-05-24 22:30:01 +01:00
2019-03-04 11:53:00 +00:00
2018-03-16 08:58:06 +00:00
2016-05-24 22:30:55 +01:00
2018-12-12 08:47:44 +00:00
2018-12-12 08:47:44 +00:00
2018-12-12 08:47:44 +00:00
2018-12-12 08:47:44 +00:00
2016-05-24 22:30:55 +01:00
2016-05-24 22:30:55 +01:00
2018-12-12 08:47:44 +00:00
2019-03-23 17:43:30 +00:00
2017-05-08 18:04:56 +01:00
2018-06-04 09:16:08 +01:00
2017-12-07 07:53:13 +00:00
2016-05-24 22:30:55 +01:00
2019-06-12 15:15:40 +01:00
2016-05-24 22:30:55 +01:00