xref: /freebsd-src/contrib/opencsd/decoder/source/etmv4/trc_pkt_elem_etmv4i.cpp (revision 46e6e290975f19ea62d03f90ac3e523af4dae557)
1c120c564SAndrew Turner /*
2c120c564SAndrew Turner  * \file       trc_pkt_elem_etmv4i.cpp
3c120c564SAndrew Turner  * \brief      OpenCSD :
4c120c564SAndrew Turner  *
5c120c564SAndrew Turner  * \copyright  Copyright (c) 2015, ARM Limited. All Rights Reserved.
6c120c564SAndrew Turner  */
7c120c564SAndrew Turner 
8c120c564SAndrew Turner /*
9c120c564SAndrew Turner  * Redistribution and use in source and binary forms, with or without modification,
10c120c564SAndrew Turner  * are permitted provided that the following conditions are met:
11c120c564SAndrew Turner  *
12c120c564SAndrew Turner  * 1. Redistributions of source code must retain the above copyright notice,
13c120c564SAndrew Turner  * this list of conditions and the following disclaimer.
14c120c564SAndrew Turner  *
15c120c564SAndrew Turner  * 2. Redistributions in binary form must reproduce the above copyright notice,
16c120c564SAndrew Turner  * this list of conditions and the following disclaimer in the documentation
17c120c564SAndrew Turner  * and/or other materials provided with the distribution.
18c120c564SAndrew Turner  *
19c120c564SAndrew Turner  * 3. Neither the name of the copyright holder nor the names of its contributors
20c120c564SAndrew Turner  * may be used to endorse or promote products derived from this software without
21c120c564SAndrew Turner  * specific prior written permission.
22c120c564SAndrew Turner  *
23c120c564SAndrew Turner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
24c120c564SAndrew Turner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25c120c564SAndrew Turner  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26c120c564SAndrew Turner  * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27c120c564SAndrew Turner  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28c120c564SAndrew Turner  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29c120c564SAndrew Turner  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
30c120c564SAndrew Turner  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31c120c564SAndrew Turner  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32c120c564SAndrew Turner  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33c120c564SAndrew Turner  */
34c120c564SAndrew Turner #include <sstream>
35c120c564SAndrew Turner #include <iomanip>
36c120c564SAndrew Turner 
37c120c564SAndrew Turner #include "opencsd/etmv4/trc_pkt_elem_etmv4i.h"
38c120c564SAndrew Turner 
EtmV4ITrcPacket()39c120c564SAndrew Turner EtmV4ITrcPacket::EtmV4ITrcPacket()
40c120c564SAndrew Turner {
41*46e6e290SRuslan Bukin     protocol_version = 0x42;    // min protocol version.
42c120c564SAndrew Turner }
43c120c564SAndrew Turner 
~EtmV4ITrcPacket()44c120c564SAndrew Turner EtmV4ITrcPacket::~EtmV4ITrcPacket()
45c120c564SAndrew Turner {
46c120c564SAndrew Turner }
47c120c564SAndrew Turner 
initStartState()48c120c564SAndrew Turner void EtmV4ITrcPacket::initStartState()
49c120c564SAndrew Turner {
50c120c564SAndrew Turner     // clear packet state to start of trace (first sync or post discontinuity)
51c120c564SAndrew Turner 
52c120c564SAndrew Turner     // clear all valid bits
53c120c564SAndrew Turner     pkt_valid.val = 0;
54c120c564SAndrew Turner 
55c120c564SAndrew Turner     // virtual address
56c120c564SAndrew Turner     v_addr.pkt_bits = 0;
57c120c564SAndrew Turner     v_addr.valid_bits = 0;
58c120c564SAndrew Turner     v_addr_ISA = 0;
59c120c564SAndrew Turner 
60c120c564SAndrew Turner     // timestamp
61c120c564SAndrew Turner     ts.bits_changed = 0;
62c120c564SAndrew Turner     ts.timestamp = 0;
63c120c564SAndrew Turner 
64c120c564SAndrew Turner     // per packet init
65c120c564SAndrew Turner     initNextPacket();
66c120c564SAndrew Turner }
67c120c564SAndrew Turner 
initNextPacket()68c120c564SAndrew Turner void EtmV4ITrcPacket::initNextPacket()
69c120c564SAndrew Turner {
70c120c564SAndrew Turner     // clear valid bits for elements that are only valid over a single packet.
71c120c564SAndrew Turner     pkt_valid.bits.cc_valid = 0;
72c120c564SAndrew Turner     pkt_valid.bits.commit_elem_valid = 0;
73c120c564SAndrew Turner     atom.num = 0;
74c120c564SAndrew Turner     context.updated = 0;
75c120c564SAndrew Turner     context.updated_v = 0;
76c120c564SAndrew Turner     context.updated_c = 0;
77c120c564SAndrew Turner     err_type = ETM4_PKT_I_NO_ERR_TYPE;
78c120c564SAndrew Turner }
79c120c564SAndrew Turner 
80c120c564SAndrew Turner // printing
toString(std::string & str) const81c120c564SAndrew Turner void EtmV4ITrcPacket::toString(std::string &str) const
82c120c564SAndrew Turner {
83c120c564SAndrew Turner     const char *name;
84c120c564SAndrew Turner     const char *desc;
85c120c564SAndrew Turner     std::string valStr, ctxtStr = "";
86c120c564SAndrew Turner 
87c120c564SAndrew Turner     name = packetTypeName(type, &desc);
88c120c564SAndrew Turner     str = name + (std::string)" : " + desc;
89c120c564SAndrew Turner 
90c120c564SAndrew Turner     // extended descriptions
91c120c564SAndrew Turner     switch (type)
92c120c564SAndrew Turner     {
93c120c564SAndrew Turner     case ETM4_PKT_I_BAD_SEQUENCE:
94c120c564SAndrew Turner     case ETM4_PKT_I_INCOMPLETE_EOT:
95c120c564SAndrew Turner     case ETM4_PKT_I_RESERVED_CFG:
96c120c564SAndrew Turner         name = packetTypeName(err_type, 0);
97c120c564SAndrew Turner         str += "[" + (std::string)name + "]";
98c120c564SAndrew Turner         break;
99c120c564SAndrew Turner 
100c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_CTXT_L_32IS0:
101c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_CTXT_L_32IS1:
102c120c564SAndrew Turner         contextStr(ctxtStr);
103c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_L_32IS0:
104c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_L_32IS1:
105*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_L_32IS0:
106*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_L_32IS1:
107c120c564SAndrew Turner         trcPrintableElem::getValStr(valStr, (v_addr.size == VA_64BIT) ? 64 : 32, v_addr.valid_bits, v_addr.val, true, (v_addr.pkt_bits < 32) ? v_addr.pkt_bits : 0);
108c120c564SAndrew Turner         str += "; Addr=" + valStr + "; " + ctxtStr;
109c120c564SAndrew Turner         break;
110c120c564SAndrew Turner 
111c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_CTXT_L_64IS0:
112c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_CTXT_L_64IS1:
113c120c564SAndrew Turner         contextStr(ctxtStr);
114c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_L_64IS0:
115c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_L_64IS1:
116*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_L_64IS0:
117*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_L_64IS1:
118c120c564SAndrew Turner         trcPrintableElem::getValStr(valStr, (v_addr.size == VA_64BIT) ? 64 : 32, v_addr.valid_bits, v_addr.val, true, (v_addr.pkt_bits < 64) ? v_addr.pkt_bits : 0);
119c120c564SAndrew Turner         str += "; Addr=" + valStr + "; " + ctxtStr;
120c120c564SAndrew Turner         break;
121c120c564SAndrew Turner 
122c120c564SAndrew Turner     case ETM4_PKT_I_CTXT:
123c120c564SAndrew Turner         contextStr(ctxtStr);
124c120c564SAndrew Turner         str += "; " + ctxtStr;
125c120c564SAndrew Turner         break;
126c120c564SAndrew Turner 
127c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_S_IS0:
128c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_S_IS1:
129*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_S_IS0:
130*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_S_IS1:
131c120c564SAndrew Turner         trcPrintableElem::getValStr(valStr, (v_addr.size == VA_64BIT) ? 64 : 32, v_addr.valid_bits, v_addr.val, true, v_addr.pkt_bits);
132c120c564SAndrew Turner         str += "; Addr=" + valStr;
133c120c564SAndrew Turner         break;
134c120c564SAndrew Turner 
135c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_MATCH:
136*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_MATCH:
137c120c564SAndrew Turner         addrMatchIdx(valStr);
138c120c564SAndrew Turner         str += ", " + valStr;
139c120c564SAndrew Turner         trcPrintableElem::getValStr(valStr, (v_addr.size == VA_64BIT) ? 64 : 32, v_addr.valid_bits, v_addr.val, true);
140c120c564SAndrew Turner         str += "; Addr=" + valStr + "; " + ctxtStr;
141c120c564SAndrew Turner         break;
142c120c564SAndrew Turner 
143c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F1:
144c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F2:
145c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F3:
146c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F4:
147c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F5:
148c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F6:
149c120c564SAndrew Turner         atomSeq(valStr);
150c120c564SAndrew Turner         str += "; " + valStr;
151c120c564SAndrew Turner         break;
152c120c564SAndrew Turner 
153c120c564SAndrew Turner     case ETM4_PKT_I_EXCEPT:
154c120c564SAndrew Turner         exceptionInfo(valStr);
155c120c564SAndrew Turner         str += "; " + valStr;
156c120c564SAndrew Turner         break;
157c120c564SAndrew Turner 
158c120c564SAndrew Turner     case ETM4_PKT_I_TIMESTAMP:
159c120c564SAndrew Turner         {
160c120c564SAndrew Turner             std::ostringstream oss;
161c120c564SAndrew Turner             oss << "; Updated val = " << std::hex << "0x" << ts.timestamp;
162c120c564SAndrew Turner             if (pkt_valid.bits.cc_valid)
163c120c564SAndrew Turner                 oss << "; CC=" << std::hex << "0x" << cycle_count;
164c120c564SAndrew Turner             str += oss.str();
165c120c564SAndrew Turner         }
166c120c564SAndrew Turner         break;
167c120c564SAndrew Turner 
168c120c564SAndrew Turner     case ETM4_PKT_I_TRACE_INFO:
169c120c564SAndrew Turner         {
170c120c564SAndrew Turner             std::ostringstream oss;
171c120c564SAndrew Turner             oss << "; INFO=" << std::hex << "0x" << trace_info.val;
172*46e6e290SRuslan Bukin             oss << " { CC." << std::dec << trace_info.bits.cc_enabled;
173*46e6e290SRuslan Bukin             if (isETE())
174*46e6e290SRuslan Bukin                 oss << ", TSTATE." << std::dec << trace_info.bits.in_trans_state;
175*46e6e290SRuslan Bukin             oss << " }";
176c120c564SAndrew Turner             if (trace_info.bits.cc_enabled)
177c120c564SAndrew Turner                 oss << "; CC_THRESHOLD=" << std::hex << "0x" << cc_threshold;
178c120c564SAndrew Turner             str += oss.str();
179c120c564SAndrew Turner         }
180c120c564SAndrew Turner         break;
181c120c564SAndrew Turner 
182c120c564SAndrew Turner     case ETM4_PKT_I_CCNT_F1:
183c120c564SAndrew Turner     case ETM4_PKT_I_CCNT_F2:
184c120c564SAndrew Turner     case ETM4_PKT_I_CCNT_F3:
185c120c564SAndrew Turner         {
186c120c564SAndrew Turner             std::ostringstream oss;
187c120c564SAndrew Turner             oss << "; Count=" << std::hex << "0x" << cycle_count;
188c120c564SAndrew Turner             str += oss.str();
189c120c564SAndrew Turner         }
190c120c564SAndrew Turner         break;
191b6aadd18SAndrew Turner 
192b6aadd18SAndrew Turner     case ETM4_PKT_I_CANCEL_F1:
193b6aadd18SAndrew Turner         {
194b6aadd18SAndrew Turner             std::ostringstream oss;
195b6aadd18SAndrew Turner             oss << "; Cancel(" << std::dec << cancel_elements << ")";
196b6aadd18SAndrew Turner             str += oss.str();
197c120c564SAndrew Turner         }
198b6aadd18SAndrew Turner         break;
199b6aadd18SAndrew Turner 
200b6aadd18SAndrew Turner     case ETM4_PKT_I_CANCEL_F1_MISPRED:
201b6aadd18SAndrew Turner         {
202b6aadd18SAndrew Turner             std::ostringstream oss;
203b6aadd18SAndrew Turner             oss << "; Cancel(" << std::dec << cancel_elements << "), Mispredict";
204b6aadd18SAndrew Turner             str += oss.str();
205b6aadd18SAndrew Turner         }
206b6aadd18SAndrew Turner         break;
207b6aadd18SAndrew Turner 
208b6aadd18SAndrew Turner     case ETM4_PKT_I_MISPREDICT:
209b6aadd18SAndrew Turner         {
210b6aadd18SAndrew Turner             std::ostringstream oss;
211b6aadd18SAndrew Turner             oss << "; ";
212b6aadd18SAndrew Turner             if (atom.num) {
213b6aadd18SAndrew Turner                 atomSeq(valStr);
214b6aadd18SAndrew Turner                 oss << "Atom: " << valStr << ", ";
215b6aadd18SAndrew Turner             }
216b6aadd18SAndrew Turner             oss << "Mispredict";
217b6aadd18SAndrew Turner             str += oss.str();
218b6aadd18SAndrew Turner         }
219b6aadd18SAndrew Turner         break;
220b6aadd18SAndrew Turner 
221b6aadd18SAndrew Turner     case ETM4_PKT_I_CANCEL_F2:
222b6aadd18SAndrew Turner         {
223b6aadd18SAndrew Turner             std::ostringstream oss;
224b6aadd18SAndrew Turner             oss << "; ";
225b6aadd18SAndrew Turner             if (atom.num) {
226b6aadd18SAndrew Turner                 atomSeq(valStr);
227b6aadd18SAndrew Turner                 oss << "Atom: " << valStr << ", ";
228b6aadd18SAndrew Turner             }
229b6aadd18SAndrew Turner             oss << "Cancel(1), Mispredict";
230b6aadd18SAndrew Turner             str += oss.str();
231b6aadd18SAndrew Turner         }
232b6aadd18SAndrew Turner         break;
233b6aadd18SAndrew Turner 
234b6aadd18SAndrew Turner     case ETM4_PKT_I_CANCEL_F3:
235b6aadd18SAndrew Turner         {
236b6aadd18SAndrew Turner             std::ostringstream oss;
237b6aadd18SAndrew Turner             oss << "; ";
238b6aadd18SAndrew Turner             if (atom.num) {
239b6aadd18SAndrew Turner                 oss << "Atom: E, ";
240b6aadd18SAndrew Turner             }
241b6aadd18SAndrew Turner             oss << "Cancel(" << std::dec << cancel_elements << "), Mispredict";
242b6aadd18SAndrew Turner             str += oss.str();
243b6aadd18SAndrew Turner         }
244b6aadd18SAndrew Turner         break;
245b6aadd18SAndrew Turner 
246b6aadd18SAndrew Turner     case ETM4_PKT_I_COMMIT:
247b6aadd18SAndrew Turner         {
248b6aadd18SAndrew Turner             std::ostringstream oss;
249b6aadd18SAndrew Turner             oss << "; Commit(" << std::dec << commit_elements << ")";
250b6aadd18SAndrew Turner             str += oss.str();
251b6aadd18SAndrew Turner         }
252b6aadd18SAndrew Turner         break;
253b6aadd18SAndrew Turner 
254b6aadd18SAndrew Turner     case ETM4_PKT_I_Q:
255b6aadd18SAndrew Turner         {
256b6aadd18SAndrew Turner             std::ostringstream oss;
257b6aadd18SAndrew Turner             if (Q_pkt.count_present)
258b6aadd18SAndrew Turner             {
259b6aadd18SAndrew Turner                 oss << "; Count(" << std::dec << Q_pkt.q_count << ")";
260b6aadd18SAndrew Turner                 str += oss.str();
261b6aadd18SAndrew Turner             }
262b6aadd18SAndrew Turner             else
263b6aadd18SAndrew Turner                 str += "; Count(Unknown)";
264b6aadd18SAndrew Turner 
265b6aadd18SAndrew Turner             if (Q_pkt.addr_match)
266b6aadd18SAndrew Turner             {
267b6aadd18SAndrew Turner                 addrMatchIdx(valStr);
268b6aadd18SAndrew Turner                 str += "; " + valStr;
269b6aadd18SAndrew Turner             }
270b6aadd18SAndrew Turner 
271b6aadd18SAndrew Turner             if (Q_pkt.addr_present || Q_pkt.addr_match)
272b6aadd18SAndrew Turner             {
273b6aadd18SAndrew Turner                 trcPrintableElem::getValStr(valStr, (v_addr.size == VA_64BIT) ? 64 : 32, v_addr.valid_bits, v_addr.val, true, (v_addr.pkt_bits < 64) ? v_addr.pkt_bits : 0);
274b6aadd18SAndrew Turner                 str += "; Addr=" + valStr;
275b6aadd18SAndrew Turner             }
276b6aadd18SAndrew Turner         }
277b6aadd18SAndrew Turner         break;
278*46e6e290SRuslan Bukin 
279*46e6e290SRuslan Bukin     case ETE_PKT_I_ITE:
280*46e6e290SRuslan Bukin         {
281*46e6e290SRuslan Bukin             std::ostringstream oss;
282*46e6e290SRuslan Bukin             oss << "; EL" << std::dec << (int)ite_pkt.el << "; Payload=0x" << std::hex << ite_pkt.value;
283*46e6e290SRuslan Bukin             str += oss.str();
284*46e6e290SRuslan Bukin         }
285*46e6e290SRuslan Bukin         break;
286b6aadd18SAndrew Turner     }
287b6aadd18SAndrew Turner 
288c120c564SAndrew Turner }
289c120c564SAndrew Turner 
toStringFmt(const uint32_t fmtFlags,std::string & str) const290c120c564SAndrew Turner void EtmV4ITrcPacket::toStringFmt(const uint32_t fmtFlags, std::string &str) const
291c120c564SAndrew Turner {
292c120c564SAndrew Turner     toString(str);  // TBD add in formatted response.
293c120c564SAndrew Turner }
294c120c564SAndrew Turner 
packetTypeName(const ocsd_etmv4_i_pkt_type type,const char ** ppDesc) const295c120c564SAndrew Turner const char *EtmV4ITrcPacket::packetTypeName(const ocsd_etmv4_i_pkt_type type, const char **ppDesc) const
296c120c564SAndrew Turner {
297c120c564SAndrew Turner     const char *pName = "I_UNKNOWN";
298c120c564SAndrew Turner     const char *pDesc = "Unknown Packet Header";
299c120c564SAndrew Turner 
300c120c564SAndrew Turner     switch(type)
301c120c564SAndrew Turner     {
302c120c564SAndrew Turner     case ETM4_PKT_I_NOTSYNC:
303c120c564SAndrew Turner         pName = "I_NOT_SYNC";
304c120c564SAndrew Turner         pDesc = "I Stream not synchronised";
305c120c564SAndrew Turner         break;
306c120c564SAndrew Turner 
307c120c564SAndrew Turner     case ETM4_PKT_I_INCOMPLETE_EOT:
308c120c564SAndrew Turner         pName = "I_INCOMPLETE_EOT";
309c120c564SAndrew Turner         pDesc = "Incomplete packet at end of trace.";
310c120c564SAndrew Turner         break;
311c120c564SAndrew Turner 
312c120c564SAndrew Turner     case ETM4_PKT_I_NO_ERR_TYPE:
313c120c564SAndrew Turner         pName = "I_NO_ERR_TYPE";
314c120c564SAndrew Turner         pDesc = "No Error Type.";
315c120c564SAndrew Turner         break;
316c120c564SAndrew Turner 
317c120c564SAndrew Turner     case ETM4_PKT_I_BAD_SEQUENCE:
318c120c564SAndrew Turner         pName = "I_BAD_SEQUENCE";
319c120c564SAndrew Turner         pDesc = "Invalid Sequence in packet.";
320c120c564SAndrew Turner         break;
321c120c564SAndrew Turner 
322c120c564SAndrew Turner     case ETM4_PKT_I_BAD_TRACEMODE:
323c120c564SAndrew Turner         pName = "I_BAD_TRACEMODE";
324c120c564SAndrew Turner         pDesc = "Invalid Packet for trace mode.";
325c120c564SAndrew Turner         break;
326c120c564SAndrew Turner 
327c120c564SAndrew Turner     case ETM4_PKT_I_RESERVED:
328c120c564SAndrew Turner         pName = "I_RESERVED";
329c120c564SAndrew Turner         pDesc = "Reserved Packet Header";
330c120c564SAndrew Turner         break;
331c120c564SAndrew Turner 
332c120c564SAndrew Turner     case ETM4_PKT_I_RESERVED_CFG:
333c120c564SAndrew Turner         pName = "I_RESERVED_CFG";
334c120c564SAndrew Turner         pDesc = "Reserved header for current configuration.";
335c120c564SAndrew Turner         break;
336c120c564SAndrew Turner 
337c120c564SAndrew Turner     case ETM4_PKT_I_EXTENSION:
338c120c564SAndrew Turner         pName = "I_EXTENSION";
339c120c564SAndrew Turner         pDesc = "Extension packet header.";
340c120c564SAndrew Turner         break;
341c120c564SAndrew Turner 
342c120c564SAndrew Turner     case ETM4_PKT_I_TRACE_INFO:
343c120c564SAndrew Turner         pName = "I_TRACE_INFO";
344c120c564SAndrew Turner         pDesc = "Trace Info.";
345c120c564SAndrew Turner         break;
346c120c564SAndrew Turner 
347c120c564SAndrew Turner     case ETM4_PKT_I_TIMESTAMP:
348c120c564SAndrew Turner         pName = "I_TIMESTAMP";
349c120c564SAndrew Turner         pDesc = "Timestamp.";
350c120c564SAndrew Turner         break;
351c120c564SAndrew Turner 
352c120c564SAndrew Turner     case ETM4_PKT_I_TRACE_ON:
353c120c564SAndrew Turner         pName = "I_TRACE_ON";
354c120c564SAndrew Turner         pDesc = "Trace On.";
355c120c564SAndrew Turner         break;
356c120c564SAndrew Turner 
357c120c564SAndrew Turner     case ETM4_PKT_I_FUNC_RET:
358c120c564SAndrew Turner         pName = "I_FUNC_RET";
359c120c564SAndrew Turner         pDesc = "V8M - function return.";
360c120c564SAndrew Turner         break;
361c120c564SAndrew Turner 
362c120c564SAndrew Turner     case ETM4_PKT_I_EXCEPT:
363c120c564SAndrew Turner         pName = "I_EXCEPT";
364c120c564SAndrew Turner         pDesc = "Exception.";
365c120c564SAndrew Turner         break;
366c120c564SAndrew Turner 
367c120c564SAndrew Turner     case ETM4_PKT_I_EXCEPT_RTN:
368c120c564SAndrew Turner         pName = "I_EXCEPT_RTN";
369c120c564SAndrew Turner         pDesc = "Exception Return.";
370c120c564SAndrew Turner         break;
371c120c564SAndrew Turner 
372*46e6e290SRuslan Bukin     case ETE_PKT_I_TRANS_ST:
373*46e6e290SRuslan Bukin         pName = "I_TRANS_ST";
374*46e6e290SRuslan Bukin         pDesc = "Transaction Start.";
375*46e6e290SRuslan Bukin         break;
376*46e6e290SRuslan Bukin 
377*46e6e290SRuslan Bukin     case ETE_PKT_I_TRANS_COMMIT:
378*46e6e290SRuslan Bukin         pName = "I_TRANS_COMMIT";
379*46e6e290SRuslan Bukin         pDesc = "Transaction Commit.";
380*46e6e290SRuslan Bukin         break;
381*46e6e290SRuslan Bukin 
382c120c564SAndrew Turner     case ETM4_PKT_I_CCNT_F1:
383c120c564SAndrew Turner         pName = "I_CCNT_F1";
384c120c564SAndrew Turner         pDesc = "Cycle Count format 1.";
385c120c564SAndrew Turner         break;
386c120c564SAndrew Turner 
387c120c564SAndrew Turner     case ETM4_PKT_I_CCNT_F2:
388c120c564SAndrew Turner         pName = "I_CCNT_F2";
389c120c564SAndrew Turner         pDesc = "Cycle Count format 2.";
390c120c564SAndrew Turner         break;
391c120c564SAndrew Turner 
392c120c564SAndrew Turner     case ETM4_PKT_I_CCNT_F3:
393c120c564SAndrew Turner         pName = "I_CCNT_F3";
394c120c564SAndrew Turner         pDesc = "Cycle Count format 3.";
395c120c564SAndrew Turner         break;
396c120c564SAndrew Turner 
397c120c564SAndrew Turner     case ETM4_PKT_I_NUM_DS_MKR:
398c120c564SAndrew Turner         pName = "I_NUM_DS_MKR";
399c120c564SAndrew Turner         pDesc = "Data Synchronisation Marker - Numbered.";
400c120c564SAndrew Turner         break;
401c120c564SAndrew Turner 
402c120c564SAndrew Turner     case ETM4_PKT_I_UNNUM_DS_MKR:
403c120c564SAndrew Turner         pName = "I_UNNUM_DS_MKR";
404c120c564SAndrew Turner         pDesc = "Data Synchronisation Marker - Unnumbered.";
405c120c564SAndrew Turner         break;
406c120c564SAndrew Turner 
407c120c564SAndrew Turner     case ETM4_PKT_I_COMMIT:
408c120c564SAndrew Turner         pName = "I_COMMIT";
409c120c564SAndrew Turner         pDesc = "Commit";
410c120c564SAndrew Turner         break;
411c120c564SAndrew Turner 
412c120c564SAndrew Turner     case ETM4_PKT_I_CANCEL_F1:
413c120c564SAndrew Turner         pName = "I_CANCEL_F1";
414c120c564SAndrew Turner         pDesc = "Cancel Format 1.";
415c120c564SAndrew Turner         break;
416c120c564SAndrew Turner 
417b6aadd18SAndrew Turner     case ETM4_PKT_I_CANCEL_F1_MISPRED:
418b6aadd18SAndrew Turner         pName = "I_CANCEL_F1_MISPRED";
419b6aadd18SAndrew Turner         pDesc = "Cancel Format 1 + Mispredict.";
420b6aadd18SAndrew Turner         break;
421b6aadd18SAndrew Turner 
422b6aadd18SAndrew Turner 
423c120c564SAndrew Turner     case ETM4_PKT_I_MISPREDICT:
424c120c564SAndrew Turner         pName = "I_MISPREDICT";
425c120c564SAndrew Turner         pDesc = "Mispredict.";
426c120c564SAndrew Turner         break;
427c120c564SAndrew Turner 
428c120c564SAndrew Turner     case ETM4_PKT_I_CANCEL_F2:
429c120c564SAndrew Turner         pName = "I_CANCEL_F2";
430c120c564SAndrew Turner         pDesc = "Cancel Format 2.";
431c120c564SAndrew Turner         break;
432c120c564SAndrew Turner 
433c120c564SAndrew Turner     case ETM4_PKT_I_CANCEL_F3:
434c120c564SAndrew Turner         pName = "I_CANCEL_F3";
435c120c564SAndrew Turner         pDesc = "Cancel Format 3.";
436c120c564SAndrew Turner         break;
437c120c564SAndrew Turner 
438c120c564SAndrew Turner     case ETM4_PKT_I_COND_I_F2:
439c120c564SAndrew Turner         pName = "I_COND_I_F2";
440c120c564SAndrew Turner         pDesc = "Conditional Instruction, format 2.";
441c120c564SAndrew Turner         break;
442c120c564SAndrew Turner 
443c120c564SAndrew Turner     case ETM4_PKT_I_COND_FLUSH:
444c120c564SAndrew Turner         pName = "I_COND_FLUSH";
445c120c564SAndrew Turner         pDesc = "Conditional Flush.";
446c120c564SAndrew Turner         break;
447c120c564SAndrew Turner 
448c120c564SAndrew Turner     case ETM4_PKT_I_COND_RES_F4:
449c120c564SAndrew Turner         pName = "I_COND_RES_F4";
450c120c564SAndrew Turner         pDesc = "Conditional Result, format 4.";
451c120c564SAndrew Turner         break;
452c120c564SAndrew Turner 
453c120c564SAndrew Turner     case ETM4_PKT_I_COND_RES_F2:
454c120c564SAndrew Turner         pName = "I_COND_RES_F2";
455c120c564SAndrew Turner         pDesc = "Conditional Result, format 2.";
456c120c564SAndrew Turner         break;
457c120c564SAndrew Turner 
458c120c564SAndrew Turner     case ETM4_PKT_I_COND_RES_F3:
459c120c564SAndrew Turner         pName = "I_COND_RES_F3";
460c120c564SAndrew Turner         pDesc = "Conditional Result, format 3.";
461c120c564SAndrew Turner         break;
462c120c564SAndrew Turner 
463c120c564SAndrew Turner     case ETM4_PKT_I_COND_RES_F1:
464c120c564SAndrew Turner         pName = "I_COND_RES_F1";
465c120c564SAndrew Turner         pDesc = "Conditional Result, format 1.";
466c120c564SAndrew Turner         break;
467c120c564SAndrew Turner 
468c120c564SAndrew Turner     case ETM4_PKT_I_COND_I_F1:
469c120c564SAndrew Turner         pName = "I_COND_I_F1";
470c120c564SAndrew Turner         pDesc = "Conditional Instruction, format 1.";
471c120c564SAndrew Turner         break;
472c120c564SAndrew Turner 
473c120c564SAndrew Turner     case ETM4_PKT_I_COND_I_F3:
474c120c564SAndrew Turner         pName = "I_COND_I_F3";
475c120c564SAndrew Turner         pDesc = "Conditional Instruction, format 3.";
476c120c564SAndrew Turner         break;
477c120c564SAndrew Turner 
478c120c564SAndrew Turner     case ETM4_PKT_I_IGNORE:
479c120c564SAndrew Turner         pName = "I_IGNORE";
480c120c564SAndrew Turner         pDesc = "Ignore.";
481c120c564SAndrew Turner         break;
482c120c564SAndrew Turner 
483c120c564SAndrew Turner     case ETM4_PKT_I_EVENT:
484c120c564SAndrew Turner         pName = "I_EVENT";
485c120c564SAndrew Turner         pDesc = "Trace Event.";
486c120c564SAndrew Turner         break;
487c120c564SAndrew Turner 
488c120c564SAndrew Turner     case ETM4_PKT_I_CTXT:
489c120c564SAndrew Turner         pName = "I_CTXT";
490c120c564SAndrew Turner         pDesc = "Context Packet.";
491c120c564SAndrew Turner         break;
492c120c564SAndrew Turner 
493c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_CTXT_L_32IS0:
494c120c564SAndrew Turner         pName = "I_ADDR_CTXT_L_32IS0";
495c120c564SAndrew Turner         pDesc = "Address & Context, Long, 32 bit, IS0.";
496c120c564SAndrew Turner         break;
497c120c564SAndrew Turner 
498c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_CTXT_L_32IS1:
499c120c564SAndrew Turner         pName = "I_ADDR_CTXT_L_32IS1";
500c120c564SAndrew Turner         pDesc = "Address & Context, Long, 32 bit, IS0.";
501c120c564SAndrew Turner         break;
502c120c564SAndrew Turner 
503c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_CTXT_L_64IS0:
504c120c564SAndrew Turner         pName = "I_ADDR_CTXT_L_64IS0";
505c120c564SAndrew Turner         pDesc = "Address & Context, Long, 64 bit, IS0.";
506c120c564SAndrew Turner         break;
507c120c564SAndrew Turner 
508c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_CTXT_L_64IS1:
509c120c564SAndrew Turner         pName = "I_ADDR_CTXT_L_64IS1";
510c120c564SAndrew Turner         pDesc = "Address & Context, Long, 64 bit, IS1.";
511c120c564SAndrew Turner         break;
512c120c564SAndrew Turner 
513*46e6e290SRuslan Bukin     case ETE_PKT_I_TS_MARKER:
514*46e6e290SRuslan Bukin         pName = "I_TS_MARKER";
515*46e6e290SRuslan Bukin         pDesc = "Timestamp Marker";
516*46e6e290SRuslan Bukin         break;
517*46e6e290SRuslan Bukin 
518c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_MATCH:
519c120c564SAndrew Turner         pName = "I_ADDR_MATCH";
520c120c564SAndrew Turner         pDesc = "Exact Address Match.";
521c120c564SAndrew Turner         break;
522c120c564SAndrew Turner 
523c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_S_IS0:
524c120c564SAndrew Turner         pName = "I_ADDR_S_IS0";
525c120c564SAndrew Turner         pDesc = "Address, Short, IS0.";
526c120c564SAndrew Turner         break;
527c120c564SAndrew Turner 
528c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_S_IS1:
529c120c564SAndrew Turner         pName = "I_ADDR_S_IS1";
530c120c564SAndrew Turner         pDesc = "Address, Short, IS1.";
531c120c564SAndrew Turner         break;
532c120c564SAndrew Turner 
533c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_L_32IS0:
534c120c564SAndrew Turner         pName = "I_ADDR_L_32IS0";
535c120c564SAndrew Turner         pDesc = "Address, Long, 32 bit, IS0.";
536c120c564SAndrew Turner         break;
537c120c564SAndrew Turner 
538c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_L_32IS1:
539c120c564SAndrew Turner         pName = "I_ADDR_L_32IS1";
540c120c564SAndrew Turner         pDesc = "Address, Long, 32 bit, IS1.";
541c120c564SAndrew Turner         break;
542c120c564SAndrew Turner 
543c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_L_64IS0:
544c120c564SAndrew Turner         pName = "I_ADDR_L_64IS0";
545c120c564SAndrew Turner         pDesc = "Address, Long, 64 bit, IS0.";
546c120c564SAndrew Turner         break;
547c120c564SAndrew Turner 
548c120c564SAndrew Turner     case ETM4_PKT_I_ADDR_L_64IS1:
549c120c564SAndrew Turner         pName = "I_ADDR_L_64IS1";
550c120c564SAndrew Turner         pDesc = "Address, Long, 64 bit, IS1.";
551c120c564SAndrew Turner         break;
552c120c564SAndrew Turner 
553c120c564SAndrew Turner     case ETM4_PKT_I_Q:
554c120c564SAndrew Turner         pName = "I_Q";
555c120c564SAndrew Turner         pDesc = "Q Packet.";
556c120c564SAndrew Turner         break;
557c120c564SAndrew Turner 
558*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_MATCH:
559*46e6e290SRuslan Bukin         pName = "I_SRC_ADDR_MATCH";
560*46e6e290SRuslan Bukin         pDesc = "Exact Source Address Match.";
561*46e6e290SRuslan Bukin         break;
562*46e6e290SRuslan Bukin 
563*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_S_IS0:
564*46e6e290SRuslan Bukin         pName = "I_SRC_ADDR_S_IS0";
565*46e6e290SRuslan Bukin         pDesc = "Source Address, Short, IS0.";
566*46e6e290SRuslan Bukin         break;
567*46e6e290SRuslan Bukin 
568*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_S_IS1:
569*46e6e290SRuslan Bukin         pName = "I_SRC_ADDR_S_IS1";
570*46e6e290SRuslan Bukin         pDesc = "Source Address, Short, IS1.";
571*46e6e290SRuslan Bukin         break;
572*46e6e290SRuslan Bukin 
573*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_L_32IS0:
574*46e6e290SRuslan Bukin         pName = "I_SCR_ADDR_L_32IS0";
575*46e6e290SRuslan Bukin         pDesc = "Source Address, Long, 32 bit, IS0.";
576*46e6e290SRuslan Bukin         break;
577*46e6e290SRuslan Bukin 
578*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_L_32IS1:
579*46e6e290SRuslan Bukin         pName = "I_SRC_ADDR_L_32IS1";
580*46e6e290SRuslan Bukin         pDesc = "Source Address, Long, 32 bit, IS1.";
581*46e6e290SRuslan Bukin         break;
582*46e6e290SRuslan Bukin 
583*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_L_64IS0:
584*46e6e290SRuslan Bukin         pName = "I_SRC_ADDR_L_64IS0";
585*46e6e290SRuslan Bukin         pDesc = "Source Address, Long, 64 bit, IS0.";
586*46e6e290SRuslan Bukin         break;
587*46e6e290SRuslan Bukin 
588*46e6e290SRuslan Bukin     case ETE_PKT_I_SRC_ADDR_L_64IS1:
589*46e6e290SRuslan Bukin         pName = "I_SRC_ADDR_L_64IS1";
590*46e6e290SRuslan Bukin         pDesc = "Source Address, Long, 64 bit, IS1.";
591*46e6e290SRuslan Bukin         break;
592*46e6e290SRuslan Bukin 
593c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F6:
594c120c564SAndrew Turner         pName = "I_ATOM_F6";
595c120c564SAndrew Turner         pDesc = "Atom format 6.";
596c120c564SAndrew Turner         break;
597c120c564SAndrew Turner 
598c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F5:
599c120c564SAndrew Turner         pName = "I_ATOM_F5";
600c120c564SAndrew Turner         pDesc = "Atom format 5.";
601c120c564SAndrew Turner         break;
602c120c564SAndrew Turner 
603c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F2:
604c120c564SAndrew Turner         pName = "I_ATOM_F2";
605c120c564SAndrew Turner         pDesc = "Atom format 2.";
606c120c564SAndrew Turner         break;
607c120c564SAndrew Turner 
608c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F4:
609c120c564SAndrew Turner         pName = "I_ATOM_F4";
610c120c564SAndrew Turner         pDesc = "Atom format 4.";
611c120c564SAndrew Turner         break;
612c120c564SAndrew Turner 
613c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F1:
614c120c564SAndrew Turner         pName = "I_ATOM_F1";
615c120c564SAndrew Turner         pDesc = "Atom format 1.";
616c120c564SAndrew Turner         break;
617c120c564SAndrew Turner 
618c120c564SAndrew Turner     case ETM4_PKT_I_ATOM_F3:
619c120c564SAndrew Turner         pName = "I_ATOM_F3";
620c120c564SAndrew Turner         pDesc = "Atom format 3.";
621c120c564SAndrew Turner         break;
622c120c564SAndrew Turner 
623c120c564SAndrew Turner     case ETM4_PKT_I_ASYNC:
624c120c564SAndrew Turner         pName = "I_ASYNC";
625c120c564SAndrew Turner         pDesc = "Alignment Synchronisation.";
626c120c564SAndrew Turner         break;
627c120c564SAndrew Turner 
628c120c564SAndrew Turner     case ETM4_PKT_I_DISCARD:
629c120c564SAndrew Turner         pName = "I_DISCARD";
630c120c564SAndrew Turner         pDesc = "Discard.";
631c120c564SAndrew Turner         break;
632c120c564SAndrew Turner 
633c120c564SAndrew Turner     case ETM4_PKT_I_OVERFLOW:
634c120c564SAndrew Turner         pName = "I_OVERFLOW";
635c120c564SAndrew Turner         pDesc = "Overflow.";
636c120c564SAndrew Turner         break;
637c120c564SAndrew Turner 
638*46e6e290SRuslan Bukin     case ETE_PKT_I_PE_RESET:
639*46e6e290SRuslan Bukin         pName = "I_PE_RESET";
640*46e6e290SRuslan Bukin         pDesc = "PE Reset.";
641*46e6e290SRuslan Bukin         break;
642*46e6e290SRuslan Bukin 
643*46e6e290SRuslan Bukin     case ETE_PKT_I_TRANS_FAIL:
644*46e6e290SRuslan Bukin         pName = "I_TRANS_FAIL";
645*46e6e290SRuslan Bukin         pDesc = "Transaction Fail.";
646*46e6e290SRuslan Bukin         break;
647*46e6e290SRuslan Bukin 
648*46e6e290SRuslan Bukin     case ETE_PKT_I_ITE:
649*46e6e290SRuslan Bukin         pName = "I_ITE";
650*46e6e290SRuslan Bukin         pDesc = "Instrumentation";
651*46e6e290SRuslan Bukin         break;
652*46e6e290SRuslan Bukin 
653c120c564SAndrew Turner     default:
654c120c564SAndrew Turner         break;
655c120c564SAndrew Turner     }
656c120c564SAndrew Turner 
657c120c564SAndrew Turner     if(ppDesc) *ppDesc = pDesc;
658c120c564SAndrew Turner     return pName;
659c120c564SAndrew Turner }
660c120c564SAndrew Turner 
contextStr(std::string & ctxtStr) const661c120c564SAndrew Turner void EtmV4ITrcPacket::contextStr(std::string &ctxtStr) const
662c120c564SAndrew Turner {
663c120c564SAndrew Turner     ctxtStr = "";
664c120c564SAndrew Turner     if(pkt_valid.bits.context_valid)
665c120c564SAndrew Turner     {
666c120c564SAndrew Turner         std::ostringstream oss;
667c120c564SAndrew Turner         if(context.updated)
668c120c564SAndrew Turner         {
669c120c564SAndrew Turner             oss << "Ctxt: " << (context.SF ? "AArch64," : "AArch32, ") << "EL" << context.EL << ", " << (context.NS ? "NS; " : "S; ");
670c120c564SAndrew Turner             if(context.updated_c)
671c120c564SAndrew Turner             {
672c120c564SAndrew Turner                 oss << "CID=0x" << std::hex << std::setfill('0') << std::setw(8) << context.ctxtID << "; ";
673c120c564SAndrew Turner             }
674c120c564SAndrew Turner             if(context.updated_v)
675c120c564SAndrew Turner             {
676c120c564SAndrew Turner                 oss << "VMID=0x" << std::hex << std::setfill('0') << std::setw(4) << context.VMID << "; ";
677c120c564SAndrew Turner             }
678c120c564SAndrew Turner         }
679c120c564SAndrew Turner         else
680c120c564SAndrew Turner         {
681c120c564SAndrew Turner             oss << "Ctxt: Same";
682c120c564SAndrew Turner         }
683c120c564SAndrew Turner         ctxtStr = oss.str();
684c120c564SAndrew Turner     }
685c120c564SAndrew Turner }
686c120c564SAndrew Turner 
atomSeq(std::string & valStr) const687c120c564SAndrew Turner void EtmV4ITrcPacket::atomSeq(std::string &valStr) const
688c120c564SAndrew Turner {
689c120c564SAndrew Turner     std::ostringstream oss;
690c120c564SAndrew Turner     uint32_t bitpattern = atom.En_bits;
691c120c564SAndrew Turner     for(int i = 0; i < atom.num; i++)
692c120c564SAndrew Turner     {
693c120c564SAndrew Turner         oss << ((bitpattern & 0x1) ? "E" : "N");
694c120c564SAndrew Turner         bitpattern >>= 1;
695c120c564SAndrew Turner     }
696c120c564SAndrew Turner     valStr = oss.str();
697c120c564SAndrew Turner }
698c120c564SAndrew Turner 
addrMatchIdx(std::string & valStr) const699c120c564SAndrew Turner void EtmV4ITrcPacket::addrMatchIdx(std::string &valStr) const
700c120c564SAndrew Turner {
701c120c564SAndrew Turner     std::ostringstream oss;
702c120c564SAndrew Turner     oss << "[" << (uint16_t)addr_exact_match_idx << "]";
703c120c564SAndrew Turner     valStr = oss.str();
704c120c564SAndrew Turner }
705c120c564SAndrew Turner 
exceptionInfo(std::string & valStr) const706c120c564SAndrew Turner void EtmV4ITrcPacket::exceptionInfo(std::string &valStr) const
707c120c564SAndrew Turner {
708c120c564SAndrew Turner     std::ostringstream oss;
709c120c564SAndrew Turner 
710c120c564SAndrew Turner     static const char *ARv8Excep[] = {
711c120c564SAndrew Turner         "PE Reset", "Debug Halt", "Call", "Trap",
712c120c564SAndrew Turner         "System Error", "Reserved", "Inst Debug", "Data Debug",
713c120c564SAndrew Turner         "Reserved", "Reserved", "Alignment", "Inst Fault",
714c120c564SAndrew Turner         "Data Fault", "Reserved", "IRQ", "FIQ"
715c120c564SAndrew Turner     };
716c120c564SAndrew Turner 
717c120c564SAndrew Turner     static const char *MExcep[] = {
718c120c564SAndrew Turner         "Reserved", "PE Reset", "NMI", "HardFault",
719c120c564SAndrew Turner         "MemManage", "BusFault", "UsageFault", "Reserved",
720c120c564SAndrew Turner         "Reserved","Reserved","Reserved","SVC",
721c120c564SAndrew Turner         "DebugMonitor", "Reserved","PendSV","SysTick",
722c120c564SAndrew Turner         "IRQ0","IRQ1","IRQ2","IRQ3",
723c120c564SAndrew Turner         "IRQ4","IRQ5","IRQ6","IRQ7",
724c120c564SAndrew Turner         "DebugHalt", "LazyFP Push", "Lockup", "Reserved",
725c120c564SAndrew Turner         "Reserved","Reserved","Reserved","Reserved"
726c120c564SAndrew Turner     };
727c120c564SAndrew Turner 
728c120c564SAndrew Turner     if(exception_info.m_type == 0)
729c120c564SAndrew Turner     {
730c120c564SAndrew Turner         if(exception_info.exceptionType < 0x10)
731c120c564SAndrew Turner             oss << " " << ARv8Excep[exception_info.exceptionType] << ";";
732c120c564SAndrew Turner         else
733c120c564SAndrew Turner             oss << " Reserved;";
734c120c564SAndrew Turner 
735c120c564SAndrew Turner     }
736c120c564SAndrew Turner     else
737c120c564SAndrew Turner     {
738c120c564SAndrew Turner         if(exception_info.exceptionType < 0x20)
739c120c564SAndrew Turner             oss << " " << MExcep[exception_info.exceptionType] << ";";
740c120c564SAndrew Turner         else if((exception_info.exceptionType >= 0x208) && (exception_info.exceptionType <= 0x3EF))
741c120c564SAndrew Turner             oss << " IRQ" << (int)(exception_info.exceptionType - 0x200) << ";";
742c120c564SAndrew Turner         else
743c120c564SAndrew Turner             oss << " Reserved;";
744c120c564SAndrew Turner         if(exception_info.m_fault_pending)
745c120c564SAndrew Turner             oss << " Fault Pending;";
746c120c564SAndrew Turner     }
747c120c564SAndrew Turner 
748c120c564SAndrew Turner     if(exception_info.addr_interp == 0x1)
749c120c564SAndrew Turner         oss << " Ret Addr Follows;";
750c120c564SAndrew Turner     else if(exception_info.addr_interp == 0x2)
751c120c564SAndrew Turner         oss << " Ret Addr Follows, Match Prev;";
752c120c564SAndrew Turner 
753c120c564SAndrew Turner     valStr = oss.str();
754c120c564SAndrew Turner }
755c120c564SAndrew Turner 
operator =(const ocsd_etmv4_i_pkt * p_pkt)756c120c564SAndrew Turner EtmV4ITrcPacket &EtmV4ITrcPacket::operator =(const ocsd_etmv4_i_pkt* p_pkt)
757c120c564SAndrew Turner {
758c120c564SAndrew Turner     *dynamic_cast<ocsd_etmv4_i_pkt *>(this) = *p_pkt;
759c120c564SAndrew Turner     return *this;
760c120c564SAndrew Turner }
761c120c564SAndrew Turner 
762c120c564SAndrew Turner /* End of File trc_pkt_elem_etmv4i.cpp */
763