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

Reply via email to