arm: add access syscall for ARM SE mode
This patch adds the "access" syscall for ARM SE as required by some spec2006 benchmarks.
This commit is contained in:
parent
c7dbd5e768
commit
4a752b1655
3 changed files with 22 additions and 1 deletions
|
@ -108,7 +108,7 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
|
||||||
/* 30 */ SyscallDesc("utime", unimplementedFunc),
|
/* 30 */ SyscallDesc("utime", unimplementedFunc),
|
||||||
/* 31 */ SyscallDesc("unused#31", unimplementedFunc),
|
/* 31 */ SyscallDesc("unused#31", unimplementedFunc),
|
||||||
/* 32 */ SyscallDesc("unused#32", unimplementedFunc),
|
/* 32 */ SyscallDesc("unused#32", unimplementedFunc),
|
||||||
/* 33 */ SyscallDesc("access", unimplementedFunc),
|
/* 33 */ SyscallDesc("access", accessFunc),
|
||||||
/* 34 */ SyscallDesc("nice", unimplementedFunc),
|
/* 34 */ SyscallDesc("nice", unimplementedFunc),
|
||||||
/* 35 */ SyscallDesc("unused#35", unimplementedFunc),
|
/* 35 */ SyscallDesc("unused#35", unimplementedFunc),
|
||||||
/* 36 */ SyscallDesc("sync", unimplementedFunc),
|
/* 36 */ SyscallDesc("sync", unimplementedFunc),
|
||||||
|
|
|
@ -851,3 +851,20 @@ cloneFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SyscallReturn
|
||||||
|
accessFunc(SyscallDesc *desc, int callnum, LiveProcess *p, ThreadContext *tc)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
string path;
|
||||||
|
if (!tc->getMemProxy().tryReadString(path, p->getSyscallArg(tc, index)))
|
||||||
|
return (TheISA::IntReg)-EFAULT;
|
||||||
|
|
||||||
|
// Adjust path for current working directory
|
||||||
|
path = p->fullPath(path);
|
||||||
|
|
||||||
|
mode_t mode = p->getSyscallArg(tc, index);
|
||||||
|
|
||||||
|
int result = access(path.c_str(), mode);
|
||||||
|
return (result == -1) ? -errno : result;
|
||||||
|
}
|
||||||
|
|
|
@ -335,6 +335,10 @@ SyscallReturn getegidFunc(SyscallDesc *desc, int num,
|
||||||
SyscallReturn cloneFunc(SyscallDesc *desc, int num,
|
SyscallReturn cloneFunc(SyscallDesc *desc, int num,
|
||||||
LiveProcess *p, ThreadContext *tc);
|
LiveProcess *p, ThreadContext *tc);
|
||||||
|
|
||||||
|
/// Target access() handler
|
||||||
|
SyscallReturn accessFunc(SyscallDesc *desc, int num,
|
||||||
|
LiveProcess *p, ThreadContext *tc);
|
||||||
|
|
||||||
/// Futex system call
|
/// Futex system call
|
||||||
/// Implemented by Daniel Sanchez
|
/// Implemented by Daniel Sanchez
|
||||||
/// Used by printf's in multi-threaded apps
|
/// Used by printf's in multi-threaded apps
|
||||||
|
|
Loading…
Reference in a new issue