insttracer.hh revision 4776:8c8407243a2c
12810Srdreslin@umich.edu/* 212665Snikos.nikoleris@arm.com * Copyright (c) 2001-2005 The Regents of The University of Michigan 39347SAndreas.Sandberg@arm.com * All rights reserved. 49347SAndreas.Sandberg@arm.com * 59347SAndreas.Sandberg@arm.com * Redistribution and use in source and binary forms, with or without 69347SAndreas.Sandberg@arm.com * modification, are permitted provided that the following conditions are 79347SAndreas.Sandberg@arm.com * met: redistributions of source code must retain the above copyright 89347SAndreas.Sandberg@arm.com * notice, this list of conditions and the following disclaimer; 99347SAndreas.Sandberg@arm.com * redistributions in binary form must reproduce the above copyright 109347SAndreas.Sandberg@arm.com * notice, this list of conditions and the following disclaimer in the 119347SAndreas.Sandberg@arm.com * documentation and/or other materials provided with the distribution; 129347SAndreas.Sandberg@arm.com * neither the name of the copyright holders nor the names of its 139347SAndreas.Sandberg@arm.com * contributors may be used to endorse or promote products derived from 142810Srdreslin@umich.edu * this software without specific prior written permission. 152810Srdreslin@umich.edu * 162810Srdreslin@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172810Srdreslin@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182810Srdreslin@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192810Srdreslin@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202810Srdreslin@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212810Srdreslin@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222810Srdreslin@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232810Srdreslin@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242810Srdreslin@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252810Srdreslin@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262810Srdreslin@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272810Srdreslin@umich.edu * 282810Srdreslin@umich.edu * Authors: Steve Reinhardt 292810Srdreslin@umich.edu * Nathan Binkert 302810Srdreslin@umich.edu */ 312810Srdreslin@umich.edu 322810Srdreslin@umich.edu#ifndef __INSTRECORD_HH__ 332810Srdreslin@umich.edu#define __INSTRECORD_HH__ 342810Srdreslin@umich.edu 352810Srdreslin@umich.edu#include "base/trace.hh" 362810Srdreslin@umich.edu#include "cpu/inst_seq.hh" // for InstSeqNum 372810Srdreslin@umich.edu#include "cpu/static_inst.hh" 382810Srdreslin@umich.edu#include "sim/host.hh" 392810Srdreslin@umich.edu#include "sim/sim_object.hh" 402810Srdreslin@umich.edu 4112665Snikos.nikoleris@arm.comclass ThreadContext; 422810Srdreslin@umich.edu 432810Srdreslin@umich.edunamespace Trace { 442810Srdreslin@umich.edu 452810Srdreslin@umich.educlass InstRecord 462810Srdreslin@umich.edu{ 472810Srdreslin@umich.edu protected: 482810Srdreslin@umich.edu Tick when; 496216Snate@binkert.org 506216Snate@binkert.org // The following fields are initialized by the constructor and 512810Srdreslin@umich.edu // thus guaranteed to be valid. 5212727Snikos.nikoleris@arm.com ThreadContext *thread; 5312728Snikos.nikoleris@arm.com // need to make this ref-counted so it doesn't go away before we 5412727Snikos.nikoleris@arm.com // dump the record 5511168Sandreas.hansson@arm.com StaticInstPtr staticInst; 5613163Sodanrc@yahoo.com.br Addr PC; 572810Srdreslin@umich.edu bool misspeculating; 5812727Snikos.nikoleris@arm.com 5912665Snikos.nikoleris@arm.com // The remaining fields are only valid for particular instruction 6012727Snikos.nikoleris@arm.com // types (e.g, addresses for memory ops) or when particular 6112727Snikos.nikoleris@arm.com // options are enabled (e.g., tracing full register contents). 6212727Snikos.nikoleris@arm.com // Each data field has an associated valid flag to indicate 6311486Snikos.nikoleris@arm.com // whether the data field is valid. 648229Snate@binkert.org Addr addr; 652810Srdreslin@umich.edu bool addr_valid; 669796Sprakash.ramrakhyani@arm.com 672810Srdreslin@umich.edu union { 6812665Snikos.nikoleris@arm.com uint64_t as_int; 6912665Snikos.nikoleris@arm.com double as_double; 7012665Snikos.nikoleris@arm.com } data; 7112665Snikos.nikoleris@arm.com enum { 7212773Sodanrc@yahoo.com.br DataInvalid = 0, 7312773Sodanrc@yahoo.com.br DataInt8 = 1, // set to equal number of bytes 7412665Snikos.nikoleris@arm.com DataInt16 = 2, 7512665Snikos.nikoleris@arm.com DataInt32 = 4, 7612665Snikos.nikoleris@arm.com DataInt64 = 8, 7712665Snikos.nikoleris@arm.com DataDouble = 3 7812665Snikos.nikoleris@arm.com } data_status; 7912665Snikos.nikoleris@arm.com 802810Srdreslin@umich.edu InstSeqNum fetch_seq; 812810Srdreslin@umich.edu bool fetch_seq_valid; 822810Srdreslin@umich.edu 832810Srdreslin@umich.edu InstSeqNum cp_seq; 842810Srdreslin@umich.edu bool cp_seq_valid; 8512636Sodanrc@yahoo.com.br 8613162Sodanrc@yahoo.com.br public: 8713162Sodanrc@yahoo.com.br InstRecord(Tick _when, ThreadContext *_thread, 882810Srdreslin@umich.edu const StaticInstPtr &_staticInst, 892810Srdreslin@umich.edu Addr _pc, bool spec) 902810Srdreslin@umich.edu : when(_when), thread(_thread), 912810Srdreslin@umich.edu staticInst(_staticInst), PC(_pc), 922810Srdreslin@umich.edu misspeculating(spec) 9312665Snikos.nikoleris@arm.com { 9412665Snikos.nikoleris@arm.com data_status = DataInvalid; 952810Srdreslin@umich.edu addr_valid = false; 962810Srdreslin@umich.edu 972810Srdreslin@umich.edu fetch_seq_valid = false; 982810Srdreslin@umich.edu cp_seq_valid = false; 992810Srdreslin@umich.edu } 1002810Srdreslin@umich.edu 1012810Srdreslin@umich.edu virtual ~InstRecord() { } 1022810Srdreslin@umich.edu 1032810Srdreslin@umich.edu void setAddr(Addr a) { addr = a; addr_valid = true; } 1042810Srdreslin@umich.edu 1052810Srdreslin@umich.edu void setData(Twin64_t d) { data.as_int = d.a; data_status = DataInt64; } 1066227Snate@binkert.org void setData(Twin32_t d) { data.as_int = d.a; data_status = DataInt32; } 1072810Srdreslin@umich.edu void setData(uint64_t d) { data.as_int = d; data_status = DataInt64; } 1082810Srdreslin@umich.edu void setData(uint32_t d) { data.as_int = d; data_status = DataInt32; } 1092810Srdreslin@umich.edu void setData(uint16_t d) { data.as_int = d; data_status = DataInt16; } 1102810Srdreslin@umich.edu void setData(uint8_t d) { data.as_int = d; data_status = DataInt8; } 1112810Srdreslin@umich.edu 1122810Srdreslin@umich.edu void setData(int64_t d) { setData((uint64_t)d); } 1132810Srdreslin@umich.edu void setData(int32_t d) { setData((uint32_t)d); } 1142810Srdreslin@umich.edu void setData(int16_t d) { setData((uint16_t)d); } 1152810Srdreslin@umich.edu void setData(int8_t d) { setData((uint8_t)d); } 1162810Srdreslin@umich.edu 11712775Snikos.nikoleris@arm.com void setData(double d) { data.as_double = d; data_status = DataDouble; } 11812775Snikos.nikoleris@arm.com 11912775Snikos.nikoleris@arm.com void setFetchSeq(InstSeqNum seq) 12012775Snikos.nikoleris@arm.com { fetch_seq = seq; fetch_seq_valid = true; } 12112775Snikos.nikoleris@arm.com 12212775Snikos.nikoleris@arm.com void setCPSeq(InstSeqNum seq) 12312775Snikos.nikoleris@arm.com { cp_seq = seq; cp_seq_valid = true; } 12412775Snikos.nikoleris@arm.com 12512775Snikos.nikoleris@arm.com virtual void dump() = 0; 12612775Snikos.nikoleris@arm.com}; 1272810Srdreslin@umich.edu 1282810Srdreslin@umich.educlass InstTracer : public SimObject 12912775Snikos.nikoleris@arm.com{ 1302810Srdreslin@umich.edu public: 1312810Srdreslin@umich.edu InstTracer(const std::string & name) : SimObject(name) 1322810Srdreslin@umich.edu {} 13312648Sodanrc@yahoo.com.br 1342810Srdreslin@umich.edu virtual ~InstTracer() 1352810Srdreslin@umich.edu {}; 1362810Srdreslin@umich.edu 1372810Srdreslin@umich.edu virtual InstRecord * 1382810Srdreslin@umich.edu getInstRecord(Tick when, ThreadContext *tc, 13912648Sodanrc@yahoo.com.br const StaticInstPtr staticInst, Addr pc) = 0; 14012648Sodanrc@yahoo.com.br}; 14112648Sodanrc@yahoo.com.br 14212648Sodanrc@yahoo.com.br 14312648Sodanrc@yahoo.com.br 14412648Sodanrc@yahoo.com.br}; // namespace Trace 14512636Sodanrc@yahoo.com.br 1469796Sprakash.ramrakhyani@arm.com#endif // __INSTRECORD_HH__ 1479796Sprakash.ramrakhyani@arm.com