Fix for FS O3CPU compile ... missing forward class declaration/header file after files got split for ISA-independence
src/cpu/o3/alpha/thread_context.hh: Use 'this' when accessing cpu src/cpu/o3/cpu.hh: add numActiveThreds function src/cpu/o3/thread_context.hh: forward class declarations src/cpu/o3/thread_context_impl.hh: add quiesce event header file src/cpu/thread_context.hh: add exit() function to thread context (read comments in file) src/sim/syscall_emul.cc: adjust exitFunc syscall --HG-- extra : convert_revision : 323dc871e2b4f4ee5036be388ceb6634cd85a83e
This commit is contained in:
parent
19083bc4ce
commit
f4c5609988
6 changed files with 40 additions and 6 deletions
|
@ -37,21 +37,21 @@ class AlphaTC : public O3ThreadContext<Impl>
|
|||
public:
|
||||
#if FULL_SYSTEM
|
||||
/** Returns a pointer to the ITB. */
|
||||
virtual AlphaITB *getITBPtr() { return cpu->itb; }
|
||||
virtual AlphaITB *getITBPtr() { return this->cpu->itb; }
|
||||
|
||||
/** Returns a pointer to the DTB. */
|
||||
virtual AlphaDTB *getDTBPtr() { return cpu->dtb; }
|
||||
virtual AlphaDTB *getDTBPtr() { return this->cpu->dtb; }
|
||||
|
||||
/** Returns pointer to the quiesce event. */
|
||||
virtual EndQuiesceEvent *getQuiesceEvent()
|
||||
{
|
||||
return thread->quiesceEvent;
|
||||
return this->thread->quiesceEvent;
|
||||
}
|
||||
|
||||
/** Returns if the thread is currently in PAL mode, based on
|
||||
* the PC's value. */
|
||||
virtual bool inPalMode()
|
||||
{ return TheISA::PcPAL(cpu->readPC(thread->readTid())); }
|
||||
{ return TheISA::PcPAL(this->cpu->readPC(this->thread->readTid())); }
|
||||
#endif
|
||||
|
||||
virtual uint64_t readNextNPC()
|
||||
|
@ -68,4 +68,20 @@ class AlphaTC : public O3ThreadContext<Impl>
|
|||
virtual void changeRegFileContext(TheISA::RegFile::ContextParam param,
|
||||
TheISA::RegFile::ContextVal val)
|
||||
{ panic("Not supported on Alpha!"); }
|
||||
|
||||
|
||||
// This function exits the thread context in the CPU and returns
|
||||
// 1 if the CPU has no more active threads (meaning it's OK to exit);
|
||||
// Used in syscall-emulation mode when a thread executes the 'exit'
|
||||
// syscall.
|
||||
virtual int exit()
|
||||
{
|
||||
this->cpu->deallocateContext(this->thread->readTid());
|
||||
|
||||
// If there are still threads executing in the system
|
||||
if (this->cpu->numActiveThreads())
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -214,6 +214,10 @@ class FullO3CPU : public BaseO3CPU
|
|||
/** Initialize the CPU */
|
||||
void init();
|
||||
|
||||
/** Returns the Number of Active Threads in the CPU */
|
||||
int numActiveThreads()
|
||||
{ return activeThreads.size(); }
|
||||
|
||||
/** Add Thread to Active Threads List */
|
||||
void activateThread(unsigned int tid);
|
||||
|
||||
|
|
|
@ -34,6 +34,13 @@
|
|||
|
||||
#include "cpu/o3/isa_specific.hh"
|
||||
|
||||
class EndQuiesceEvent;
|
||||
namespace Kernel {
|
||||
class Statistics;
|
||||
};
|
||||
|
||||
class TranslatingPort;
|
||||
|
||||
/**
|
||||
* Derived ThreadContext class for use with the O3CPU. It
|
||||
* provides the interface for any external objects to access a
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
*/
|
||||
|
||||
#include "cpu/o3/thread_context.hh"
|
||||
#include "cpu/quiesce_event.hh"
|
||||
|
||||
using namespace TheISA;
|
||||
|
||||
|
|
|
@ -247,6 +247,11 @@ class ThreadContext
|
|||
|
||||
// Same with st cond failures.
|
||||
virtual Counter readFuncExeInst() = 0;
|
||||
|
||||
// This function exits the thread context in the CPU and returns
|
||||
// 1 if the CPU has no more active threads (meaning it's OK to exit);
|
||||
// Used in syscall-emulation mode when a thread calls the exit syscall.
|
||||
virtual int exit() { return 1; };
|
||||
#endif
|
||||
|
||||
virtual void changeRegFileContext(RegFile::ContextParam param,
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
*
|
||||
* Authors: Steve Reinhardt
|
||||
* Ali Saidi
|
||||
* Korey Sewell
|
||||
*/
|
||||
|
||||
#include <fcntl.h>
|
||||
|
@ -92,7 +91,9 @@ SyscallReturn
|
|||
exitFunc(SyscallDesc *desc, int callnum, Process *process,
|
||||
ThreadContext *tc)
|
||||
{
|
||||
exitSimLoop("target called exit()", tc->getSyscallArg(0) & 0xff);
|
||||
if (tc->exit()) {
|
||||
exitSimLoop("target called exit()", tc->getSyscallArg(0) & 0xff);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue