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