diff options
author | Ciro Santilli <ciro.santilli@arm.com> | 2018-11-20 16:45:07 +0000 |
---|---|---|
committer | Ciro Santilli <ciro.santilli@arm.com> | 2018-11-27 11:46:36 +0000 |
commit | a66d12c23517a010f5a05efbc2e47d61fba705c9 (patch) | |
tree | 798e527a62dcbb15594b9e35e455ea8801e7054b | |
parent | 90dfafa2c4333a4d9aff7e296554c68752880825 (diff) | |
download | gem5-a66d12c23517a010f5a05efbc2e47d61fba705c9.tar.xz |
sim-se: only implement getdentsFunc on supported hosts
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>
-rw-r--r-- | src/arch/x86/linux/process.cc | 8 | ||||
-rw-r--r-- | src/sim/syscall_emul.cc | 3 | ||||
-rw-r--r-- | src/sim/syscall_emul.hh | 2 |
3 files changed, 12 insertions, 1 deletions
diff --git a/src/arch/x86/linux/process.cc b/src/arch/x86/linux/process.cc index 9ec4ca040..22fe0026c 100644 --- a/src/arch/x86/linux/process.cc +++ b/src/arch/x86/linux/process.cc @@ -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), diff --git a/src/sim/syscall_emul.cc b/src/sim/syscall_emul.cc index 794b0bc2c..4a6fafa27 100644 --- a/src/sim/syscall_emul.cc +++ b/src/sim/syscall_emul.cc @@ -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 diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh index 17d410937..ba607c9cb 100644 --- a/src/sim/syscall_emul.hh +++ b/src/sim/syscall_emul.hh @@ -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, |