aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Leach <mike.leach@linaro.org>2021-05-16 11:58:40 +0100
committerMike Leach <mike.leach@linaro.org>2021-05-16 11:58:40 +0100
commit63b59ee56d8acfad3ea9bbea25f56119e298bd72 (patch)
treeb5ff093b1e84aacb6a9f1b7c0720b1136320764f
parent01d44a34f8fc057f4b041c01f8d9502d77fe612f (diff)
downloadOpenCSD-63b59ee56d8acfad3ea9bbea25f56119e298bd72.tar.gz
opencsd: etm4: Fix commit elements bug.
Fix processing for commit elements that has potential for loop due to incorrect restore of skipped elements. Signed-off-by: Mike Leach <mike.leach@linaro.org>
-rw-r--r--decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp b/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp
index e4caf0a..2e4e723 100644
--- a/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp
+++ b/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp
@@ -1024,17 +1024,19 @@ ocsd_err_t TrcPktDecodeEtmV4I::cancelElements()
m_elem_res.P0_cancel = 0;
break;
}
-
- if (temp.size())
+ }
+
+ /* restore any saved elements that are unaffected by cancel. */
+ if (temp.size())
+ {
+ while (temp.size())
{
- while (temp.size())
- {
- pElem = temp.back();
- m_P0_stack.push_front(pElem);
- temp.pop_back(false);
- }
+ pElem = temp.back();
+ m_P0_stack.push_front(pElem);
+ temp.pop_back(false);
}
}
+
m_curr_spec_depth -= num_cancel_req - m_elem_res.P0_cancel;
return err;
}