armv7a_mmu: s/LOG_ERROR/LOG_WARNING/ on address translation failure 02/4602/3
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_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;
        }
 
                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_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;
        }
 
                return ERROR_TARGET_TRANSLATION_FAULT;
        }
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)