Add dup() support (from Antti Miettinen).
--HG-- extra : convert_revision : 72c834666afa3c353da026617ad5e7a762eb645f
This commit is contained in:
parent
dc68512222
commit
c5384366b6
3 changed files with 18 additions and 1 deletions
|
@ -162,7 +162,7 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
|
|||
/* 38 */ SyscallDesc("osf_old_stat", unimplementedFunc),
|
||||
/* 39 */ SyscallDesc("setpgid", unimplementedFunc),
|
||||
/* 40 */ SyscallDesc("osf_old_lstat", unimplementedFunc),
|
||||
/* 41 */ SyscallDesc("dup", unimplementedFunc),
|
||||
/* 41 */ SyscallDesc("dup", dupFunc),
|
||||
/* 42 */ SyscallDesc("pipe", pipePseudoFunc),
|
||||
/* 43 */ SyscallDesc("osf_set_program_attributes", unimplementedFunc),
|
||||
/* 44 */ SyscallDesc("osf_profil", unimplementedFunc),
|
||||
|
|
|
@ -300,6 +300,19 @@ fchownFunc(SyscallDesc *desc, int num, Process *process, ThreadContext *tc)
|
|||
}
|
||||
|
||||
|
||||
SyscallReturn
|
||||
dupFunc(SyscallDesc *desc, int num, Process *process, ThreadContext *tc)
|
||||
{
|
||||
int fd = process->sim_fd(tc->getSyscallArg(0));
|
||||
|
||||
if (fd < 0)
|
||||
return -EBADF;
|
||||
|
||||
int result = dup(fd);
|
||||
return (result == -1) ? -errno : process->alloc_fd(result);
|
||||
}
|
||||
|
||||
|
||||
SyscallReturn
|
||||
fcntlFunc(SyscallDesc *desc, int num, Process *process,
|
||||
ThreadContext *tc)
|
||||
|
|
|
@ -245,6 +245,10 @@ SyscallReturn chownFunc(SyscallDesc *desc, int num,
|
|||
SyscallReturn fchownFunc(SyscallDesc *desc, int num,
|
||||
Process *p, ThreadContext *tc);
|
||||
|
||||
/// Target dup() handler.
|
||||
SyscallReturn dupFunc(SyscallDesc *desc, int num,
|
||||
Process *process, ThreadContext *tc);
|
||||
|
||||
/// Target fnctl() handler.
|
||||
SyscallReturn fcntlFunc(SyscallDesc *desc, int num,
|
||||
Process *process, ThreadContext *tc);
|
||||
|
|
Loading…
Reference in a new issue