From a8d0fec087b18d44a05124e48fa9f2ef111d3e8a Mon Sep 17 00:00:00 2001 From: Hsiangkai Wang Date: Tue, 18 Jun 2013 16:37:21 +0800 Subject: [PATCH] nds32: report any one of hit read watchpoints If multiple read watchpoints are hit at the same time, report any one of these hit watchpoints. Change-Id: I8d4439aa80e4b62bb7d48bbdc0450920e2008a2e Signed-off-by: Hsiangkai Wang Reviewed-on: http://openocd.zylin.com/1576 Tested-by: jenkins Reviewed-by: Spencer Oliver --- src/target/nds32_v3_common.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/target/nds32_v3_common.c b/src/target/nds32_v3_common.c index b524679e2..e88430f2b 100644 --- a/src/target/nds32_v3_common.c +++ b/src/target/nds32_v3_common.c @@ -240,6 +240,7 @@ static int nds32_v3_get_exception_address(struct nds32 *nds32, uint32_t match_count; int32_t i; static int32_t number_of_hard_break; + uint32_t bp_control; if (number_of_hard_break == 0) { aice_read_debug_reg(aice, NDS_EDM_SR_EDM_CFG, &edm_cfg); @@ -255,6 +256,14 @@ static int nds32_v3_get_exception_address(struct nds32 *nds32, if (match_bits & (1 << i)) { aice_read_debug_reg(aice, NDS_EDM_SR_BPA0 + i, address); match_count++; + + /* If target hits multiple read/access watchpoint, + * select the first one. */ + aice_read_debug_reg(aice, NDS_EDM_SR_BPC0 + i, &bp_control); + if (0x3 == (bp_control & 0x3)) { + match_count = 1; + break; + } } }