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:
|
public:
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
/** Returns a pointer to the ITB. */
|
/** 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. */
|
/** 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. */
|
/** Returns pointer to the quiesce event. */
|
||||||
virtual EndQuiesceEvent *getQuiesceEvent()
|
virtual EndQuiesceEvent *getQuiesceEvent()
|
||||||
{
|
{
|
||||||
return thread->quiesceEvent;
|
return this->thread->quiesceEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns if the thread is currently in PAL mode, based on
|
/** Returns if the thread is currently in PAL mode, based on
|
||||||
* the PC's value. */
|
* the PC's value. */
|
||||||
virtual bool inPalMode()
|
virtual bool inPalMode()
|
||||||
{ return TheISA::PcPAL(cpu->readPC(thread->readTid())); }
|
{ return TheISA::PcPAL(this->cpu->readPC(this->thread->readTid())); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
virtual uint64_t readNextNPC()
|
virtual uint64_t readNextNPC()
|
||||||
|
@ -68,4 +68,20 @@ class AlphaTC : public O3ThreadContext<Impl>
|
||||||
virtual void changeRegFileContext(TheISA::RegFile::ContextParam param,
|
virtual void changeRegFileContext(TheISA::RegFile::ContextParam param,
|
||||||
TheISA::RegFile::ContextVal val)
|
TheISA::RegFile::ContextVal val)
|
||||||
{ panic("Not supported on Alpha!"); }
|
{ 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 */
|
/** Initialize the CPU */
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
|
/** Returns the Number of Active Threads in the CPU */
|
||||||
|
int numActiveThreads()
|
||||||
|
{ return activeThreads.size(); }
|
||||||
|
|
||||||
/** Add Thread to Active Threads List */
|
/** Add Thread to Active Threads List */
|
||||||
void activateThread(unsigned int tid);
|
void activateThread(unsigned int tid);
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,13 @@
|
||||||
|
|
||||||
#include "cpu/o3/isa_specific.hh"
|
#include "cpu/o3/isa_specific.hh"
|
||||||
|
|
||||||
|
class EndQuiesceEvent;
|
||||||
|
namespace Kernel {
|
||||||
|
class Statistics;
|
||||||
|
};
|
||||||
|
|
||||||
|
class TranslatingPort;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Derived ThreadContext class for use with the O3CPU. It
|
* Derived ThreadContext class for use with the O3CPU. It
|
||||||
* provides the interface for any external objects to access a
|
* provides the interface for any external objects to access a
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "cpu/o3/thread_context.hh"
|
#include "cpu/o3/thread_context.hh"
|
||||||
|
#include "cpu/quiesce_event.hh"
|
||||||
|
|
||||||
using namespace TheISA;
|
using namespace TheISA;
|
||||||
|
|
||||||
|
|
|
@ -247,6 +247,11 @@ class ThreadContext
|
||||||
|
|
||||||
// Same with st cond failures.
|
// Same with st cond failures.
|
||||||
virtual Counter readFuncExeInst() = 0;
|
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
|
#endif
|
||||||
|
|
||||||
virtual void changeRegFileContext(RegFile::ContextParam param,
|
virtual void changeRegFileContext(RegFile::ContextParam param,
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
*
|
*
|
||||||
* Authors: Steve Reinhardt
|
* Authors: Steve Reinhardt
|
||||||
* Ali Saidi
|
* Ali Saidi
|
||||||
* Korey Sewell
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
@ -92,7 +91,9 @@ SyscallReturn
|
||||||
exitFunc(SyscallDesc *desc, int callnum, Process *process,
|
exitFunc(SyscallDesc *desc, int callnum, Process *process,
|
||||||
ThreadContext *tc)
|
ThreadContext *tc)
|
||||||
{
|
{
|
||||||
|
if (tc->exit()) {
|
||||||
exitSimLoop("target called exit()", tc->getSyscallArg(0) & 0xff);
|
exitSimLoop("target called exit()", tc->getSyscallArg(0) & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue