thread_state.hh (8777:dd43f1c9fa0a) thread_state.hh (8793:5f25086326ac)
1/*
2 * Copyright (c) 2006 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 21 unchanged lines hidden (view full) ---

30
31#ifndef __CPU_O3_THREAD_STATE_HH__
32#define __CPU_O3_THREAD_STATE_HH__
33
34#include "base/callback.hh"
35#include "base/output.hh"
36#include "cpu/thread_context.hh"
37#include "cpu/thread_state.hh"
1/*
2 * Copyright (c) 2006 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 21 unchanged lines hidden (view full) ---

30
31#ifndef __CPU_O3_THREAD_STATE_HH__
32#define __CPU_O3_THREAD_STATE_HH__
33
34#include "base/callback.hh"
35#include "base/output.hh"
36#include "cpu/thread_context.hh"
37#include "cpu/thread_state.hh"
38#include "sim/full_system.hh"
38#include "sim/sim_exit.hh"
39
40class EndQuiesceEvent;
41class Event;
42class FunctionalMemory;
43class FunctionProfile;
44class Process;
45class ProfileNode;

--- 23 unchanged lines hidden (view full) ---

69 * thus able to be externally updated without squashing.
70 */
71 bool trapPending;
72
73 O3ThreadState(O3CPU *_cpu, int _thread_num, Process *_process)
74 : ThreadState(_cpu, _thread_num, _process),
75 cpu(_cpu), inSyscall(0), trapPending(0)
76 {
39#include "sim/sim_exit.hh"
40
41class EndQuiesceEvent;
42class Event;
43class FunctionalMemory;
44class FunctionProfile;
45class Process;
46class ProfileNode;

--- 23 unchanged lines hidden (view full) ---

70 * thus able to be externally updated without squashing.
71 */
72 bool trapPending;
73
74 O3ThreadState(O3CPU *_cpu, int _thread_num, Process *_process)
75 : ThreadState(_cpu, _thread_num, _process),
76 cpu(_cpu), inSyscall(0), trapPending(0)
77 {
77#if FULL_SYSTEM
78 if (cpu->params()->profile) {
79 profile = new FunctionProfile(cpu->params()->system->kernelSymtab);
80 Callback *cb =
81 new MakeCallback<O3ThreadState,
82 &O3ThreadState::dumpFuncProfile>(this);
83 registerExitCallback(cb);
84 }
78 if (FullSystem) {
79 if (cpu->params()->profile) {
80 profile = new FunctionProfile(
81 cpu->params()->system->kernelSymtab);
82 Callback *cb =
83 new MakeCallback<O3ThreadState,
84 &O3ThreadState::dumpFuncProfile>(this);
85 registerExitCallback(cb);
86 }
85
87
86 // let's fill with a dummy node for now so we don't get a segfault
87 // on the first cycle when there's no node available.
88 static ProfileNode dummyNode;
89 profileNode = &dummyNode;
90 profilePC = 3;
91#endif
88 // let's fill with a dummy node for now so we don't get a segfault
89 // on the first cycle when there's no node available.
90 static ProfileNode dummyNode;
91 profileNode = &dummyNode;
92 profilePC = 3;
93 }
92 }
93
94 /** Pointer to the ThreadContext of this thread. */
95 ThreadContext *tc;
96
97 /** Returns a pointer to the TC of this thread. */
98 ThreadContext *getTC() { return tc; }
99
100 /** Handles the syscall. */
101 void syscall(int64_t callnum) { process->syscall(callnum, tc); }
102
103 void dumpFuncProfile()
104 {
105 std::ostream *os = simout.create(csprintf("profile.%s.dat", cpu->name()));
106 profile->dump(tc, *os);
107 }
108};
109
110#endif // __CPU_O3_THREAD_STATE_HH__
94 }
95
96 /** Pointer to the ThreadContext of this thread. */
97 ThreadContext *tc;
98
99 /** Returns a pointer to the TC of this thread. */
100 ThreadContext *getTC() { return tc; }
101
102 /** Handles the syscall. */
103 void syscall(int64_t callnum) { process->syscall(callnum, tc); }
104
105 void dumpFuncProfile()
106 {
107 std::ostream *os = simout.create(csprintf("profile.%s.dat", cpu->name()));
108 profile->dump(tc, *os);
109 }
110};
111
112#endif // __CPU_O3_THREAD_STATE_HH__