24.22.6.1. gem5 ThreadContext
As we delve into more details below, we will reach the following conclusion: a ThreadContext
represents on thread of a CPU with multiple Hardware threads.
We therefore we can have multiple ThreadContext
for each BaseCPU
.
ThreadContext
is what gets passed in syscalls, e.g.:
src/sim/syscall_emul.hh
template <class OS> SyscallReturn readFunc(SyscallDesc *desc, ThreadContext *tc, int tgt_fd, Addr buf_ptr, int nbytes)
The class hierarchy for ThreadContext
looks like:
ThreadContext O3ThreadContext SimpleThread
where the gem5 MinorCPU also uses SimpleThread
:
/** Minor will use the SimpleThread state for now */ typedef SimpleThread MinorThread;
It is a bit confusing, things would be much clearer if SimpleThread
was called instead SimpleThreadContext
!
readIntReg
and other register access methods are some notable methods implemented in descendants, e.g. SimpleThread::readIntReg
.
Essentially all methods of the base ThreadContext
are pure virtual.