armv7a_mmu: s/LOG_ERROR/LOG_WARNING/ on address translation failure
authorAntonio Borneo <borneo.antonio@gmail.com>
Fri, 13 Jul 2018 07:01:47 +0000 (09:01 +0200)
committerMatthias Welwarsky <matthias@welwarsky.de>
Wed, 12 Dec 2018 08:47:01 +0000 (08:47 +0000)
When GDB analyses the status of the target it try to guess the
current stack frame and issues few memory read.
E.g. on ARM targets GDB uses R11 value as a potential frame-pointer
and reads at the address pointed by R11.
The address of such memory read is not always valid and can trigger
an address translation failure.

Replace LOG_ERROR with LOG_WARNING in case the virtual address does
not have a hit in TTB; print the virtual address in the warning
message and discriminate the two identical messages with [1]/[2].

Change-Id: I288b8cd26bec2543c4f1c16b7c06dc47d5d843d1
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/4602
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/target/armv7a_mmu.c

index eed73ee58f684e719bc72cd004d3fb6678da00bb..23d201f7bc0f5945a1cfb41691c5dade1ec3009c 100644 (file)
@@ -72,7 +72,8 @@ int armv7a_mmu_translate_va(struct target *target,  uint32_t va, uint32_t *val)
        LOG_DEBUG("1st lvl desc: %8.8" PRIx32 "", first_lvl_descriptor);
 
        if ((first_lvl_descriptor & 0x3) == 0) {
-               LOG_ERROR("Address translation failure");
+               /* Avoid LOG_ERROR, probably GDB is guessing the stack frame */
+               LOG_WARNING("Address translation failure [1]: va %8.8" PRIx32 "", va);
                return ERROR_TARGET_TRANSLATION_FAULT;
        }
 
@@ -103,7 +104,8 @@ int armv7a_mmu_translate_va(struct target *target,  uint32_t va, uint32_t *val)
        LOG_DEBUG("2nd lvl desc: %8.8" PRIx32 "", second_lvl_descriptor);
 
        if ((second_lvl_descriptor & 0x3) == 0) {
-               LOG_ERROR("Address translation failure");
+               /* Avoid LOG_ERROR, probably GDB is guessing the stack frame */
+               LOG_WARNING("Address translation failure [2]: va %8.8" PRIx32 "", va);
                return ERROR_TARGET_TRANSLATION_FAULT;
        }