changeset 31afddc29cd4 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=31afddc29cd4
description:
        arm: add access syscall for ARM SE mode

        This patch adds the "access" syscall for ARM SE as required by some 
spec2006
        benchmarks.

diffstat:

 src/arch/arm/linux/process.cc |   2 +-
 src/sim/syscall_emul.cc       |  17 +++++++++++++++++
 src/sim/syscall_emul.hh       |   4 ++++
 3 files changed, 22 insertions(+), 1 deletions(-)

diffs (50 lines):

diff -r 2694770a30d4 -r 31afddc29cd4 src/arch/arm/linux/process.cc
--- a/src/arch/arm/linux/process.cc     Tue Jan 08 08:54:07 2013 -0500
+++ b/src/arch/arm/linux/process.cc     Tue Jan 08 08:54:07 2013 -0500
@@ -108,7 +108,7 @@
     /* 30 */ SyscallDesc("utime", unimplementedFunc),
     /* 31 */ SyscallDesc("unused#31", unimplementedFunc),
     /* 32 */ SyscallDesc("unused#32", unimplementedFunc),
-    /* 33 */ SyscallDesc("access", unimplementedFunc),
+    /* 33 */ SyscallDesc("access", accessFunc),
     /* 34 */ SyscallDesc("nice", unimplementedFunc),
     /* 35 */ SyscallDesc("unused#35", unimplementedFunc),
     /* 36 */ SyscallDesc("sync", unimplementedFunc),
diff -r 2694770a30d4 -r 31afddc29cd4 src/sim/syscall_emul.cc
--- a/src/sim/syscall_emul.cc   Tue Jan 08 08:54:07 2013 -0500
+++ b/src/sim/syscall_emul.cc   Tue Jan 08 08:54:07 2013 -0500
@@ -851,3 +851,20 @@
     }
 }
 
+SyscallReturn
+accessFunc(SyscallDesc *desc, int callnum, LiveProcess *p, ThreadContext *tc)
+{
+    int index = 0;
+
+    string path;
+    if (!tc->getMemProxy().tryReadString(path, p->getSyscallArg(tc, index)))
+        return (TheISA::IntReg)-EFAULT;
+
+    // Adjust path for current working directory
+    path = p->fullPath(path);
+
+    mode_t mode = p->getSyscallArg(tc, index);
+
+    int result = access(path.c_str(), mode);
+    return (result == -1) ? -errno : result;
+}
diff -r 2694770a30d4 -r 31afddc29cd4 src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh   Tue Jan 08 08:54:07 2013 -0500
+++ b/src/sim/syscall_emul.hh   Tue Jan 08 08:54:07 2013 -0500
@@ -335,6 +335,10 @@
 SyscallReturn cloneFunc(SyscallDesc *desc, int num,
                                LiveProcess *p, ThreadContext *tc);
 
+/// Target access() handler
+SyscallReturn accessFunc(SyscallDesc *desc, int num,
+                               LiveProcess *p, ThreadContext *tc);
+
 /// Futex system call
 ///  Implemented by Daniel Sanchez
 ///  Used by printf's in multi-threaded apps
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to