Merge zizzer.eecs.umich.edu:/z/m5/Bitkeeper/m5
into zizzer.eecs.umich.edu:/z/stever/bk/m5 --HG-- extra : convert_revision : 38367d6d1fa594b84b64e5930588904719a40c08
This commit is contained in:
commit
cdb5fd9d12
1 changed files with 26 additions and 1 deletions
|
@ -41,6 +41,31 @@
|
|||
using namespace std;
|
||||
using namespace AlphaISA;
|
||||
|
||||
/// Target pipe() handler. Even though this is a generic Posix call,
|
||||
/// the Alpha return convention is funky, so that makes it
|
||||
/// Alpha-specific.
|
||||
SyscallReturn
|
||||
pipeFunc(SyscallDesc *desc, int callnum, Process *process,
|
||||
ExecContext *xc)
|
||||
{
|
||||
int fds[2], sim_fds[2];
|
||||
int pipe_retval = pipe(fds);
|
||||
|
||||
if (pipe_retval < 0) {
|
||||
// error
|
||||
return pipe_retval;
|
||||
}
|
||||
|
||||
sim_fds[0] = process->alloc_fd(fds[0]);
|
||||
sim_fds[1] = process->alloc_fd(fds[1]);
|
||||
|
||||
// Alpha Linux convention for pipe() is that fd[0] is returned as
|
||||
// the return value of the function, and fd[1] is returned in r20.
|
||||
xc->regs.intRegFile[20] = sim_fds[1];
|
||||
return sim_fds[0];
|
||||
}
|
||||
|
||||
|
||||
/// Target uname() handler.
|
||||
static SyscallReturn
|
||||
unameFunc(SyscallDesc *desc, int callnum, Process *process,
|
||||
|
@ -159,7 +184,7 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
|
|||
/* 39 */ SyscallDesc("setpgid", unimplementedFunc),
|
||||
/* 40 */ SyscallDesc("osf_old_lstat", unimplementedFunc),
|
||||
/* 41 */ SyscallDesc("dup", unimplementedFunc),
|
||||
/* 42 */ SyscallDesc("pipe", unimplementedFunc),
|
||||
/* 42 */ SyscallDesc("pipe", pipeFunc),
|
||||
/* 43 */ SyscallDesc("osf_set_program_attributes", unimplementedFunc),
|
||||
/* 44 */ SyscallDesc("osf_profil", unimplementedFunc),
|
||||
/* 45 */ SyscallDesc("open", openFunc<Linux>),
|
||||
|
|
Loading…
Reference in a new issue