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.