sim-se: only implement getdentsFunc on supported hosts
authorCiro Santilli <ciro.santilli@arm.com>
Tue, 20 Nov 2018 16:45:07 +0000 (16:45 +0000)
committerCiro Santilli <ciro.santilli@arm.com>
Tue, 27 Nov 2018 11:46:36 +0000 (11:46 +0000)
The implementation of the getdents syscall relies on SYS_getdents, which
is not available on all archs, because the getdents syscall has been
superseded by getdents64, and does not exist on newer archs such as
aarch64.

This leads the build to break on aarch64 hosts with error:

error: 'SYS_getdents' was not declared in this scope

Change-Id: I8701fb5b61c0418b14a9463ef135a391a7f7a9ba
Reviewed-on: https://gem5-review.googlesource.com/c/14596
Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Maintainer: Brandon Potter <Brandon.Potter@amd.com>

src/arch/x86/linux/process.cc
src/sim/syscall_emul.cc
src/sim/syscall_emul.hh

index 9ec4ca040f4592c4d128136af51d9bb8c6a1260f..22fe0026c20d64fbeb0ea2f890ef12e74836836f 100644 (file)
@@ -298,7 +298,11 @@ static SyscallDesc syscallDescs64[] = {
     /*  75 */ SyscallDesc("fdatasync", unimplementedFunc),
     /*  76 */ SyscallDesc("truncate", truncateFunc),
     /*  77 */ SyscallDesc("ftruncate", ftruncateFunc),
+#if defined(SYS_getdents)
     /*  78 */ SyscallDesc("getdents", getdentsFunc),
+#else
+    /*  78 */ SyscallDesc("getdents", unimplementedFunc),
+#endif
     /*  79 */ SyscallDesc("getcwd", getcwdFunc),
     /*  80 */ SyscallDesc("chdir", chdirFunc),
     /*  81 */ SyscallDesc("fchdir", unimplementedFunc),
@@ -690,7 +694,11 @@ static SyscallDesc syscallDescs32[] = {
     /* 138 */ SyscallDesc("setfsuid", unimplementedFunc),
     /* 139 */ SyscallDesc("setfsgid", unimplementedFunc),
     /* 140 */ SyscallDesc("_llseek", _llseekFunc),
+#if defined(SYS_getdents)
     /* 141 */ SyscallDesc("getdents", getdentsFunc),
+#else
+    /* 141 */ SyscallDesc("getdents", unimplementedFunc),
+#endif
     /* 142 */ SyscallDesc("_newselect", unimplementedFunc),
     /* 143 */ SyscallDesc("flock", unimplementedFunc),
     /* 144 */ SyscallDesc("msync", unimplementedFunc),
index 794b0bc2c1cb82a4ffd953da2c2202a36e1f0674..4a6fafa2713d50966a7022bfa4e90e5fa0b16f86 100644 (file)
@@ -1151,6 +1151,7 @@ rmdirFunc(SyscallDesc *desc, int num, Process *p, ThreadContext *tc)
     return (result == -1) ? -errno : result;
 }
 
+#if defined(SYS_getdents)
 SyscallReturn
 getdentsFunc(SyscallDesc *desc, int callnum, Process *p, ThreadContext *tc)
 {
@@ -1198,4 +1199,4 @@ getdentsFunc(SyscallDesc *desc, int callnum, Process *p, ThreadContext *tc)
     buf_arg.copyOut(tc->getMemProxy());
     return status;
 }
-
+#endif
index 17d41093789b9c6fca54239377cbd66ddfdf4f75..ba607c9cbed9377968882f5ccc54d5fb3b25b9c2 100644 (file)
@@ -303,9 +303,11 @@ SyscallReturn pipeImpl(SyscallDesc *desc, int num, Process *p,
 SyscallReturn getpidFunc(SyscallDesc *desc, int num,
                          Process *p, ThreadContext *tc);
 
+#if defined(SYS_getdents)
 // Target getdents() handler.
 SyscallReturn getdentsFunc(SyscallDesc *desc, int num,
                            Process *p, ThreadContext *tc);
+#endif
 
 // Target getuid() handler.
 SyscallReturn getuidFunc(SyscallDesc *desc, int num,