aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2018-07-13 09:01:47 +0200
committerMatthias Welwarsky <matthias@welwarsky.de>2018-12-12 08:47:01 +0000
commit8b66c96974cafa24ebcd2739aae5e1a5a64fdf22 (patch)
treee817d85734424ed918c1167487b071a9f6ab6f16
parentff5d13a5f8940d8d6e9d097dc10af0dcf6d82f34 (diff)
armv7a_mmu: s/LOG_ERROR/LOG_WARNING/ on address translation failure
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>
-rw-r--r--src/target/armv7a_mmu.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/target/armv7a_mmu.c b/src/target/armv7a_mmu.c
index eed73ee5..23d201f7 100644
--- a/src/target/armv7a_mmu.c
+++ b/src/target/armv7a_mmu.c
@@ -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;
}