diff options
author | Mike Leach <mike.leach@linaro.org> | 2023-12-13 15:59:35 +0000 |
---|---|---|
committer | Mike Leach <mike.leach@linaro.org> | 2023-12-18 14:59:00 +0000 |
commit | 543b818f585072224b24e0d8066ebf7c6688b4b0 (patch) | |
tree | ba14574db9de31ca3011a0082d6751de4f170acc | |
parent | d8599bac2c377676e9458454856e0f74bbe59ba9 (diff) | |
download | OpenCSD-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.h | 6 | ||||
-rw-r--r-- | decoder/source/etmv3/trc_pkt_decode_etmv3.cpp | 1 | ||||
-rw-r--r-- | decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp | 4 | ||||
-rw-r--r-- | decoder/source/ptm/trc_pkt_decode_ptm.cpp | 2 | ||||
-rw-r--r-- | decoder/source/trc_gen_elem.cpp | 7 |
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: |