diff --git a/src/arch/alpha/linux/process.cc b/src/arch/alpha/linux/process.cc index de89410ace..d342c5d2d0 100644 --- a/src/arch/alpha/linux/process.cc +++ b/src/arch/alpha/linux/process.cc @@ -85,7 +85,7 @@ unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc) strcpy(name->sysname, "Linux"); strcpy(name->nodename, "sim.gem5.org"); - strcpy(name->release, "3.0.0"); + strcpy(name->release, process->release.c_str()); strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003"); strcpy(name->machine, "alpha"); diff --git a/src/arch/arm/linux/process.cc b/src/arch/arm/linux/process.cc index 25bccb6b67..3fcb01fe77 100644 --- a/src/arch/arm/linux/process.cc +++ b/src/arch/arm/linux/process.cc @@ -113,7 +113,7 @@ unameFunc32(SyscallDesc *desc, int callnum, ThreadContext *tc) strcpy(name->sysname, "Linux"); strcpy(name->nodename, "m5.eecs.umich.edu"); - strcpy(name->release, "3.7.0+"); + strcpy(name->release, process->release.c_str()); strcpy(name->version, "#1 SMP Sat Dec 1 00:00:00 GMT 2012"); strcpy(name->machine, "armv7l"); @@ -131,7 +131,7 @@ unameFunc64(SyscallDesc *desc, int callnum, ThreadContext *tc) strcpy(name->sysname, "Linux"); strcpy(name->nodename, "gem5"); - strcpy(name->release, "4.10.8+"); + strcpy(name->release, process->release.c_str()); strcpy(name->version, "#1 SMP Sat Dec 1 00:00:00 GMT 2012"); strcpy(name->machine, "armv8l"); diff --git a/src/arch/mips/linux/process.cc b/src/arch/mips/linux/process.cc index 8a4811a045..9efaf26247 100644 --- a/src/arch/mips/linux/process.cc +++ b/src/arch/mips/linux/process.cc @@ -88,7 +88,7 @@ unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc) strcpy(name->sysname, "Linux"); strcpy(name->nodename,"sim.gem5.org"); - strcpy(name->release, "3.0.0"); + strcpy(name->release, process->release.c_str()); strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003"); strcpy(name->machine, "mips"); diff --git a/src/arch/power/linux/process.cc b/src/arch/power/linux/process.cc index 58e7eb5070..8a5cd137c9 100644 --- a/src/arch/power/linux/process.cc +++ b/src/arch/power/linux/process.cc @@ -88,7 +88,7 @@ unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc) strcpy(name->sysname, "Linux"); strcpy(name->nodename, "sim.gem5.org"); - strcpy(name->release, "3.0.0"); + strcpy(name->release, process->release.c_str()); strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003"); strcpy(name->machine, "power"); diff --git a/src/arch/riscv/linux/process.cc b/src/arch/riscv/linux/process.cc index f3f328e48d..8aebd558e4 100644 --- a/src/arch/riscv/linux/process.cc +++ b/src/arch/riscv/linux/process.cc @@ -96,7 +96,7 @@ unameFunc64(SyscallDesc *desc, int callnum, ThreadContext *tc) strcpy(name->sysname, "Linux"); strcpy(name->nodename,"sim.gem5.org"); - strcpy(name->release, "3.0.0"); + strcpy(name->release, process->release.c_str()); strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003"); strcpy(name->machine, "riscv64"); @@ -114,7 +114,7 @@ unameFunc32(SyscallDesc *desc, int callnum, ThreadContext *tc) strcpy(name->sysname, "Linux"); strcpy(name->nodename,"sim.gem5.org"); - strcpy(name->release, "3.0.0"); + strcpy(name->release, process->release.c_str()); strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003"); strcpy(name->machine, "riscv32"); diff --git a/src/arch/sparc/linux/syscalls.cc b/src/arch/sparc/linux/syscalls.cc index 9cf08b7b3f..70d1b2af60 100644 --- a/src/arch/sparc/linux/syscalls.cc +++ b/src/arch/sparc/linux/syscalls.cc @@ -47,7 +47,7 @@ unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc) strcpy(name->sysname, "Linux"); strcpy(name->nodename, "sim.gem5.org"); - strcpy(name->release, "3.0.0-sparc64"); + strcpy(name->release, process->release.c_str()); strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003"); strcpy(name->machine, "sparc"); diff --git a/src/arch/sparc/solaris/process.cc b/src/arch/sparc/solaris/process.cc index 0b67f53d39..3a13229ed3 100644 --- a/src/arch/sparc/solaris/process.cc +++ b/src/arch/sparc/solaris/process.cc @@ -80,7 +80,7 @@ unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc) strcpy(name->sysname, "SunOS"); strcpy(name->nodename, "m5.eecs.umich.edu"); - strcpy(name->release, "5.9"); //?? do we want this or something newer? + strcpy(name->release, process->release.c_str()); strcpy(name->version, "Generic_118558-21"); strcpy(name->machine, "sun4u"); diff --git a/src/arch/x86/linux/process.cc b/src/arch/x86/linux/process.cc index 98a68b4098..d38b168fde 100644 --- a/src/arch/x86/linux/process.cc +++ b/src/arch/x86/linux/process.cc @@ -99,7 +99,7 @@ unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc) strcpy(name->sysname, "Linux"); strcpy(name->nodename, "sim.gem5.org"); - strcpy(name->release, "3.2.0"); + strcpy(name->release, process->release.c_str()); strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003"); strcpy(name->machine, "x86_64"); diff --git a/src/sim/Process.py b/src/sim/Process.py index 73a0145fd3..6714ee5603 100644 --- a/src/sim/Process.py +++ b/src/sim/Process.py @@ -62,6 +62,7 @@ class Process(SimObject): cwd = Param.String(getcwd(), "current working directory") simpoint = Param.UInt64(0, 'simulation point at which to start simulation') drivers = VectorParam.EmulatedDriver([], 'Available emulated drivers') + release = Param.String('5.1.0', "Linux kernel uname release") @classmethod def export_methods(cls, code): diff --git a/src/sim/process.cc b/src/sim/process.cc index 90d0e5d55b..f647467b8b 100644 --- a/src/sim/process.cc +++ b/src/sim/process.cc @@ -97,6 +97,7 @@ Process::Process(ProcessParams *params, EmulationPageTable *pTable, executable(params->executable), tgtCwd(normalize(params->cwd)), hostCwd(checkPathRedirect(tgtCwd)), + release(params->release), _uid(params->uid), _euid(params->euid), _gid(params->gid), _egid(params->egid), _pid(params->pid), _ppid(params->ppid), diff --git a/src/sim/process.hh b/src/sim/process.hh index 27c5696024..23ed6d661c 100644 --- a/src/sim/process.hh +++ b/src/sim/process.hh @@ -224,6 +224,9 @@ class Process : public SimObject std::string tgtCwd; std::string hostCwd; + // Syscall emulation uname release. + std::string release; + // Id of the owner of the process uint64_t _uid; uint64_t _euid;