thread_state.hh revision 2292
19022Sgblack@eecs.umich.edu 29022Sgblack@eecs.umich.edu#ifndef __CPU_THREAD_STATE_HH__ 39022Sgblack@eecs.umich.edu#define __CPU_THREAD_STATE_HH__ 49022Sgblack@eecs.umich.edu 59022Sgblack@eecs.umich.edu#include "cpu/exec_context.hh" 69022Sgblack@eecs.umich.edu 79022Sgblack@eecs.umich.edu#if FULL_SYSTEM 89022Sgblack@eecs.umich.educlass EndQuiesceEvent; 99022Sgblack@eecs.umich.educlass FunctionProfile; 109022Sgblack@eecs.umich.educlass ProfileNode; 119022Sgblack@eecs.umich.edu#else 129022Sgblack@eecs.umich.educlass Process; 139022Sgblack@eecs.umich.educlass FunctionalMemory; 149022Sgblack@eecs.umich.edu#endif 159022Sgblack@eecs.umich.edu 169022Sgblack@eecs.umich.edustruct ThreadState { 179022Sgblack@eecs.umich.edu#if FULL_SYSTEM 189022Sgblack@eecs.umich.edu ThreadState(int _cpuId, int _tid, FunctionalMemory *_mem) 199022Sgblack@eecs.umich.edu : cpuId(_cpuId), tid(_tid), mem(_mem), lastActivate(0), lastSuspend(0), 209022Sgblack@eecs.umich.edu profile(NULL), profileNode(NULL), profilePC(0), quiesceEvent(NULL) 219022Sgblack@eecs.umich.edu#else 229022Sgblack@eecs.umich.edu ThreadState(int _cpuId, int _tid, FunctionalMemory *_mem, 239022Sgblack@eecs.umich.edu Process *_process, short _asid) 249022Sgblack@eecs.umich.edu : cpuId(_cpuId), tid(_tid), mem(_mem), process(_process), asid(_asid) 259022Sgblack@eecs.umich.edu#endif 269022Sgblack@eecs.umich.edu { 279022Sgblack@eecs.umich.edu funcExeInst = 0; 289022Sgblack@eecs.umich.edu storeCondFailures = 0; 299022Sgblack@eecs.umich.edu } 309022Sgblack@eecs.umich.edu 319022Sgblack@eecs.umich.edu ExecContext::Status status; 329023Sgblack@eecs.umich.edu 339023Sgblack@eecs.umich.edu int cpuId; 349023Sgblack@eecs.umich.edu 359023Sgblack@eecs.umich.edu // Index of hardware thread context on the CPU that this represents. 369023Sgblack@eecs.umich.edu int tid; 379022Sgblack@eecs.umich.edu 389022Sgblack@eecs.umich.edu Counter numInst; 399022Sgblack@eecs.umich.edu Stats::Scalar<> numInsts; 409376Sgblack@eecs.umich.edu Stats::Scalar<> numMemRefs; 419376Sgblack@eecs.umich.edu 429376Sgblack@eecs.umich.edu // number of simulated loads 439023Sgblack@eecs.umich.edu Counter numLoad; 449023Sgblack@eecs.umich.edu Counter startNumLoad; 459023Sgblack@eecs.umich.edu 469376Sgblack@eecs.umich.edu FunctionalMemory *mem; // functional storage for process address space 479376Sgblack@eecs.umich.edu 489376Sgblack@eecs.umich.edu#if FULL_SYSTEM 499023Sgblack@eecs.umich.edu Tick lastActivate; 509023Sgblack@eecs.umich.edu Tick lastSuspend; 5110593Sgabeblack@google.com 529023Sgblack@eecs.umich.edu FunctionProfile *profile; 539023Sgblack@eecs.umich.edu ProfileNode *profileNode; 549023Sgblack@eecs.umich.edu Addr profilePC; 559023Sgblack@eecs.umich.edu 569023Sgblack@eecs.umich.edu EndQuiesceEvent *quiesceEvent; 579023Sgblack@eecs.umich.edu 589023Sgblack@eecs.umich.edu#else 599023Sgblack@eecs.umich.edu Process *process; 609023Sgblack@eecs.umich.edu 619376Sgblack@eecs.umich.edu // Address space ID. Note that this is used for TIMING cache 629376Sgblack@eecs.umich.edu // simulation only; all functional memory accesses should use 639376Sgblack@eecs.umich.edu // one of the FunctionalMemory pointers above. 649376Sgblack@eecs.umich.edu short asid; 659376Sgblack@eecs.umich.edu 669376Sgblack@eecs.umich.edu#endif 679376Sgblack@eecs.umich.edu 689023Sgblack@eecs.umich.edu /** 699023Sgblack@eecs.umich.edu * Temporary storage to pass the source address from copy_load to 709376Sgblack@eecs.umich.edu * copy_store. 719376Sgblack@eecs.umich.edu * @todo Remove this temporary when we have a better way to do it. 729023Sgblack@eecs.umich.edu */ 739023Sgblack@eecs.umich.edu Addr copySrcAddr; 749023Sgblack@eecs.umich.edu /** 759023Sgblack@eecs.umich.edu * Temp storage for the physical source address of a copy. 769023Sgblack@eecs.umich.edu * @todo Remove this temporary when we have a better way to do it. 779023Sgblack@eecs.umich.edu */ 789023Sgblack@eecs.umich.edu Addr copySrcPhysAddr; 799023Sgblack@eecs.umich.edu 809023Sgblack@eecs.umich.edu /* 819376Sgblack@eecs.umich.edu * number of executed instructions, for matching with syscall trace 829376Sgblack@eecs.umich.edu * points in EIO files. 839376Sgblack@eecs.umich.edu */ 849376Sgblack@eecs.umich.edu Counter funcExeInst; 859376Sgblack@eecs.umich.edu 869376Sgblack@eecs.umich.edu // 879376Sgblack@eecs.umich.edu // Count failed store conditionals so we can warn of apparent 889376Sgblack@eecs.umich.edu // application deadlock situations. 899023Sgblack@eecs.umich.edu unsigned storeCondFailures; 909376Sgblack@eecs.umich.edu}; 919023Sgblack@eecs.umich.edu 929376Sgblack@eecs.umich.edu#endif // __CPU_THREAD_STATE_HH__ 939023Sgblack@eecs.umich.edu