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:
Korey Sewell 2006-07-03 12:19:35 -04:00
parent 19083bc4ce
commit f4c5609988
6 changed files with 40 additions and 6 deletions

View file

@ -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;
}
};

View file

@ -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);

View file

@ -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

View file

@ -30,6 +30,7 @@
*/
#include "cpu/o3/thread_context.hh"
#include "cpu/quiesce_event.hh"
using namespace TheISA;

View file

@ -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,

View file

@ -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;
}