summaryrefslogtreecommitdiff
path: root/src/sim/syscall_emul.hh
diff options
context:
space:
mode:
authorAli Saidi <Ali.Saidi@ARM.com>2014-04-17 16:55:05 -0500
committerAli Saidi <Ali.Saidi@ARM.com>2014-04-17 16:55:05 -0500
commitc4a2f76fea6f9361363afd901c40290abf3344d9 (patch)
treefe4c8e6d63d351683397418f9f8c4eecf4d0bac9 /src/sim/syscall_emul.hh
parentf5c3f60601c8877196f11f8fc7f79d57e9775426 (diff)
downloadgem5-c4a2f76fea6f9361363afd901c40290abf3344d9.tar.xz
sim, arm: implement more of the at variety syscalls
Needed for new AArch64 binaries
Diffstat (limited to 'src/sim/syscall_emul.hh')
-rw-r--r--src/sim/syscall_emul.hh34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
index ac01ba1e8..e971902cb 100644
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -253,7 +253,10 @@ SyscallReturn gethostnameFunc(SyscallDesc *desc, int num,
SyscallReturn getcwdFunc(SyscallDesc *desc, int num,
LiveProcess *p, ThreadContext *tc);
-/// Target unlink() handler.
+/// Target readlink() handler.
+SyscallReturn readlinkFunc(SyscallDesc *desc, int num,
+ LiveProcess *p, ThreadContext *tc,
+ int index = 0);
SyscallReturn readlinkFunc(SyscallDesc *desc, int num,
LiveProcess *p, ThreadContext *tc);
@@ -350,6 +353,9 @@ SyscallReturn cloneFunc(SyscallDesc *desc, int num,
/// Target access() handler
SyscallReturn accessFunc(SyscallDesc *desc, int num,
LiveProcess *p, ThreadContext *tc);
+SyscallReturn accessFunc(SyscallDesc *desc, int num,
+ LiveProcess *p, ThreadContext *tc,
+ int index);
/// Futex system call
/// Implemented by Daniel Sanchez
@@ -696,6 +702,32 @@ openatFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
return openFunc<OS>(desc, callnum, process, tc, 1);
}
+/// Target facessat() handler
+template <class OS>
+SyscallReturn
+faccessatFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
+ ThreadContext *tc)
+{
+ int index = 0;
+ int dirfd = process->getSyscallArg(tc, index);
+ if (dirfd != OS::TGT_AT_FDCWD)
+ warn("faccessat: first argument not AT_FDCWD; unlikely to work");
+ return accessFunc(desc, callnum, process, tc, 1);
+}
+
+/// Target readlinkat() handler
+template <class OS>
+SyscallReturn
+readlinkatFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
+ ThreadContext *tc)
+{
+ int index = 0;
+ int dirfd = process->getSyscallArg(tc, index);
+ if (dirfd != OS::TGT_AT_FDCWD)
+ warn("openat: first argument not AT_FDCWD; unlikely to work");
+ return readlinkFunc(desc, callnum, process, tc, 1);
+}
+
/// Target sysinfo() handler.
template <class OS>
SyscallReturn