Add dup() support (from Antti Miettinen).

--HG--
extra : convert_revision : 72c834666afa3c353da026617ad5e7a762eb645f
This commit is contained in:
Steve Reinhardt 2006-08-28 07:39:56 -07:00
parent dc68512222
commit c5384366b6
3 changed files with 18 additions and 1 deletions

View file

@ -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),

View file

@ -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)

View file

@ -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);