aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Leach <mike.leach@linaro.org>2023-12-13 15:59:35 +0000
committerMike Leach <mike.leach@linaro.org>2023-12-18 14:59:00 +0000
commit543b818f585072224b24e0d8066ebf7c6688b4b0 (patch)
treeba14574db9de31ca3011a0082d6751de4f170acc
parentd8599bac2c377676e9458454856e0f74bbe59ba9 (diff)
downloadOpenCSD-543b818f585072224b24e0d8066ebf7c6688b4b0.tar.gz
opencsd: Enhance output for OCSD_GEN_TRC_ELEM_ADDR_NACC packet
The memory space used when requesting memory that results in the _NACC packet is now output as part of the packet printed string. string Signed-off-by: Mike Leach <mike.leach@linaro.org>
-rw-r--r--decoder/include/common/ocsd_code_follower.h6
-rw-r--r--decoder/source/etmv3/trc_pkt_decode_etmv3.cpp1
-rw-r--r--decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp4
-rw-r--r--decoder/source/ptm/trc_pkt_decode_ptm.cpp2
-rw-r--r--decoder/source/trc_gen_elem.cpp7
5 files changed, 19 insertions, 1 deletions
diff --git a/decoder/include/common/ocsd_code_follower.h b/decoder/include/common/ocsd_code_follower.h
index b024aa0..cab38fa 100644
--- a/decoder/include/common/ocsd_code_follower.h
+++ b/decoder/include/common/ocsd_code_follower.h
@@ -101,6 +101,7 @@ public:
const bool isNacc() const; //!< true if Memory Not Accessible (nacc) error occurred
void clearNacc(); //!< clear the nacc error flag
const ocsd_vaddr_t getNaccAddr() const; //!< get the nacc error address.
+ const ocsd_mem_space_acc_t getMemSpaceAccess() const; //!< get the memory space used for access.
private:
bool initFollowerState(); //!< clear all the o/p data and flags, check init valid.
@@ -141,6 +142,11 @@ inline void OcsdCodeFollower::setMemSpaceAccess(const ocsd_mem_space_acc_t mem_a
m_mem_acc_rule = mem_acc_rule;
}
+inline const ocsd_mem_space_acc_t OcsdCodeFollower::getMemSpaceAccess() const
+{
+ return m_mem_acc_rule;
+}
+
inline void OcsdCodeFollower::setMemSpaceCSID(const uint8_t csid)
{
m_mem_space_csid = csid;
diff --git a/decoder/source/etmv3/trc_pkt_decode_etmv3.cpp b/decoder/source/etmv3/trc_pkt_decode_etmv3.cpp
index e68a73f..ce3c326 100644
--- a/decoder/source/etmv3/trc_pkt_decode_etmv3.cpp
+++ b/decoder/source/etmv3/trc_pkt_decode_etmv3.cpp
@@ -631,6 +631,7 @@ ocsd_datapath_resp_t TrcPktDecodeEtmV3::processPHdr()
else
pElem->updateType(OCSD_GEN_TRC_ELEM_ADDR_NACC);
pElem->setAddrStart(m_code_follower.getNaccAddr());
+ pElem->setExceptionNum((uint32_t)m_code_follower.getMemSpaceAccess());
setNeedAddr(true);
m_code_follower.clearNacc(); // we have generated some code for the nacc.
}
diff --git a/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp b/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp
index 8f087c5..7837a58 100644
--- a/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp
+++ b/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp
@@ -1397,6 +1397,7 @@ ocsd_err_t TrcPktDecodeEtmV4I::processAtom(const ocsd_atm_val atom)
{
outElem().setType(OCSD_GEN_TRC_ELEM_ADDR_NACC);
outElem().st_addr = m_instr_info.instr_addr;
+ outElem().exception_number = (uint32_t)getCurrMemSpace();
}
}
return err;
@@ -1550,6 +1551,7 @@ ocsd_err_t TrcPktDecodeEtmV4I::processException()
outElem().setType(OCSD_GEN_TRC_ELEM_ADDR_NACC);
outElem().st_addr = m_instr_info.instr_addr;
+ outElem().exception_number = (uint32_t)getCurrMemSpace();
// used the element - need another for the final exception packet.
if ((err = m_out_elem.addElem(excep_pkt_index)))
@@ -1730,6 +1732,7 @@ ocsd_err_t TrcPktDecodeEtmV4I::processSourceAddress()
// can't access - no bytes returned - output nacc.
err = m_out_elem.addElemType(pElem->getRootIndex(), OCSD_GEN_TRC_ELEM_ADDR_NACC);
outElem().setAddrStart(srcAddr.val);
+ outElem().exception_number = (uint32_t)getCurrMemSpace();
return err;
}
@@ -1830,6 +1833,7 @@ ocsd_err_t TrcPktDecodeEtmV4I::processSourceAddress()
if (err)
return err;
outElem().setAddrStart(srcAddr.val);
+ outElem().exception_number = (uint32_t)getCurrMemSpace();
// force range to the one instruction
out_range.num_instr = 1;
diff --git a/decoder/source/ptm/trc_pkt_decode_ptm.cpp b/decoder/source/ptm/trc_pkt_decode_ptm.cpp
index 7abee84..d986ead 100644
--- a/decoder/source/ptm/trc_pkt_decode_ptm.cpp
+++ b/decoder/source/ptm/trc_pkt_decode_ptm.cpp
@@ -497,6 +497,8 @@ ocsd_datapath_resp_t TrcPktDecodePtm::processAtom()
{
m_output_elem.setType(OCSD_GEN_TRC_ELEM_ADDR_NACC);
m_output_elem.st_addr = m_nacc_addr;
+ // exception number used to NACC mem space.
+ m_output_elem.exception_number = (uint32_t)((m_pe_context.security_level == ocsd_sec_secure) ? OCSD_MEM_SPACE_S : OCSD_MEM_SPACE_N);
resp = outputTraceElementIdx(m_index_curr_pkt,m_output_elem);
m_mem_nacc_pending = false;
}
diff --git a/decoder/source/trc_gen_elem.cpp b/decoder/source/trc_gen_elem.cpp
index c94c5a7..b9894d9 100644
--- a/decoder/source/trc_gen_elem.cpp
+++ b/decoder/source/trc_gen_elem.cpp
@@ -33,6 +33,7 @@
*/
#include "common/trc_gen_elem.h"
+#include "mem_acc/trc_mem_acc_base.h"
#include <string>
#include <sstream>
@@ -125,6 +126,8 @@ void OcsdTraceElement::toString(std::string &str) const
std::ostringstream oss;
int num_str = sizeof(s_elem_descs) / sizeof(s_elem_descs[0]);
int typeIdx = (int)this->elem_type;
+ std::string strEx;
+
if(typeIdx < num_str)
{
oss << s_elem_descs[typeIdx][0] << "(";
@@ -145,7 +148,9 @@ void OcsdTraceElement::toString(std::string &str) const
break;
case OCSD_GEN_TRC_ELEM_ADDR_NACC:
- oss << " 0x" << std::hex << st_addr << " ";
+ // exception number overridden to give mem space associated with NACC result.
+ TrcMemAccessorBase::getMemAccSpaceString(strEx, (ocsd_mem_space_acc_t)exception_number);
+ oss << " 0x" << std::hex << st_addr << "; Memspace [0x" << exception_number << ":" << strEx << "] ";
break;
case OCSD_GEN_TRC_ELEM_I_RANGE_NOPATH: