35#ifndef ARM_TRC_PKT_DECODE_ETMV4I_H_INCLUDED
36#define ARM_TRC_PKT_DECODE_ETMV4I_H_INCLUDED
46#define OCSD_ENV_INSTR_RANGE_LIMIT "OPENCSD_INSTR_RANGE_LIMIT"
125 void SetInstrInfoInAddrISA(
const ocsd_vaddr_t addr_val,
const uint8_t isa);
126 const ocsd_isa calcISA(
const bool SF,
const uint8_t IS)
const
134 void ctxtCalcInstrInfoISA()
151 int m_num_instr_range_limit;
160 ocsd_err_t traceInstrToWP(instr_range_t& instr_range, WP_res_t& WPRes,
161 const bool traceToAddrNext =
false,
163 const bool exceptionAddr =
false);
165 inline const bool WPFound(WP_res_t res)
const {
return (res == WP_FOUND); };
166 inline const bool WPNacc(WP_res_t res)
const {
return (res == WP_NACC); };
170 void setElemTraceRange(OcsdTraceElement& elemIn,
const instr_range_t& addr_range,
const bool executed,
ocsd_trc_index_t index);
171 void setElemTraceRangeInstr(OcsdTraceElement& elemIn,
const instr_range_t& addr_range,
175 inline bool isETEConfig() {
184 uint64_t m_timestamp;
188 uint32_t m_context_id;
197 int m_curr_spec_depth;
198 int m_max_spec_depth;
201#ifdef DATA_TRACE_SUPPORTED
209 int m_cond_key_max_incr;
227 processor_state_t m_curr_state;
231 EtmV4P0Stack m_P0_stack;
242 const bool isElemForRes()
const {
243 return (m_elem_res.P0_commit || m_elem_res.P0_cancel ||
244 m_elem_res.mispredict || m_elem_res.discard);
247 void clearElemRes() {
248 m_elem_res.P0_commit = 0;
249 m_elem_res.P0_cancel = 0;
250 m_elem_res.mispredict =
false;
251 m_elem_res.discard =
false;
257 bool m_need_P0_addr_elem;
258 bool m_elem_pending_addr;
260 void setNeedP0Addr() {
261 m_need_P0_addr =
true;
264 void setNeedP0AddrElem() {
265 m_need_P0_addr_elem =
true;
269 void clearNeedP0Addr() {
270 m_need_P0_addr =
false;
271 m_need_P0_addr_elem =
false;
274 bool needP0Addr()
const {
275 return m_need_P0_addr;
278 bool needP0AddrElem()
const {
279 return m_need_P0_addr_elem;
286 bool m_prev_overflow;
288 TrcAddrReturnStack m_return_stack;
294 } m_next_range_check;
296 void nextRangeCheckClear() {
297 m_next_range_check.valid =
false;
301 m_next_range_check.valid =
true;
302 m_next_range_check.next_st_addr = addr;
306 if (m_next_range_check.valid) {
307 return (
bool)(m_next_range_check.next_st_addr == addr);
313 bool skipThumbNCondCheck() {
320 void clearThumbITBlockConditions() {
321 m_instr_info.thumb_it_conditions = 0;
325 bool m_direct_br_chk;
326 bool m_strict_br_chk;
327 bool m_range_cont_chk;
328 bool m_br_check_no_thumb;
331 OcsdGenElemStack m_out_elem;
332 OcsdTraceElement &outElem() {
return m_out_elem.getCurrElem(); };
Generic trace element class.
ocsd_err_t mispredictAtom()
ocsd_err_t handleBadPacket(const char *reason, ocsd_trc_index_t index=OCSD_BAD_TRC_INDEX)
ocsd_err_t handlePacketSeqErr(ocsd_err_t err, ocsd_trc_index_t index, const char *reason)
ocsd_err_t handleBadImageError(ocsd_trc_index_t index, const char *reason)
int P0_commit
number of elements to commit
TrcPktDecodeEtmV4I(int instIDNum)
ocsd_err_t cancelElements()
ocsd_err_t handlePacketErr(ocsd_err_t err, ocsd_err_severity_t sev, ocsd_trc_index_t index, const char *reason, const unsync_info_t unsync_reason)
ocsd_err_t commitElemOnEOT()
ocsd_err_t processAtom(const ocsd_atm_val atom)
virtual ocsd_datapath_resp_t onEOT()
ocsd_err_t processTransElem(TrcStackElem *pElem)
ocsd_err_t processTS_CC_EventElem(TrcStackElem *pElem)
ocsd_err_t addElemCC(TrcStackElemParam *pParamElem)
ocsd_err_t discardElements()
ocsd_err_t commitElements()
ocsd_err_t processQElement()
bool discard
discard elements
virtual const uint8_t getCoreSightTraceID()
ocsd_err_t processITEElem(TrcStackElem *pElem)
ocsd_vaddr_t next_st_addr
bool mispredict
mispredict latest atom
virtual ocsd_datapath_resp_t onReset()
ocsd_err_t decodePacket()
ocsd_err_t doTraceInfoPacket()
ocsd_datapath_resp_t resolveElements()
virtual ocsd_datapath_resp_t onFlush()
virtual ocsd_err_t onProtocolConfig()
virtual void onFirstInitOK()
ocsd_err_t processMarkerElem(TrcStackElem *pElem)
ocsd_err_t processSourceAddress()
void updateContext(TrcStackElemCtxt *pCtxtElem, OcsdTraceElement &elem)
int P0_cancel
elements to cancel
ocsd_err_t addElemTS(TrcStackElemParam *pParamElem, bool withCC)
ocsd_err_t processException()
ocsd_err_t addElemEvent(TrcStackElemParam *pParamElem)
virtual ~TrcPktDecodeEtmV4I()
virtual ocsd_datapath_resp_t processPacket()
enum _unsync_info_t unsync_info_t
uint32_t ocsd_trc_index_t
enum _ocsd_datapath_resp_t ocsd_datapath_resp_t
#define OCSD_BAD_TRC_INDEX
enum _ocsd_mem_space_acc_t ocsd_mem_space_acc_t
enum _ocsd_err_severity_t ocsd_err_severity_t
struct _ocsd_instr_info ocsd_instr_info
enum _ocsd_err_t ocsd_err_t
TrcPktDecodeBase(const char *component_name)
enum _ocsd_atm_val ocsd_atm_val
union _etmv4_trace_info_t etmv4_trace_info_t
OpenCSD : Decoder Generic trace element output class.
OpenCSD : Trace Packet decoder base class.