Hello
I'm trying to run gcc from spec2k under SPARC_SE and ran into a few
unimplemented syscalls. Attached is a patch that enables getrlimit and
getrusage and sets setrlimit to be ignored.
The code is modeled on the Alpha code and seems to work. gcc.spec2k still
doesn't work though. On expr it makes it about 1/3 the way through and
then fails out due to an illegal memory access.
Vince
diff -r b35ef789e6f6 src/arch/sparc/linux/linux.hh
--- a/src/arch/sparc/linux/linux.hh Wed Jul 29 00:35:49 2009 -0700
+++ b/src/arch/sparc/linux/linux.hh Wed Jul 29 17:42:04 2009 -0400
@@ -77,6 +77,31 @@
static const int NUM_OPEN_FLAGS;
static const unsigned TGT_MAP_ANONYMOUS = 0x20;
+
+ //@{
+ /// For getrusage().
+ static const int TGT_RUSAGE_SELF = 0;
+ static const int TGT_RUSAGE_CHILDREN = -1;
+ static const int TGT_RUSAGE_BOTH = -2;
+ //@}
+
+ /// 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
+ };
+
+
};
class Sparc32Linux : public SparcLinux
diff -r b35ef789e6f6 src/arch/sparc/linux/syscalls.cc
--- a/src/arch/sparc/linux/syscalls.cc Wed Jul 29 00:35:49 2009 -0700
+++ b/src/arch/sparc/linux/syscalls.cc Wed Jul 29 17:42:04 2009 -0400
@@ -31,6 +31,9 @@
#include "arch/sparc/linux/process.hh"
#include "sim/syscall_emul.hh"
+using namespace std;
+using namespace SparcISA;
+
class LiveProcess;
class ThreadContext;
@@ -205,7 +208,7 @@
/* 114 */ SyscallDesc("sendmsg", unimplementedFunc),
/* 115 */ SyscallDesc("getgroups32", unimplementedFunc), //32 bit
/* 116 */ SyscallDesc("gettimeofday", gettimeofdayFunc<Sparc32Linux>),
//32 bit
- /* 117 */ SyscallDesc("getrusage", unimplementedFunc), //32 bit
+ /* 117 */ SyscallDesc("getrusage", getrusageFunc<Sparc32Linux>), //32 bit
/* 118 */ SyscallDesc("getsockopt", unimplementedFunc),
/* 119 */ SyscallDesc("getcwd", getcwdFunc),
/* 120 */ SyscallDesc("readv", unimplementedFunc),
@@ -232,8 +235,8 @@
/* 141 */ SyscallDesc("getpeername", unimplementedFunc),
/* 142 */ SyscallDesc("futex", unimplementedFunc), //32 bit
/* 143 */ SyscallDesc("gettid", unimplementedFunc),
- /* 144 */ SyscallDesc("getrlimit", unimplementedFunc),
- /* 145 */ SyscallDesc("setrlimit", unimplementedFunc),
+ /* 144 */ SyscallDesc("getrlimit", getrlimitFunc<Sparc32Linux>),
+ /* 145 */ SyscallDesc("setrlimit", ignoreFunc),
/* 146 */ SyscallDesc("pivot_root", unimplementedFunc),
/* 147 */ SyscallDesc("prctl", unimplementedFunc), //32 bit
/* 148 */ SyscallDesc("pciconfig_read", unimplementedFunc),
@@ -511,7 +514,7 @@
/* 114 */ SyscallDesc("sendmsg", unimplementedFunc),
/* 115 */ SyscallDesc("getgroups32", unimplementedFunc),
/* 116 */ SyscallDesc("gettimeofday", gettimeofdayFunc<SparcLinux>),
- /* 117 */ SyscallDesc("getrusage", unimplementedFunc),
+ /* 117 */ SyscallDesc("getrusage", getrusageFunc<SparcLinux>),
/* 118 */ SyscallDesc("getsockopt", unimplementedFunc),
/* 119 */ SyscallDesc("getcwd", unimplementedFunc),
/* 120 */ SyscallDesc("readv", unimplementedFunc),
@@ -538,7 +541,7 @@
/* 141 */ SyscallDesc("getpeername", unimplementedFunc),
/* 142 */ SyscallDesc("futex", unimplementedFunc),
/* 143 */ SyscallDesc("gettid", unimplementedFunc),
- /* 144 */ SyscallDesc("getrlimit", unimplementedFunc),
+ /* 144 */ SyscallDesc("getrlimit", getrlimitFunc<SparcLinux>),
/* 145 */ SyscallDesc("setrlimit", unimplementedFunc),
/* 146 */ SyscallDesc("pivot_root", unimplementedFunc),
/* 147 */ SyscallDesc("prctl", unimplementedFunc),
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev