From cc84eb813c9455e3f8b222fd884d794af9ae0e7a Mon Sep 17 00:00:00 2001 From: Brandon Potter Date: Thu, 15 Dec 2016 13:16:25 -0500 Subject: [PATCH] syscall_emul: implement fallocate --- src/arch/x86/linux/process.cc | 2 +- src/sim/syscall_emul.cc | 21 +++++++++++++++++++++ src/sim/syscall_emul.hh | 4 ++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/arch/x86/linux/process.cc b/src/arch/x86/linux/process.cc index e5db3cb49..8eb064ae4 100644 --- a/src/arch/x86/linux/process.cc +++ b/src/arch/x86/linux/process.cc @@ -503,7 +503,7 @@ static SyscallDesc syscallDescs64[] = { /* 282 */ SyscallDesc("signalfd", unimplementedFunc), /* 283 */ SyscallDesc("timerfd_create", unimplementedFunc), /* 284 */ SyscallDesc("eventfd", unimplementedFunc), - /* 285 */ SyscallDesc("fallocate", unimplementedFunc), + /* 285 */ SyscallDesc("fallocate", fallocateFunc), /* 286 */ SyscallDesc("timerfd_settime", unimplementedFunc), /* 287 */ SyscallDesc("timerfd_gettime", unimplementedFunc), /* 288 */ SyscallDesc("accept4", unimplementedFunc), diff --git a/src/sim/syscall_emul.cc b/src/sim/syscall_emul.cc index e62a8686a..9c3f50bb3 100644 --- a/src/sim/syscall_emul.cc +++ b/src/sim/syscall_emul.cc @@ -934,6 +934,27 @@ cloneFunc(SyscallDesc *desc, int callnum, LiveProcess *process, } } +SyscallReturn +fallocateFunc(SyscallDesc *desc, int callnum, LiveProcess *process, + ThreadContext *tc) +{ + int index = 0; + int tgt_fd = process->getSyscallArg(tc, index); + int mode = process->getSyscallArg(tc, index); + off_t offset = process->getSyscallArg(tc, index); + off_t len = process->getSyscallArg(tc, index); + + int sim_fd = process->getSimFD(tgt_fd); + if (sim_fd < 0) + return -EBADF; + + int result = fallocate(sim_fd, mode, offset, len); + if (result < 0) + return -errno; + + return 0; +} + SyscallReturn accessFunc(SyscallDesc *desc, int callnum, LiveProcess *p, ThreadContext *tc, int index) diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh index bf7ec1ae7..a3ac9ed3f 100644 --- a/src/sim/syscall_emul.hh +++ b/src/sim/syscall_emul.hh @@ -157,6 +157,10 @@ SyscallReturn unimplementedFunc(SyscallDesc *desc, int num, SyscallReturn ignoreFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc); +// Target fallocateFunc() handler. +SyscallReturn fallocateFunc(SyscallDesc *desc, int num, + LiveProcess *p, ThreadContext *tc); + /// Target exit() handler: terminate current context. SyscallReturn exitFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc); -- 2.30.2