arm: Add unlinkat syscall implementation
added ARM aarch64 unlinkat syscall support, modeled on other <xxx>at syscalls. This gets all of the cpu2006 int workloads passing in SE mode on aarch64. Committed by: Nilay Vaish <nilay@cs.wisc.edu>
This commit is contained in:
parent
5a5416d575
commit
cb911559dc
3 changed files with 25 additions and 2 deletions
|
@ -523,7 +523,7 @@ static SyscallDesc syscallDescs64[] = {
|
||||||
/* 32 */ SyscallDesc("flock", unimplementedFunc),
|
/* 32 */ SyscallDesc("flock", unimplementedFunc),
|
||||||
/* 33 */ SyscallDesc("mknodat", unimplementedFunc),
|
/* 33 */ SyscallDesc("mknodat", unimplementedFunc),
|
||||||
/* 34 */ SyscallDesc("mkdirat", unimplementedFunc),
|
/* 34 */ SyscallDesc("mkdirat", unimplementedFunc),
|
||||||
/* 35 */ SyscallDesc("unlinkat", unimplementedFunc),
|
/* 35 */ SyscallDesc("unlinkat", unlinkatFunc<ArmLinux64>),
|
||||||
/* 36 */ SyscallDesc("symlinkat", unimplementedFunc),
|
/* 36 */ SyscallDesc("symlinkat", unimplementedFunc),
|
||||||
/* 37 */ SyscallDesc("linkat", unimplementedFunc),
|
/* 37 */ SyscallDesc("linkat", unimplementedFunc),
|
||||||
/* 38 */ SyscallDesc("renameat", unimplementedFunc),
|
/* 38 */ SyscallDesc("renameat", unimplementedFunc),
|
||||||
|
|
|
@ -399,10 +399,16 @@ readlinkFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc,
|
||||||
|
|
||||||
SyscallReturn
|
SyscallReturn
|
||||||
unlinkFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc)
|
unlinkFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc)
|
||||||
|
{
|
||||||
|
return unlinkHelper(desc, num, p, tc, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
SyscallReturn
|
||||||
|
unlinkHelper(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc,
|
||||||
|
int index)
|
||||||
{
|
{
|
||||||
string path;
|
string path;
|
||||||
|
|
||||||
int index = 0;
|
|
||||||
if (!tc->getMemProxy().tryReadString(path, p->getSyscallArg(tc, index)))
|
if (!tc->getMemProxy().tryReadString(path, p->getSyscallArg(tc, index)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
|
|
|
@ -195,6 +195,9 @@ SyscallReturn readlinkFunc(SyscallDesc *desc, int num,
|
||||||
LiveProcess *p, ThreadContext *tc);
|
LiveProcess *p, ThreadContext *tc);
|
||||||
|
|
||||||
/// Target unlink() handler.
|
/// Target unlink() handler.
|
||||||
|
SyscallReturn unlinkHelper(SyscallDesc *desc, int num,
|
||||||
|
LiveProcess *p, ThreadContext *tc,
|
||||||
|
int index);
|
||||||
SyscallReturn unlinkFunc(SyscallDesc *desc, int num,
|
SyscallReturn unlinkFunc(SyscallDesc *desc, int num,
|
||||||
LiveProcess *p, ThreadContext *tc);
|
LiveProcess *p, ThreadContext *tc);
|
||||||
|
|
||||||
|
@ -655,6 +658,20 @@ openatFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
|
||||||
return openFunc<OS>(desc, callnum, process, tc, 1);
|
return openFunc<OS>(desc, callnum, process, tc, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Target unlinkat() handler.
|
||||||
|
template <class OS>
|
||||||
|
SyscallReturn
|
||||||
|
unlinkatFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
|
||||||
|
ThreadContext *tc)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
int dirfd = process->getSyscallArg(tc, index);
|
||||||
|
if (dirfd != OS::TGT_AT_FDCWD)
|
||||||
|
warn("unlinkat: first argument not AT_FDCWD; unlikely to work");
|
||||||
|
|
||||||
|
return unlinkHelper(desc, callnum, process, tc, 1);
|
||||||
|
}
|
||||||
|
|
||||||
/// Target facessat() handler
|
/// Target facessat() handler
|
||||||
template <class OS>
|
template <class OS>
|
||||||
SyscallReturn
|
SyscallReturn
|
||||||
|
|
Loading…
Reference in a new issue