changeset a61fdbbc1d45 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=a61fdbbc1d45
description:
syscall emulation: Enabled getrlimit and getrusage for x86.
Added/moved rlimit constants to base linux header file.
This patch is a revised version of Vince Weaver's earlier patch.
diffstat:
src/arch/alpha/linux/linux.hh | 27 +++++----------------------
src/arch/arm/linux/linux.hh | 22 ----------------------
src/arch/arm/linux/process.cc | 2 +-
src/arch/mips/linux/linux.hh | 29 ++++++-----------------------
src/arch/sparc/linux/linux.hh | 3 +++
src/arch/x86/linux/syscalls.cc | 8 ++++----
src/kern/linux/linux.hh | 23 +++++++++++++++++++++++
7 files changed, 42 insertions(+), 72 deletions(-)
diffs (209 lines):
diff -r 42dd80dee4dd -r a61fdbbc1d45 src/arch/alpha/linux/linux.hh
--- a/src/arch/alpha/linux/linux.hh Mon Aug 06 16:57:11 2012 -0700
+++ b/src/arch/alpha/linux/linux.hh Mon Aug 06 19:52:56 2012 -0700
@@ -84,13 +84,6 @@
//@}
//@{
- /// For getrusage().
- static const int TGT_RUSAGE_SELF = 0;
- static const int TGT_RUSAGE_CHILDREN = -1;
- static const int TGT_RUSAGE_BOTH = -2;
- //@}
-
- //@{
/// For setsysinfo().
static const unsigned SSI_IEEE_FP_CONTROL = 14; //!< ieee_set_fp_control()
//@}
@@ -129,21 +122,11 @@
/// For table().
static const int TBL_SYSINFO = 12;
- /// Resource enumeration for getrlimit().
- enum rlimit_resources {
- TGT_RLIMIT_CPU = 0,
- TGT_RLIMIT_FSIZE = 1,
- TGT_RLIMIT_DATA = 2,
- TGT_RLIMIT_STACK = 3,
- TGT_RLIMIT_CORE = 4,
- TGT_RLIMIT_RSS = 5,
- TGT_RLIMIT_NOFILE = 6,
- TGT_RLIMIT_AS = 7,
- TGT_RLIMIT_VMEM = 7,
- TGT_RLIMIT_NPROC = 8,
- TGT_RLIMIT_MEMLOCK = 9,
- TGT_RLIMIT_LOCKS = 10
- };
+ /// Resource constants for getrlimit() (overide some generics).
+ static const unsigned TGT_RLIMIT_NPROC = 8;
+ static const unsigned TGT_RLIMIT_AS = 7;
+ static const unsigned TGT_RLIMIT_NOFILE = 6;
+ static const unsigned TGT_RLIMIT_MEMLOCK = 9;
typedef struct {
int64_t uptime; /* Seconds since boot */
diff -r 42dd80dee4dd -r a61fdbbc1d45 src/arch/arm/linux/linux.hh
--- a/src/arch/arm/linux/linux.hh Mon Aug 06 16:57:11 2012 -0700
+++ b/src/arch/arm/linux/linux.hh Mon Aug 06 19:52:56 2012 -0700
@@ -93,31 +93,9 @@
static const unsigned TGT_MAP_ANONYMOUS = 0x20;
static const unsigned TGT_MAP_FIXED = 0x10;
- //@{
- /// For getrusage().
- static const int TGT_RUSAGE_SELF = 0;
- static const int TGT_RUSAGE_CHILDREN = -1;
- static const int TGT_RUSAGE_BOTH = -2;
- //@}
-
/// For table().
static const int TBL_SYSINFO = 12;
- /// Resource enumeration for getrlimit().
- enum rlimit_resources {
- TGT_RLIMIT_CPU = 0,
- TGT_RLIMIT_FSIZE = 1,
- TGT_RLIMIT_DATA = 2,
- TGT_RLIMIT_STACK = 3,
- TGT_RLIMIT_CORE = 4,
- TGT_RLIMIT_RSS = 5,
- TGT_RLIMIT_NPROC = 6,
- TGT_RLIMIT_NOFILE = 7,
- TGT_RLIMIT_MEMLOCK = 8,
- TGT_RLIMIT_AS = 9,
- TGT_RLIMIT_LOCKS = 10
- };
-
/// Limit struct for getrlimit/setrlimit.
struct rlimit {
uint32_t rlim_cur; //!< soft limit
diff -r 42dd80dee4dd -r a61fdbbc1d45 src/arch/arm/linux/process.cc
--- a/src/arch/arm/linux/process.cc Mon Aug 06 16:57:11 2012 -0700
+++ b/src/arch/arm/linux/process.cc Mon Aug 06 19:52:56 2012 -0700
@@ -151,7 +151,7 @@
/* 73 */ SyscallDesc("sigpending", unimplementedFunc),
/* 74 */ SyscallDesc("sethostname", ignoreFunc),
/* 75 */ SyscallDesc("setrlimit", ignoreFunc),
- /* 76 */ SyscallDesc("getrlimit", unimplementedFunc),
+ /* 76 */ SyscallDesc("getrlimit", getrlimitFunc<ArmLinux>),
/* 77 */ SyscallDesc("getrusage", getrusageFunc<ArmLinux>),
/* 78 */ SyscallDesc("gettimeofday", gettimeofdayFunc<ArmLinux>),
/* 79 */ SyscallDesc("settimeofday", unimplementedFunc),
diff -r 42dd80dee4dd -r a61fdbbc1d45 src/arch/mips/linux/linux.hh
--- a/src/arch/mips/linux/linux.hh Mon Aug 06 16:57:11 2012 -0700
+++ b/src/arch/mips/linux/linux.hh Mon Aug 06 19:52:56 2012 -0700
@@ -79,13 +79,6 @@
//@}
//@{
- /// For getrusage().
- static const int TGT_RUSAGE_SELF = 0;
- static const int TGT_RUSAGE_CHILDREN = -1;
- static const int TGT_RUSAGE_BOTH = -2;
- //@}
-
- //@{
/// For setsysinfo().
static const unsigned SSI_IEEE_FP_CONTROL = 14; //!< ieee_set_fp_control()
//@}
@@ -121,22 +114,12 @@
/// For table().
static const int TBL_SYSINFO = 12;
- /// Resource enumeration for getrlimit()/setrlimit().
- enum rlimit_resources {
- TGT_RLIMIT_CPU = 0,
- TGT_RLIMIT_FSIZE = 1,
- TGT_RLIMIT_DATA = 2,
- TGT_RLIMIT_STACK = 3,
- TGT_RLIMIT_CORE = 4,
- TGT_RLIMIT_NOFILE = 5,
- TGT_RLIMIT_AS = 6,
- TGT_RLIMIT_RSS = 7,
- TGT_RLIMIT_VMEM = 7,
- TGT_RLIMIT_NPROC = 8,
- TGT_RLIMIT_MEMLOCK = 9,
- TGT_RLIMIT_LOCKS = 10,
- NUM_RLIMIT_RESOURCES
- };
+ /// Resource constants for getrlimit() (overide some generics).
+ static const unsigned TGT_RLIMIT_NPROC = 8;
+ static const unsigned TGT_RLIMIT_AS = 6;
+ static const unsigned RLIMIT_RSS = 7;
+ static const unsigned TGT_RLIMIT_NOFILE = 5;
+ static const unsigned TGT_RLIMIT_MEMLOCK = 9;
/// Offset used to make sure that processes don't
/// assign themselves to process IDs reserved for
diff -r 42dd80dee4dd -r a61fdbbc1d45 src/arch/sparc/linux/linux.hh
--- a/src/arch/sparc/linux/linux.hh Mon Aug 06 16:57:11 2012 -0700
+++ b/src/arch/sparc/linux/linux.hh Mon Aug 06 19:52:56 2012 -0700
@@ -167,6 +167,9 @@
uint32_t mem_unit; /* Memory unit size in bytes */
} tgt_sysinfo;
+ /// Resource constants for getrlimit() (overide some generics).
+ static const unsigned TGT_RLIMIT_NPROC = 7;
+ static const unsigned TGT_RLIMIT_NOFILE = 6;
};
#endif
diff -r 42dd80dee4dd -r a61fdbbc1d45 src/arch/x86/linux/syscalls.cc
--- a/src/arch/x86/linux/syscalls.cc Mon Aug 06 16:57:11 2012 -0700
+++ b/src/arch/x86/linux/syscalls.cc Mon Aug 06 19:52:56 2012 -0700
@@ -310,8 +310,8 @@
/* 94 */ SyscallDesc("lchown", unimplementedFunc),
/* 95 */ SyscallDesc("umask", unimplementedFunc),
/* 96 */ SyscallDesc("gettimeofday", unimplementedFunc),
- /* 97 */ SyscallDesc("getrlimit", unimplementedFunc),
- /* 98 */ SyscallDesc("getrusage", unimplementedFunc),
+ /* 97 */ SyscallDesc("getrlimit", getrlimitFunc<X86Linux64>),
+ /* 98 */ SyscallDesc("getrusage", getrusageFunc<X86Linux64>),
/* 99 */ SyscallDesc("sysinfo", sysinfoFunc<X86Linux64>),
/* 100 */ SyscallDesc("times", timesFunc<X86Linux64>),
/* 101 */ SyscallDesc("ptrace", unimplementedFunc),
@@ -568,8 +568,8 @@
/* 73 */ SyscallDesc("sigpending", unimplementedFunc),
/* 74 */ SyscallDesc("sethostname", unimplementedFunc),
/* 75 */ SyscallDesc("setrlimit", ignoreFunc),
- /* 76 */ SyscallDesc("getrlimit", unimplementedFunc),
- /* 77 */ SyscallDesc("getrusage", unimplementedFunc),
+ /* 76 */ SyscallDesc("getrlimit", getrlimitFunc<X86Linux32>),
+ /* 77 */ SyscallDesc("getrusage", getrusageFunc<X86Linux32>),
/* 78 */ SyscallDesc("gettimeofday", unimplementedFunc),
/* 79 */ SyscallDesc("settimeofday", unimplementedFunc),
/* 80 */ SyscallDesc("getgroups", unimplementedFunc),
diff -r 42dd80dee4dd -r a61fdbbc1d45 src/kern/linux/linux.hh
--- a/src/kern/linux/linux.hh Mon Aug 06 16:57:11 2012 -0700
+++ b/src/kern/linux/linux.hh Mon Aug 06 19:52:56 2012 -0700
@@ -174,7 +174,30 @@
}
+ /// Resource constants for getrlimit().
+ static const unsigned TGT_RLIMIT_CPU = 0;
+ static const unsigned TGT_RLIMIT_FSIZE = 1;
+ static const unsigned TGT_RLIMIT_DATA = 2;
+ static const unsigned TGT_RLIMIT_STACK = 3;
+ static const unsigned TGT_RLIMIT_CORE = 4;
+ static const unsigned TGT_RLIMIT_RSS = 5;
+ static const unsigned TGT_RLIMIT_NPROC = 6;
+ static const unsigned TGT_RLIMIT_NOFILE = 7;
+ static const unsigned TGT_RLIMIT_MEMLOCK = 8;
+ static const unsigned TGT_RLIMIT_AS = 9;
+ static const unsigned TGT_RLIMIT_LOCKS = 10;
+ static const unsigned TGT_RLIMIT_SIGPENDING = 11;
+ static const unsigned TGT_RLIMIT_MSGQUEUE = 12;
+ static const unsigned TGT_RLIMIT_NICE = 13;
+ static const unsigned TGT_RLIMIT_RTPRIO = 14;
+ static const unsigned TGT_RLIMIT_RTTIME = 15;
+ static const unsigned TGT_RLIM_NLIMITS = 16;
+
/// For getrusage().
+ static const int TGT_RUSAGE_SELF = 0;
+ static const int TGT_RUSAGE_CHILDREN = -1;
+ static const int TGT_RUSAGE_BOTH = -2;
+
struct rusage {
struct timeval ru_utime; //!< user time used
struct timeval ru_stime; //!< system time used
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev