sim-se: Avoid function overloading for syscall implementation
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Mon, 2 Dec 2019 12:39:26 +0000 (12:39 +0000)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Tue, 3 Dec 2019 10:12:02 +0000 (10:12 +0000)
This patch is aligning the readlink and access syscalls to the open one,
which is not overloading the openFunc, but it is factoring the
implementation into a openImpl, which is used by both open and openat.

This is needed if passing them to std::function, whose constructor is
not able to handle overloaded functions.

Change-Id: I50a8aacdfd675181b6fe9a2696220ee29cc5bc4b
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23260
Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Maintainer: Brandon Potter <Brandon.Potter@amd.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/sim/syscall_emul.cc
src/sim/syscall_emul.hh

index 49fee7e8fdb9fd910ff8df53657337b6de44b872..8dc055c5d5355c5a7e1a9e8c3d65dc7071244a93 100644 (file)
@@ -422,11 +422,11 @@ getcwdFunc(SyscallDesc *desc, int num, ThreadContext *tc)
 SyscallReturn
 readlinkFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
 {
-    return readlinkFunc(desc, callnum, tc, 0);
+    return readlinkImpl(desc, callnum, tc, 0);
 }
 
 SyscallReturn
-readlinkFunc(SyscallDesc *desc, int num, ThreadContext *tc, int index)
+readlinkImpl(SyscallDesc *desc, int num, ThreadContext *tc, int index)
 {
     string path;
     auto p = tc->getProcessPtr();
@@ -1147,7 +1147,7 @@ fallocateFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
 }
 
 SyscallReturn
-accessFunc(SyscallDesc *desc, int callnum, ThreadContext *tc, int index)
+accessImpl(SyscallDesc *desc, int callnum, ThreadContext *tc, int index)
 {
     string path;
     auto p = tc->getProcessPtr();
@@ -1166,7 +1166,7 @@ accessFunc(SyscallDesc *desc, int callnum, ThreadContext *tc, int index)
 SyscallReturn
 accessFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
 {
-    return accessFunc(desc, callnum, tc, 0);
+    return accessImpl(desc, callnum, tc, 0);
 }
 
 SyscallReturn
index 0eaec4c1fc6fa6db0c67dbdae91625ebaab34de9..fc6ed62d150410bfbec3b31ac1131fffea8bf1b1 100644 (file)
@@ -171,8 +171,8 @@ SyscallReturn gethostnameFunc(SyscallDesc *desc, int num, ThreadContext *tc);
 SyscallReturn getcwdFunc(SyscallDesc *desc, int num, ThreadContext *tc);
 
 /// Target readlink() handler.
-SyscallReturn readlinkFunc(SyscallDesc *desc, int num, ThreadContext *tc,
-                           int index = 0);
+SyscallReturn readlinkImpl(SyscallDesc *desc, int num, ThreadContext *tc,
+                           int index);
 SyscallReturn readlinkFunc(SyscallDesc *desc, int num, ThreadContext *tc);
 
 /// Target unlink() handler.
@@ -313,9 +313,9 @@ SyscallReturn geteuidFunc(SyscallDesc *desc, int num, ThreadContext *tc);
 SyscallReturn getegidFunc(SyscallDesc *desc, int num, ThreadContext *tc);
 
 /// Target access() handler
-SyscallReturn accessFunc(SyscallDesc *desc, int num, ThreadContext *tc);
-SyscallReturn accessFunc(SyscallDesc *desc, int num, ThreadContext *tc,
+SyscallReturn accessImpl(SyscallDesc *desc, int num, ThreadContext *tc,
                          int index);
+SyscallReturn accessFunc(SyscallDesc *desc, int num, ThreadContext *tc);
 
 // Target getsockopt() handler.
 SyscallReturn getsockoptFunc(SyscallDesc *desc, int num, ThreadContext *tc);
@@ -953,7 +953,7 @@ faccessatFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
     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, tc, 1);
+    return accessImpl(desc, callnum, tc, 1);
 }
 
 /// Target readlinkat() handler
@@ -966,7 +966,7 @@ readlinkatFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
     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, tc, 1);
+    return readlinkImpl(desc, callnum, tc, 1);
 }
 
 /// Target renameat() handler.