LiveProcesses to the base LiveProcess definition so anyone can use them.
virtual void flushWindows(ThreadContext *tc) = 0;
};
-template<class IntType>
-struct M5_auxv_t
-{
- IntType a_type;
- union {
- IntType a_val;
- IntType a_ptr;
- IntType a_fcn;
- };
-
- M5_auxv_t()
- {}
-
- M5_auxv_t(IntType type, IntType val)
- {
- a_type = SparcISA::htog(type);
- a_val = SparcISA::htog(val);
- }
-};
-
class Sparc32LiveProcess : public SparcLiveProcess
{
protected:
using namespace std;
using namespace X86ISA;
-M5_64_auxv_t::M5_64_auxv_t(int64_t type, int64_t val)
-{
- a_type = X86ISA::htog(type);
- a_val = X86ISA::htog(val);
-}
X86LiveProcess::X86LiveProcess(LiveProcessParams * params,
ObjectFile *objFile)
void
X86LiveProcess::argsInit(int intSize, int pageSize)
{
- typedef M5_64_auxv_t auxv_t;
+ typedef M5_auxv_t<uint64_t> auxv_t;
+ std::vector<auxv_t> auxv;
+
Process::startup();
string filename;
namespace X86ISA
{
- struct M5_64_auxv_t
- {
- int64_t a_type;
- union {
- int64_t a_val;
- int64_t a_ptr;
- int64_t a_fcn;
- };
-
- M5_64_auxv_t()
- {}
-
- M5_64_auxv_t(int64_t type, int64_t val);
- };
class X86LiveProcess : public LiveProcess
{
protected:
- std::vector<M5_64_auxv_t> auxv;
-
X86LiveProcess(LiveProcessParams * params, ObjectFile *objFile);
void startup();
// current number of allocated processes
int num_processes = 0;
+template<class IntType>
+M5_auxv_t<IntType>::M5_auxv_t(IntType type, IntType val)
+{
+ a_type = TheISA::htog(type);
+ a_val = TheISA::htog(val);
+}
+
+template class M5_auxv_t<uint32_t>;
+template class M5_auxv_t<uint64_t>;
+
Process::Process(ProcessParams * params)
: SimObject(params), system(params->system), checkpointRestored(false),
max_stack_size(params->max_stack_size)
class RemoteGDB;
}
+template<class IntType>
+struct M5_auxv_t
+{
+ IntType a_type;
+ union {
+ IntType a_val;
+ IntType a_ptr;
+ IntType a_fcn;
+ };
+
+ M5_auxv_t()
+ {}
+
+ M5_auxv_t(IntType type, IntType val);
+};
+
class Process : public SimObject
{
public: