Date: Wed, 15 Dec 2004 20:19:05 +0530 From: Ravi Krishna <ravikrish@gmail.com> To: freebsd-hackers@freebsd.org Subject: FreeBSD system call implementation Message-ID: <6669fd8604121506494c5afe65@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
Hi !
I am new to bsd internals and was looking at the implementation of syscall
in sys/i386/i386/trap.c
here its seems we get the handler for the syscall by
if (p->p_sysent->sv_mask)
code &= p->p_sysent->sv_mask;
if (code >= p->p_sysent->sv_size)
callp = &p->p_sysent->sv_table[0];
else
callp = &p->p_sysent->sv_table[code];
and call using
if (error == 0) {
td->td_retval[0] = 0;
td->td_retval[1] = frame.tf_edx;
STOPEVENT(p, S_SCE, narg);
PTRACESTOP_SC(p, td, S_PT_SCE);
error = (*callp->sy_call)(td, args);
}
My question is why we store the p->p_sysent->sv_table
for each process. What is the reason for keeping this per process?
Are there some situations where two processes can have different system calls
available?
Regards,
Ravi
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6669fd8604121506494c5afe65>
