# HG changeset patch
# User [email protected]
# Date 1253048699 14400
# Node ID cb4c4b7931069da51e74d15242e9c01274ec38a3
# Parent ae3263589c7c40a0f93071c0eb1b6f7937d59f05
Adds sysinfo() syscall
memsets the structure to zero, as suggested by Gabe Black.
diff -r ae3263589c7c -r cb4c4b793106 src/arch/alpha/linux/linux.hh
--- a/src/arch/alpha/linux/linux.hh Tue Sep 15 05:48:20 2009 -0700
+++ b/src/arch/alpha/linux/linux.hh Tue Sep 15 17:04:59 2009 -0400
@@ -125,6 +125,21 @@
TGT_RLIMIT_MEMLOCK = 9,
TGT_RLIMIT_LOCKS = 10
};
+
+ typedef struct {
+ int64_t uptime; /* Seconds since boot */
+ uint64_t loads[3]; /* 1, 5, and 15 minute load averages */
+ uint64_t totalram; /* Total usable main memory size */
+ uint64_t freeram; /* Available memory size */
+ uint64_t sharedram; /* Amount of shared memory */
+ uint64_t bufferram; /* Memory used by buffers */
+ uint64_t totalswap; /* Total swap space size */
+ uint64_t freeswap; /* swap space still available */
+ uint16_t procs; /* Number of current processes */
+ uint64_t totalhigh; /* Total high memory size */
+ uint64_t freehigh; /* Available high memory size */
+ uint64_t mem_unit; /* Memory unit size in bytes */
+ } tgt_sysinfo;
};
#endif // __ALPHA_ALPHA_LINUX_LINUX_HH__
diff -r ae3263589c7c -r cb4c4b793106 src/arch/alpha/linux/process.cc
--- a/src/arch/alpha/linux/process.cc Tue Sep 15 05:48:20 2009 -0700
+++ b/src/arch/alpha/linux/process.cc Tue Sep 15 17:04:59 2009 -0400
@@ -440,7 +440,7 @@
/* 315 */ SyscallDesc("munlock", unimplementedFunc),
/* 316 */ SyscallDesc("mlockall", unimplementedFunc),
/* 317 */ SyscallDesc("munlockall", unimplementedFunc),
- /* 318 */ SyscallDesc("sysinfo", unimplementedFunc),
+ /* 318 */ SyscallDesc("sysinfo", sysinfoFunc<AlphaLinux>),
/* 319 */ SyscallDesc("_sysctl", unimplementedFunc),
/* 320 */ SyscallDesc("was sys_idle", unimplementedFunc),
/* 321 */ SyscallDesc("oldumount", unimplementedFunc),
diff -r ae3263589c7c -r cb4c4b793106 src/arch/arm/linux/linux.hh
--- a/src/arch/arm/linux/linux.hh Tue Sep 15 05:48:20 2009 -0700
+++ b/src/arch/arm/linux/linux.hh Tue Sep 15 17:04:59 2009 -0400
@@ -147,6 +147,20 @@
uint64_t st_ino;
} tgt_stat64;
+ typedef struct {
+ int32_t uptime; /* Seconds since boot */
+ uint32_t loads[3]; /* 1, 5, and 15 minute load averages */
+ uint32_t totalram; /* Total usable main memory size */
+ uint32_t freeram; /* Available memory size */
+ uint32_t sharedram; /* Amount of shared memory */
+ uint32_t bufferram; /* Memory used by buffers */
+ uint32_t totalswap; /* Total swap space size */
+ uint32_t freeswap; /* swap space still available */
+ uint16_t procs; /* Number of current processes */
+ uint32_t totalhigh; /* Total high memory size */
+ uint32_t freehigh; /* Available high memory size */
+ uint32_t mem_unit; /* Memory unit size in bytes */
+ } tgt_sysinfo;
};
diff -r ae3263589c7c -r cb4c4b793106 src/arch/arm/linux/process.cc
--- a/src/arch/arm/linux/process.cc Tue Sep 15 05:48:20 2009 -0700
+++ b/src/arch/arm/linux/process.cc Tue Sep 15 17:04:59 2009 -0400
@@ -179,7 +179,7 @@
/* 113 */ SyscallDesc("vm86", unimplementedFunc),
/* 114 */ SyscallDesc("wait4", unimplementedFunc),
/* 115 */ SyscallDesc("swapoff", unimplementedFunc),
- /* 116 */ SyscallDesc("sysinfo", unimplementedFunc),
+ /* 116 */ SyscallDesc("sysinfo", sysinfoFunc<ArmLinux>),
/* 117 */ SyscallDesc("ipc", unimplementedFunc),
/* 118 */ SyscallDesc("fsync", unimplementedFunc),
/* 119 */ SyscallDesc("sigreturn", unimplementedFunc),
diff -r ae3263589c7c -r cb4c4b793106 src/arch/mips/linux/linux.hh
--- a/src/arch/mips/linux/linux.hh Tue Sep 15 05:48:20 2009 -0700
+++ b/src/arch/mips/linux/linux.hh Tue Sep 15 17:04:59 2009 -0400
@@ -126,6 +126,22 @@
/// assign themselves to process IDs reserved for
/// the root users.
static const int NUM_ROOT_PROCS = 2;
+
+ typedef struct {
+ int32_t uptime; /* Seconds since boot */
+ uint32_t loads[3]; /* 1, 5, and 15 minute load averages */
+ uint32_t totalram; /* Total usable main memory size */
+ uint32_t freeram; /* Available memory size */
+ uint32_t sharedram; /* Amount of shared memory */
+ uint32_t bufferram; /* Memory used by buffers */
+ uint32_t totalswap; /* Total swap space size */
+ uint32_t freeswap; /* swap space still available */
+ uint16_t procs; /* Number of current processes */
+ uint32_t totalhigh; /* Total high memory size */
+ uint32_t freehigh; /* Available high memory size */
+ uint32_t mem_unit; /* Memory unit size in bytes */
+ } tgt_sysinfo;
+
};
#endif
diff -r ae3263589c7c -r cb4c4b793106 src/arch/mips/linux/process.cc
--- a/src/arch/mips/linux/process.cc Tue Sep 15 05:48:20 2009 -0700
+++ b/src/arch/mips/linux/process.cc Tue Sep 15 17:04:59 2009 -0400
@@ -238,7 +238,7 @@
/* 113 */ SyscallDesc("vm86", unimplementedFunc),
/* 114 */ SyscallDesc("wait4", unimplementedFunc),
/* 115 */ SyscallDesc("swapoff", unimplementedFunc),
- /* 116 */ SyscallDesc("sysinfo", unimplementedFunc),
+ /* 116 */ SyscallDesc("sysinfo", sysinfoFunc<MipsLinux>),
/* 117 */ SyscallDesc("ipc", unimplementedFunc),
/* 118 */ SyscallDesc("fsync", unimplementedFunc),
/* 119 */ SyscallDesc("sigreturn", unimplementedFunc),
diff -r ae3263589c7c -r cb4c4b793106 src/arch/sparc/linux/linux.hh
--- a/src/arch/sparc/linux/linux.hh Tue Sep 15 05:48:20 2009 -0700
+++ b/src/arch/sparc/linux/linux.hh Tue Sep 15 17:04:59 2009 -0400
@@ -77,6 +77,22 @@
static const int NUM_OPEN_FLAGS;
static const unsigned TGT_MAP_ANONYMOUS = 0x20;
+
+ typedef struct {
+ int64_t uptime; /* Seconds since boot */
+ uint64_t loads[3]; /* 1, 5, and 15 minute load averages */
+ uint64_t totalram; /* Total usable main memory size */
+ uint64_t freeram; /* Available memory size */
+ uint64_t sharedram; /* Amount of shared memory */
+ uint64_t bufferram; /* Memory used by buffers */
+ uint64_t totalswap; /* Total swap space size */
+ uint64_t freeswap; /* swap space still available */
+ uint16_t procs; /* Number of current processes */
+ uint64_t totalhigh; /* Total high memory size */
+ uint64_t freehigh; /* Available high memory size */
+ uint64_t mem_unit; /* Memory unit size in bytes */
+ } tgt_sysinfo;
+
};
class Sparc32Linux : public SparcLinux
@@ -105,6 +121,22 @@
uint32_t __unused4;
uint32_t __unused5;
} tgt_stat64;
+
+ typedef struct {
+ int32_t uptime; /* Seconds since boot */
+ uint32_t loads[3]; /* 1, 5, and 15 minute load averages */
+ uint32_t totalram; /* Total usable main memory size */
+ uint32_t freeram; /* Available memory size */
+ uint32_t sharedram; /* Amount of shared memory */
+ uint32_t bufferram; /* Memory used by buffers */
+ uint32_t totalswap; /* Total swap space size */
+ uint32_t freeswap; /* swap space still available */
+ uint16_t procs; /* Number of current processes */
+ uint32_t totalhigh; /* Total high memory size */
+ uint32_t freehigh; /* Available high memory size */
+ uint32_t mem_unit; /* Memory unit size in bytes */
+ } tgt_sysinfo;
+
};
#endif
diff -r ae3263589c7c -r cb4c4b793106 src/arch/sparc/linux/syscalls.cc
--- a/src/arch/sparc/linux/syscalls.cc Tue Sep 15 05:48:20 2009 -0700
+++ b/src/arch/sparc/linux/syscalls.cc Tue Sep 15 17:04:59 2009 -0400
@@ -302,7 +302,7 @@
/* 211 */ SyscallDesc("tgkill", unimplementedFunc), //32 bit
/* 212 */ SyscallDesc("waitpid", unimplementedFunc), //32 bit
/* 213 */ SyscallDesc("swapoff", unimplementedFunc),
- /* 214 */ SyscallDesc("sysinfo", unimplementedFunc), //32 bit
+ /* 214 */ SyscallDesc("sysinfo", sysinfoFunc<Sparc32Linux>), //32 bit
/* 215 */ SyscallDesc("ipc", unimplementedFunc), //32 bit
/* 216 */ SyscallDesc("sigreturn", unimplementedFunc), //32 bit
/* 217 */ SyscallDesc("clone", cloneFunc),
@@ -608,7 +608,7 @@
/* 211 */ SyscallDesc("tgkill", unimplementedFunc),
/* 212 */ SyscallDesc("waitpid", unimplementedFunc),
/* 213 */ SyscallDesc("swapoff", unimplementedFunc),
- /* 214 */ SyscallDesc("sysinfo", unimplementedFunc),
+ /* 214 */ SyscallDesc("sysinfo", sysinfoFunc<SparcLinux>),
/* 215 */ SyscallDesc("ipc", unimplementedFunc),
/* 216 */ SyscallDesc("sigreturn", unimplementedFunc),
/* 217 */ SyscallDesc("clone", cloneFunc),
diff -r ae3263589c7c -r cb4c4b793106 src/arch/x86/linux/linux.hh
--- a/src/arch/x86/linux/linux.hh Tue Sep 15 05:48:20 2009 -0700
+++ b/src/arch/x86/linux/linux.hh Tue Sep 15 17:04:59 2009 -0400
@@ -111,6 +111,22 @@
uint64_t iov_base; // void *
uint64_t iov_len; // size_t
} tgt_iovec;
+
+ typedef struct {
+ int64_t uptime; /* Seconds since boot */
+ uint64_t loads[3]; /* 1, 5, and 15 minute load averages */
+ uint64_t totalram; /* Total usable main memory size */
+ uint64_t freeram; /* Available memory size */
+ uint64_t sharedram; /* Amount of shared memory */
+ uint64_t bufferram; /* Memory used by buffers */
+ uint64_t totalswap; /* Total swap space size */
+ uint64_t freeswap; /* swap space still available */
+ uint16_t procs; /* Number of current processes */
+ uint64_t totalhigh; /* Total high memory size */
+ uint64_t freehigh; /* Available high memory size */
+ uint64_t mem_unit; /* Memory unit size in bytes */
+ } tgt_sysinfo;
+
};
class X86Linux32 : public Linux
@@ -160,6 +176,21 @@
static const int NUM_OPEN_FLAGS;
static const unsigned TGT_MAP_ANONYMOUS = 0x20;
+
+ typedef struct {
+ int32_t uptime; /* Seconds since boot */
+ uint32_t loads[3]; /* 1, 5, and 15 minute load averages */
+ uint32_t totalram; /* Total usable main memory size */
+ uint32_t freeram; /* Available memory size */
+ uint32_t sharedram; /* Amount of shared memory */
+ uint32_t bufferram; /* Memory used by buffers */
+ uint32_t totalswap; /* Total swap space size */
+ uint32_t freeswap; /* swap space still available */
+ uint16_t procs; /* Number of current processes */
+ uint32_t totalhigh; /* Total high memory size */
+ uint32_t freehigh; /* Available high memory size */
+ uint32_t mem_unit; /* Memory unit size in bytes */
+ } tgt_sysinfo;
};
#endif
diff -r ae3263589c7c -r cb4c4b793106 src/arch/x86/linux/syscalls.cc
--- a/src/arch/x86/linux/syscalls.cc Tue Sep 15 05:48:20 2009 -0700
+++ b/src/arch/x86/linux/syscalls.cc Tue Sep 15 17:04:59 2009 -0400
@@ -327,7 +327,7 @@
/* 96 */ SyscallDesc("gettimeofday", unimplementedFunc),
/* 97 */ SyscallDesc("getrlimit", unimplementedFunc),
/* 98 */ SyscallDesc("getrusage", unimplementedFunc),
- /* 99 */ SyscallDesc("sysinfo", unimplementedFunc),
+ /* 99 */ SyscallDesc("sysinfo", sysinfoFunc<X86Linux64>),
/* 100 */ SyscallDesc("times", unimplementedFunc),
/* 101 */ SyscallDesc("ptrace", unimplementedFunc),
/* 102 */ SyscallDesc("getuid", getuidFunc),
@@ -623,7 +623,7 @@
/* 113 */ SyscallDesc("vm86old", unimplementedFunc),
/* 114 */ SyscallDesc("wait4", unimplementedFunc),
/* 115 */ SyscallDesc("swapoff", unimplementedFunc),
- /* 116 */ SyscallDesc("sysinfo", unimplementedFunc),
+ /* 116 */ SyscallDesc("sysinfo", sysinfoFunc<X86Linux32>),
/* 117 */ SyscallDesc("ipc", unimplementedFunc),
/* 118 */ SyscallDesc("fsync", unimplementedFunc),
/* 119 */ SyscallDesc("sigreturn", unimplementedFunc),
diff -r ae3263589c7c -r cb4c4b793106 src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh Tue Sep 15 05:48:20 2009 -0700
+++ b/src/sim/syscall_emul.hh Tue Sep 15 17:04:59 2009 -0400
@@ -59,6 +59,7 @@
#include "cpu/thread_context.hh"
#include "mem/translating_port.hh"
#include "mem/page_table.hh"
+#include "sim/system.hh"
#include "sim/process.hh"
///
@@ -558,6 +559,23 @@
}
+/// Target sysinfo() handler.
+template <class OS>
+SyscallReturn
+sysinfoFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
+ ThreadContext *tc)
+{
+
+ TypedBufferArg<typename OS::tgt_sysinfo> sysinfo(process->getSyscallArg(tc,
0));
+
+ memset(sysinfo,0,sizeof(typename OS::tgt_sysinfo));
+ sysinfo->uptime=seconds_since_epoch;
+ sysinfo->totalram=process->system->memSize();
+
+ sysinfo.copyOut(tc->getMemPort());
+
+ return 0;
+}
/// Target chmod() handler.
template <class OS>
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev